【发布时间】:2020-05-26 14:27:21
【问题描述】:
我想根据变量x 和y 计算以下函数的Gradient 和Hessian。任何人都可以帮忙吗?非常感谢。
我从github 中找到了一个用于计算 Rosenbrock 函数的代码。
def objfun(x,y):
return 10*(y-x**2)**2 + (1-x)**2
def gradient(x,y):
return np.array([-40*x*y + 40*x**3 -2 + 2*x, 20*(y-x**2)])
def hessian(x,y):
return np.array([[120*x*x - 40*y+2, -40*x],[-40*x, 20]])
更新:
from sympy import symbols, hessian, Function, N
x, y = symbols('x y')
f = symbols('f', cls=Function)
f = (1/2)*np.power(x, 2) + 5*np.power(y, 2) + (2/3)*np.power((x-2), 4) + 8*np.power((y+1), 4)
H = hessian(f, [x, y]).subs([(x,1), (y,1)])
print(np.array(H))
print(N(H.condition_number()))
输出:
[[9.00000000000000 0]
[0 394]]
43.7777777777778
How to get the Gradient and Hessian | Sympy https://docs.sympy.org/dev/modules/vector/fields.html
【问题讨论】:
-
您尝试这样做时遇到了什么问题?
-
我不知道如何计算
Hessian和Gradient函数。 -
您想通过显示您为其他功能找到的代码告诉我们什么?你不能只用你的函数替换公式吗?
-
然后在数学书上查。
-
我更新了我的问题。请检查。