我有一个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.
有没有办法获得我想要的东西?
编辑:
我尝试将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
但我仍然在寻找更高效的内置选项。
doit()
的错误在0.7.7.dev版本中已修复。 - Adrien