You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymPy中在指定点计算梯度与海森矩阵的技术求助

计算Dixon-Price函数的梯度与海森矩阵值

先补全并修正你的SymPy代码,确保能正确计算目标点的梯度和海森矩阵:

import sympy as sp
import numpy as np

# 定义符号变量
x, y, z = sp.symbols('x y z')

# Dixon-Price函数
f1 = ((1 - x)**2) + 2*(2*y**2 - x)**2 + 3*(2*z**2 - y)**2

# 梯度计算函数:返回列向量
gradient = lambda f, v: sp.Matrix([f]).jacobian(v).T
grad_f1 = gradient(f1, [x, y, z])

# 海森矩阵
hess_f1 = sp.hessian(f1, [x, y, z])

# 目标点:转换为符号变量的字典形式
point = np.array([1, 2, 0])
subs_dict = {x: point[0], y: point[1], z: point[2]}

# 计算梯度在目标点的数值
grad_value = grad_f1.subs(subs_dict).evalf()
# 计算海森矩阵在目标点的数值
hess_value = hess_f1.subs(subs_dict).evalf()

print("梯度值:")
print(grad_value)
print("\n海森矩阵值:")
print(hess_value)

运行后即可得到(1,2,0)处的梯度与海森矩阵结果。


关于值为0的表达式计算耗时更长的原因

这和SymPy的符号运算逻辑直接相关:

  • 当表达式最终结果为0时,SymPy不会直接返回0,而是会优先执行展开、合并同类项、化简等全量代数操作,确认所有项确实能完全抵消。这个过程需要遍历表达式的所有子结构,执行更多运算步骤。
  • 如果结果非0,SymPy在代入数值后,往往不需要完成全部化简流程就能得到明确的非零结果,会提前终止部分计算环节,因此耗时更短。
  • 加上Dixon-Price函数本身是多层嵌套的平方结构,代入特定值后产生的抵消项逻辑复杂,SymPy需要额外时间验证这些项的抵消关系,进一步拉长了计算耗时。

内容的提问来源于stack exchange,提问作者DynoMonster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:14:59