用python实现二次函数的求导求梯度求模

Posted "sanctuary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python实现二次函数的求导求梯度求模相关的知识,希望对你有一定的参考价值。

建立一个Function类,构造函数的参数是一个函数

其中part的功能是求偏导,var_index表示是第几个变量,val表示这些变量的值

diff的功能是方便一元函数求导

为方便梯度进行线性代数运算,在定义grad函数时,返回值转化成了numpy.array类型

#求导所得为近似结果

from numpy import *

#定义Function类
class Function:
    def __init__(self, _f):
        self.fun = _f

    def value(self, val):
        return self.fun(val)

    #求偏导
    def part(self, var_index, val):
        a = self.fun(val)
        b = a + 1
        i = 0
        e = 1
        e1 = 0.1
        while e > 10 ** (-6) or e > e1:
            e1 = e
            a = b
            val_ = list(val)
            val_[var_index] += 10 ** i
            m = self.fun(val_)
            n = self.fun(val)
            b = (m - n) / 10 ** i
            i -= 2
            e = abs(b - a)
        return a

    #一元函数求导
    def diff(self, val):
        a = self.fun(val)
        b = a + 1
        i = 0
        e = 1
        e1 = 0.1
        while e > 10 ** (-6) or e > e1:
            e1 = e
            a = b
            val_ = val + 10 ** i
            m = self.fun(val_)
            n = self.fun(val)
            b = (m - n) / 10 ** i
            i -= 2
            e = abs(b - a)
        return a

    #求梯度
    def grad(self, val):
        g = array(val)
        for i in range(0, g.size):
            g[i] = self.part(i, val)
        return array(g)

    #求模
    def norm(self, val):
        s = 0
        for x in self.grad(val):
            s += x ** 2
        return sqrt(s)

 

以上是关于用python实现二次函数的求导求梯度求模的主要内容,如果未能解决你的问题,请参考以下文章

1 矩阵分析:二次型的求导

优化理论05----最速下降法最速下降法思想python实现

python实现简单的梯度下降法

pytorh 自动求梯度

梯度下降算法(Gradient Descent)

微积分——自动微分