В Python как выполнить рефакторинг цикла?
Строю полином Ньютона для функции. У него достаточно простая структура:
Здесь дельты при y берутся из списка string_one, а x_0 - для каждого блока-слагаемомго имеют разные значения (из списка x_col_list) - собственно на это указывают нестепени в квадратных скобках: [1] [2] [n].
Пытаюсь построить формулу, где:
xостается иксом, не получая значений (этому служит модульsympy);знаменатель каждой дроби увеличивается на единицу;
элемент
(x - x_0)в каждом слагаемом-блоке прибавляем по одной дополнительной скобке, сохраняя уже накопленные:
(?−0)
(?−0)*(?−0.3142)
(?−0)*(?−0.3142)(?−0.6283)
...
# при последнем слагаемом:
(?−0)*(?−0.3142)(?−0.6283)(?−0.9425)(?−1.2566)(?−1.5708)(?−1.885)(?−2.1991)
Сейчас у меня проблемы:
перебор получаю в обратную сторону:
?(?−2.1991)(?−1.885)...(?−0.3142)xс нулем сразу усекается доx, а мне надо(x - 0)и как-то теперь это надо сложить
Код:
from sympy import symbols, prod
from scipy.special import factorial
x = symbols('x')
string_one = [0.3091,-0.0304,-0.0271,0.0054,0.0025,-0.0016,0.0019,-0.0046,0.0099,-0.019]
x_col_list = [0.0, 0.3142, 0.6283, 0.9425, 1.2566, 1.5708, 1.885, 2.1991, 2.5133]
h=1.25665
x = symbols('x')
# идем по дельтам первой строки:
num=1
for delta in string_one:
# идем по столбику иксов
polynom = round( ( delta/(factorial(num)*h**num) ), 4 ) * prod([x - args for args in x_col_list[::-1]])
num+=1
print(polynom)
Сейчас выход такой:
0.246*x*(x - 2.5133)*(x - 2.1991)*(x - 1.885)*(x - 1.5708)*(x - 1.2566)*(x - 0.9425)*(x - 0.6283)*(x - 0.3142) -0.0096*x*(x - 2.5133)*(x - 2.1991)...
Как видно, скобки прилагаются к каждому слагаемому. И все прочие огрехи. Что можно сделать? Спасибо
