Python中使用Sympy的Charpoly系数

时间:2017-12-25 19:36:50

标签: python matrix sympy

我是使用Sympy库的新手。我需要提取稍后要使用的特征多项式的所有系数。 例如,我的代码是:

    import sympy as sp
    M = sp.Matrix([[0, 0, 0, 1, 0, 1], [0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 0, -1], [1, 0, -1, 0, 1, 0], [0, 0, 0, 1, 0, 0], [-1, 0, 1, 0, 0, 0]])
    lamda = symbols('lamda')
    p = M.charpoly(lamda)
    print(p)
    print(p.coeffs())

给出输出:

    PurePoly(lamda**6 + lamda**4 - lamda**2, lamda, domain='ZZ')
    [1, 1, -1]

然而,我需要[1,0,1,0,1,0,0],其中包括lamda的零系数,也包括指数4,3,1和0项。我通常会使用for循环迭代方程式以查看哪些项缺失,因此可以将零插入系数数组中的适当位置。但是,当我尝试这样做时,我收到一个错误,说PurePoly类型不支持索引。所以,我想知道是否有人知道如何使用零包括零或自己做的方式?我需要最终将这个代码合并到一个循环中以获得大量矩阵,所以我不能手动完成它。

感谢。

1 个答案:

答案 0 :(得分:2)

当我遇到这样的问题时,我希望对对象的方法进行某种智能命名,并查看对象的目录:

>>> print([w for w in dir(p) if 'coeff' in w])
['all_coeffs', 'as_coeff_Add', 'as_coeff_Mul', ...]

all_coeffs是你想要的那个:

>>> help(p.all_coeffs)
Help on method all_coeffs in module sympy.polys.polytools:

all_coeffs(f) method of sympy.polys.polytools.PurePoly instance
    Returns all coefficients from a univariate polynomial ``f``.

>>> p.all_coeffs()
[1,0,1,0,−1,0,0]