在Python中使用Sympy的Charpoly系数

问题描述 投票:3回答:1

我是使用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类型不支持索引。所以,我想知道是否有人知道如何使用零包括零或自己做的方式?我需要最终必须将此代码合并到一个循环中以获取大量矩阵,因此我无法手动执行此操作。

谢谢。

python matrix sympy
1个回答
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]
© www.soinside.com 2019 - 2024. All rights reserved.