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

SymPy含矩阵的符号函数梯度与海森矩阵计算问题求解

错误原因

你使用MatrixSymbol定义的x是整体符号矩阵对象,fx.free_symbols只会识别到这个整体的矩阵符号,不会自动拆分出矩阵内的独立元素符号。SymPy内置的jacobian和hessian默认对标量符号变量求导,对整体矩阵对象求导时会出现逻辑不匹配,才会得到[0,0]的错误结果和形状报错。

正确实现代码

首先将x拆分为独立的标量符号构造函数,再进行求导计算:

from sympy import symbols, Matrix, hessian, display

# 1. 定义变量与目标函数
x1, x2 = symbols('x1 x2')
x = Matrix([x1, x2])
# 原函数的系数矩阵、向量与常数项
A = Matrix([[1, 2], [4, 7]])
b = Matrix([3, 5])
const = 6
# 提取1x1矩阵的标量值作为目标函数
fx = (x.T * A * x + x.T * b + const)[0, 0]

# 2. 计算梯度
grad_f = Matrix([fx.diff(x1), fx.diff(x2)])
# 代入指定点 x=[1, 2]^T
grad_val = grad_f.subs({x1: 1, x2: 2})
print("指定点处梯度:")
display(grad_val)

# 3. 计算海森矩阵
hess_f = hessian(fx, [x1, x2])
# 二次函数海森矩阵为常数,代入点后结果不变
hess_val = hess_f.subs({x1: 1, x2: 2})
print("指定点处海森矩阵:")
display(hess_val)

运行后即可得到预期的梯度和海森矩阵结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:04