Коэффициенты Charpoly с использованием Sympy в Python

Я новичок в использовании библиотеки 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], который включает в себя нулевые коэффициенты лямды и экспоненты 4, 3, 1 и 0, слагаемые. Я бы обычно использовал цикл for для итерации по уравнению, чтобы увидеть, какие термины отсутствуют, так что ноль может быть вставлен в соответствующее место в массиве коэффициентов. Однако, когда я попытался сделать это, я получил сообщение о том, что тип PurePoly не поддерживает индексирование. Итак, мне было интересно, если кто-нибудь знает, как заставить симпли включать нули или способ сделать это сам? Мне нужно будет в конечном итоге включить этот код в цикл для множества матриц, поэтому я не могу сделать это вручную.

Благодарю.

1 ответ

Когда у меня возникают подобные вопросы, я надеюсь на какое-то интеллектуальное именование методов для объектов и просматриваю каталог объекта:

>>> 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]
Другие вопросы по тегам