我一直试图计算梯度和海森的多变量方程在symy。代码如下:
s = (x,y,z)
f1 = ((1-x)**2) + 2*(2*y**2-x)**2 + 3*(2*z**2 - y)**2
gradient = lambda f, v: Matrix([f]).jacobian(v).T
H = hessian(f1,[x,y,z])
我想计算np.array
中加载的(1,2,0)
处的梯度和hessian。f1
是Dixon-Price函数。任何帮助都非常感谢。另外,我发现计算值为0的表达式的值比计算值不为0的表达式的值要花费更多的时间。对此有何想法?
2条答案
按热度按时间sg24os4d1#
您可以尝试:
mitkmikd2#
smichr的答案很好,如果你打算在很多点上计算Hessian表达式,那么你最好使用
lambdify
将Hessian表达式转换成一个数值函数:计算将使用Numpy,它要快得多。一种方法如下:
注意,它返回一个numpy数组。
如果你不喜欢带星号的表达式,我们可以修改Hessian矩阵,使用索引对象代替符号: