Нахождение корней многочленов Чебышева в python

Я хочу найти корни полинома Чебысева любого порядка с помощью Python. Я видел похожие темы для полиномов Лежандра. Однако я построил свои многочлены, используя метод, определенный здесь как

import numpy as np 
import sympy as sp 

f0 = lambda x: chebyt(0,x)
f1 = lambda x: chebyt(1,x)
f2 = lambda x: chebyt(2,x)
f3 = lambda x: chebyt(3,x)
f4 = lambda x: chebyt(4,x)
plot([f0,f1,f2,f3,f4],[-1,1])

Я пытался использовать np.roots(f4), но получаю следующую ошибку: TypeError: float() argument must be a string or a number, not 'function'. Кроме того, кажется, что даже если бы я мог, это не сработало бы для высокого порядка полиномы.


person slow_learner    schedule 02.12.2019    source источник


Ответы (1)


Это можно сделать, найдя коэффициенты полиномов Чебышева с помощью метода под заголовком «Базовая оценка» здесь, а затем с помощью np.roots в перевернутом списке, чтобы создать корни многочлена.

Использование np.roots(f4) не работало, потому что функция roots принимает только список полиномиальных коэффициентов, а не лямбда-функцию.

Код:

from mpmath import chebyt, chop, taylor
import numpy as np

for n in range(5):
    print(np.roots(chop(taylor(lambda x: chebyt(n, x), 0, n))[::-1]))

Вывод:

[]
[0.]
[ 0.70710678 -0.70710678]
[ 0.8660254 -0.8660254  0.       ]
[-0.92387953  0.92387953 -0.38268343  0.38268343]

Надеюсь, это поможет.

person CDJB    schedule 02.12.2019
comment
Действительно помогает. Это то, что мне нужно. Однако, поскольку это было указано в этой ссылке, math.stackexchange.com / questions / 12160 /, кажется, что корни могут не работать для многочленов высокого порядка. Вы можете дать мне совет по этому поводу? - person slow_learner; 02.12.2019
comment
Извините, эта область не является моей сильной стороной - возможно, вам лучше задать вопросы по математике. - person CDJB; 02.12.2019