使用Autograd计算非线性方程组雅可比矩阵结果异常,求排查
问题分析与解决
问题原因
你的函数fs将输入拆分为两个独立参数x和y,但Autograd的jacobian函数默认仅对第一个输入参数计算偏导数。因此你得到的结果是两个输出对x的偏导值(即[1, 2x],代入x=1后得到[1., 2.]),而非完整的雅可比矩阵。
修正方案
将输入合并为一个向量参数,让jacobian对整个向量的每个元素求偏导,这样就能生成包含所有偏导组合的雅可比矩阵。
修正后的代码
import autograd.numpy as np from autograd import jacobian x = np.array([1, 2], dtype=float) # 将输入改为单个向量参数 def fs(v): x, y = v return np.array([x + 2*y - 2, x**2 + 4*y**2 - 4]) jacobian_cost = jacobian(fs) # 传入整个向量 print(jacobian_cost(x))
输出结果
array([[ 1., 2.], [ 2., 16.]])
该结果与你预期一致,第一行对应两个输出对x的偏导,第二行对应两个输出对y的偏导,构成完整的雅可比矩阵。
内容的提问来源于stack exchange,提问作者tukulesia123
相关产品推荐
相关产品推荐

