我有一个Sympy矩阵A和一个多项式表达式P,我想计算P(A) .
这是一个例子:
x = Symbol('x')
P = x**2 - 3*x + 5
A = Matrix([ [1,3], [-1,2] ])
P.subs(x, A)
我希望Sympy计算 A**2 - 3*A + 5*eye(2)
(在这个例子中,结果是零矩阵) .
但是这失败并显示错误消息:
AttributeError: ImmutableMatrix has no attribute as_coeff_Mul.
有什么方法可以获得我想要的东西吗?
Edit: 我试图将 P
转换为Sympy的多项式类,然后替换,但结果是无用的:
Poly(P).subs(A)
Poly(Matrix([ [ 1, 3], [-1, 2]])**2 - 3*Matrix([ [ 1, 3],
[-1, 2]]) + 5, Matrix([ [ 1, 3], [-1, 2]]), domain='ZZ')
我可以使用以下函数获得正确的结果:
def poly_matrix(P, A):
coeffs = Poly(P).all_coeffs()[::-1]
res = zeros(A.rows)
for i in range(len(coeffs)):
res += coeffs[i]*(A**i)
return res
但我仍在寻找更高效的内置选项 .
2 回答
矩阵表达式仍然有点错误,希望它们将来会被修复 .
无论如何,这是执行替换的另一种方法:
这里似乎MatPow无法执行.doit()操作 . 这可能是另一个错误 .
在输出编号5中,打印机也存在错误(-3应该是-3) .
我真的希望有人能最终解决所有这些问题 .
尝试评估多项式的每个项 .
这将评估你的表达 .