В Python как выполнить рефакторинг цикла?

Строю полином Ньютона для функции. У него достаточно простая структура:

Формула полинома

Здесь дельты при y берутся из списка string_one, а x_0 - для каждого блока-слагаемомго имеют разные значения (из списка x_col_list) - собственно на это указывают нестепени в квадратных скобках: [1] [2] [n].

Пытаюсь построить формулу, где:

  1. x остается иксом, не получая значений (этому служит модуль sympy);

  2. знаменатель каждой дроби увеличивается на единицу;

  3. элемент (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)

Сейчас у меня проблемы:

  1. перебор получаю в обратную сторону: ?(?−2.1991)(?−1.885)...(?−0.3142)

  2. x с нулем сразу усекается до x, а мне надо (x - 0)

  3. и как-то теперь это надо сложить

Код:

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)...

Как видно, скобки прилагаются к каждому слагаемому. И все прочие огрехи. Что можно сделать? Спасибо


Ответы (0 шт):