用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)

原文地址:https://www.cnblogs.com/kisetsu/p/9145393.html

时间: 2024-10-08 07:41:52

用python实现二次函数的求导、求梯度、求模的相关文章

【机器学习基础】对 softmax 和 cross-entropy 求导

目录 符号定义 对 softmax 求导 对 cross-entropy 求导 对 softmax 和 cross-entropy 一起求导 References 在论文中看到对 softmax 和 cross-entropy 的求导,一脸懵逼,故来整理整理. 以 softmax regression 为例来展示求导过程,softmax regression 可以看成一个不含隐含层的多分类神经网络,如 Fig. 1 所示. Fig. 1 Softmax Regression. softmax r

矩阵求导记录

矩阵求导 在看多元线性回归的闭式解的时候遇到矩阵求导问题,总体来讲矩阵求导与函数求导有极大的相似性,查看wiki后记录下矩阵求导的一些性质,方面日后查看. 用到比较多的公式如下(分母布局): \[ \frac{\partial \boldsymbol A\boldsymbol x}{\partial \boldsymbol x}=A^T \] \[ \frac{\partial \boldsymbol x^T\boldsymbol A}{\partial \boldsymbol x}=A \]

【352】线性回归损失函数求导举例

参考:[351]实数对向量求导公式 参考:[352]矩阵转置性质 其他方法可参考 回归算法之线性回归. 线性回归的损失函数如下:$$E_b = {(X b - y)^T (X b - y)}$$ 将转置打开,像是开平方一样,运用到上面的性质:$$\begin{equation*}\begin{split}E_b &= (X b - y)^T (X b - y)\\\\&=((Xb)^T - y^T)(Xb-y)\\\\&=(b^T X^T - y^T)(Xb-y)\\\\&

matlab求导

在matlab中求导要进行符号运算. >>syms x; >>y = x^cos(x); >>ydot = diff(y, x, 1);%对x求一阶导数 ydot =   x^(cos(x) - 1)*cos(x) - x^cos(x)*log(x)*sin(x) >> y2dot = diff(y, x, 2)%求二阶导数,求n阶导数同理. y2dot =   cos(x)*(x^(cos(x) - 2)*(cos(x) - 1) - x^(cos(x)

[转载]机器学习中常用的矩阵求导公式

原文地址:机器学习中常用的矩阵求导公式作者:MachineLearner 矩阵求导好像读书的时候都没学过,因为讲矩阵的课程上不讲求导,讲求导的课又不提矩阵.如果从事机器学习方面的工作,那就一定会遇到矩阵求导的东西.维基百科上:http://en.wikipedia.org/wiki/Matrix_calculus , 根据Y与X的不同类型(实值,向量,矩阵),给出了具体的求导公式,以及一堆相关的公式,查起来都费劲. 其实在实际的机器学习工作中,最常用到的就是实值函数y对向量X的求导,定义如下(其

矩阵求导

Y = A * X --> DY/DX = A'Y = X * A --> DY/DX = AY = A' * X * B --> DY/DX = A * B'Y = A' * X' * B --> DY/DX = B * A' 于是把以前学过的矩阵求导部分整理一下: 1. 矩阵Y对标量x求导: 相当于每个元素求导数后转置一下,注意M×N矩阵求导后变成N×M了 Y = [y(ij)] --> dY/dx = [dy(ji)/dx] 2. 标量y对列向量X求导: 注意与上面不同

对任意函数求导的sas模拟

*模拟求导 步长一定要比阈值小,才能得出准确的结果; data Derivation (keep=interval slope); * function y = 1/x only concern about x>0; deltaX = 1e-6; *割线变为切线时x1减小的步长; x0 = 2; y0 = 0; %function(y0,x0);*需要求导的点; put y0; slope = 0; *需要求得的斜率,即倒数; interval = 5; *x0与x1的在x轴的间距,也是判定停止

一元多项式求导

/* 一元多项式求导 (25) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数). 数字间以空格分隔. 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数. 数字间以空格分隔,但结尾不能有多余空格. 注意"零多项式"的指数和系数都是0,但是表示为"0 0". 输入样例: 3 4 -5 2 6 1 -2 0 即 3X^4 - 5X^2 + 6X - 2 输出样例: 12 3 -10 1 6

MATLAB 单变量函数一阶及N阶求导

1 对一维函数的求导及求特定函数处的变量值 %%最简单的一阶单变量函数进行求导 function usemyfunArray() %主函数必须位于最上方 clc clear syms x %syms x代表着声明符号变量x,只有声明了符号变量才可以进行符号运算,包括求导. %f(x)=sin(x)+x^2; %我们输入的要求导的函数 y = diff(sin(x)+x^2); %代表着对单变量函数f(x)求一阶导数 disp('f(x)=sin(x)+x^2的导数是'); pretty(y);