📜  如何使用Python找到函数的梯度?

📅  最后修改于: 2022-05-13 01:54:35.298000             🧑  作者: Mango

如何使用Python找到函数的梯度?

函数的变化率。我们将使用numdifftools来查找函数的梯度。

例子:

Input : x^4+x+1
Output :Gradient of x^4+x+1 at x=1 is  4.99

Input :(1-x)^2+(y-x^2)^2
Output :Gradient of (1-x^2)+(y-x^2)^2 at (1, 2) is  [-4.  2.] 

方法:

  • 对于单变量函数:对于单变量函数,我们可以直接使用“lambda”定义如下:-
    g=lambda x:(x**4)+x+1
  • 对于多变量函数:我们将使用“def”定义一个函数并传递一个数组“x”,它将返回多变量函数,如下所述:-
    def rosen(x): 
        return (1-x[0])**2 +(x[1]-x[0]**2)**2

    其中“rosen”是函数名,“x”作为数组传递。 x[0]x[1]是数组元素,其顺序与数组中定义的顺序相同。即上面定义的函数是(1-x^2)+(yx^2)^2

类似地,我们也可以以与上述相同的方式定义超过 2 个变量的函数。

使用方法:渐变()
句法:

nd.Gradient(func_name)

例子:

import numdifftools as nd
  
  
g = lambda x:(x**4)+x + 1
grad1 = nd.Gradient(g)([1])
print("Gradient of x ^ 4 + x+1 at x = 1 is ", grad1)
  
def rosen(x): 
    return (1-x[0])**2 +(x[1]-x[0]**2)**2
  
grad2 = nd.Gradient(rosen)([1, 2])
print("Gradient of (1-x ^ 2)+(y-x ^ 2)^2 at (1, 2) is ", grad2)

输出:

Gradient of x^4+x+1 at x=1 is  4.999999999999998
Gradient of (1-x^2)+(y-x^2)^2 at (1, 2) is  [-4.  2.]