如何使用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.]