使用Python中的Sympy计算特征多项式系数

3

我是第一次使用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类型不支持索引。因此,我想知道是否有人知道如何使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]

你也可以查看 help(p) 并搜索 coeff(输入 /coeff)。这将帮助你找到不仅方法名称中提到“coeff”的方法,还有文档字符串中提到它的方法。 - asmeurer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接