我想在SymPy中创建一个多项式,但理想情况下我想尽可能地编写我的代码:
from sympy import *
sx, sa0, sa1, sa2 = symbols('x sa0 sa1 sa2')
sa = MatrixSymbol('a',3,1)
polynomial = sum([sa[i,0]*sx**i/factorial(i) for i in range(sa.shape[0])])
以下表达式明确给出了多项式,但代码并不像我希望的那样通用:
poly2 = sx**2*sa2/2 + sx*sa1 + sa0
在此表达式中sa0
,sa1
,sa2
分别替换sa[0,0]
,sa[1,0]
和sa[2,0]
。
我的问题是我可以评估poly2
但不能评估多项式':
>>> print(poly2.evalf(subs={sx: 10, sa0: 1, sa1: 1, sa2: 1}))
>>> 61.0000000000000
>>> print(polynomial.evalf(subs={sx: 10, sa[0,0]: 1, sa[1,0]: 1, sa[2,0]: 1}))
>>> 0.5*x**2*a[2, 0] + x*a[1, 0] + a[0, 0]
>>> print(polynomial.evalf(subs={sx: 10, sa: [[1, 1, 1]]}))
>>> 0.5*x**2*a[2, 0] + x*a[1, 0] + a[0, 0]
如何在函数中插入MatrixSymbol对象sa
的值?
答案 0 :(得分:0)
尝试使用xreplace
代替evalf
。理想情况下subs
也可以使用,但看起来有一个错误。