使用矩阵作为输入评估SymPy中的函数

时间:2014-07-23 01:23:09

标签: python sympy

我想在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

在此表达式中sa0sa1sa2分别替换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的值?

1 个答案:

答案 0 :(得分:0)

尝试使用xreplace代替evalf。理想情况下subs也可以使用,但看起来有一个错误。