使用numpy求解带变量的Hessian矩阵逆时报LinAlgError问题求助
问题定位
该问题不是numpy功能限制导致的,属于代码调用逻辑错误:
你定义的hessf是需要传入x1、x2两个参数才能返回二维海森矩阵的可调用函数,但你在实现hessf_inv时,直接将hessf函数对象本身传入了np.linalg.inv,而非先调用hessf拿到实际的矩阵数值。numpy无法对函数对象求逆,识别到输入为非数组的0维对象时就会抛出对应报错。
修正代码
你只需要修改hessf_inv函数,先调用hessf(x1, x2)获取矩阵后再求逆即可,完整可运行代码如下:
import numpy as np # Rosenbrock函数定义 def f(x1, x2): return 100*(x2-x1**2)**2+(1-x1)**2 # 定义梯度函数 def gradf(x1,x2): return np.array([[-400*x1*(x2-x1**2)-2*(1-x1)],[200*(x2-x1**2)]]) # 定义海森矩阵函数 def hessf(x1,x2): return np.array([[-400*x2+1200*x1**2+2 , -400*x1],[-400*x1 , 200]]) # 修正后的海森矩阵求逆函数 def hessf_inv(x1, x2): return np.linalg.inv(hessf(x1, x2)) print(hessf_inv(1,1))
运行后输出结果为:
[[0.5 1. ] [1. 2.005]]
内容的提问来源于stack exchange,提问作者ewolf
相关产品推荐
相关产品推荐

