Получение коэффициента n-го порядка из расширения серии в Sympy

У меня есть полином, определенный с использованием numpy poly1d:

import numpy as np

p = np.poly1d([-1.37970733e+07,  8.02055768e+07, -1.98442743e+08,  2.70981281e+08,
       -2.20611918e+08,  1.07019785e+08, -2.85873914e+07,  3.24251782e+06])

Затем я разлагаю этот полином в ряд относительно точки, которую я называю radMax = 0.80868373. Вот как я делаю расширение серии:

from sympy import series, Symbol, Poly
x = Symbol('x')
polyExpand = p(x).series(x,radMax,3)/(p(radMax)/0.0523772)

Это дает мне расширение, которое я хочу, и мне нужен коэффициент члена 2-го порядка. Если вы запустите приведенный выше код, вы увидите, что этот коэффициент равен 0,2843162879664. Я хотел бы извлечь этот коэффициент.


person Zach    schedule 27.10.2020    source источник


Ответы (1)


Если вы хотите адресовать коэффициенты по терминам:

from sympy import sympify
print(polyExpand.as_coefficients_dict()[sympify(f"(x - {radMax}) ** 2")])

Если вы хотите получить коэффициенты по индексам:

coeffs = list(polyExpand.as_coefficients_dict().values())
print(coeffs[2]) # order n = 2

Они будут правильно выводить -0.284316287966400. Вы забыли про минус.

person XPhyro    schedule 27.10.2020
comment
Можно ли получить коэффициенты в виде списка или массива, а не в виде словаря? В идеале каким-то упорядоченным образом. Хотя ваш метод работает для меня только с кодом, который я дал выше, я генерирую несколько разных полиномов p и, похоже, сталкиваюсь с проблемой, когда точность radMax отличается от точности, используемой в расширении. В частности, например, я получаю radMax = 0.8086880013254281, тогда как в словаре ключ (x - 0.808688001325428)**2. Обратите внимание, что у первого есть одна дополнительная цифра. - person Zach; 28.10.2020
comment
@Zach Добавил это в ответ. - person XPhyro; 29.10.2020