Коэффициенты 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]