微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Python 中求解二次矩阵方程?

如何解决如何在 Python 中求解二次矩阵方程?

我正在尝试用 Python 求解一个矩阵方程的二次方程。我正在寻找一个矩阵 Ax,它是 2x2 以满足

M_1 Ax^2 - M_2 A_x - M_3 = 0

其中 M_1M_2M_3 是已知的 2x2 numpy 常量数组,Ax^2Ax 本身的矩阵乘法.

到目前为止我的代码

import numpy as np
from scipy.optimize import fsolve

# Calibration
gamma = 0.36
beta = 0.98
b_bar = 0.1
psi = 0.001
g = 0.66
rho_x = 0.11
rho_z = 0.95
c_star = 1 + b_bar * np.exp(-g) * (1 - beta * np.exp(-g * (gamma - 1)))

# Matrices
M1 = np.array([[gamma,0],[0,0]])
M2 = np.array([[gamma,psi * b_bar/(beta * np.exp(-gamma * g))],[c_star,b_bar * (beta * np.exp(-gamma * g) - psi * b_bar)]])
M3 = np.array([[0,- b_bar * np.exp(-g)]])


fsolve(lambda Ax:  M1 @ Ax @ Ax - M2 @ Ax - M3,np.eye(2))

我收到以下错误

ValueError: matmul: Input operand 1 has an mismatch in its core dimension 0,with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 2)

fsolve 评估函数似乎工作正常。我不知道发生了什么。我错过了什么?在 Python 中解决这个系统的最佳方法是什么?谢谢!

解决方法

“你需要传入一维向量和足够的数据点来解决。” – Mad Physicist

这将需要在 lambda 表达式中使用一些更高形式的魔法。在显式函数定义中实现这样的包装器要简单得多

def fun(x):
    Ax = x.reshape([2,2]) 
    R = M1 @ Ax @ Ax - M2 @ Ax - M3
    return R.flatten() 

fsolve(fun,np.eye(2).flatten())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。