Почему в цикле Python получаю список из одинаковых значений?

Работаю над учебной задачей дифференцирования. В коде есть цикл, где мы получаем первую и вторую производные. И я уже все мозги сломал, решая проблему: первая производная у меня с разными значениями по строкам, а вторая - с одним и тем же. Хотя код идентичен, лежит в одном цикле, и ошибки в данном цикле вроде бы нет. Вдруг со стороны виднее, что не так.

Фрагмент моего кода:

import numpy as np

def func(x):
    return np.sin(x)

#1. порядок полинома
order = 4

num = 11
h = 0.1 * np.pi
x_j_list = [(h / 2 * j) for j in range(0, num * 2 + 1)]
# 3. формируем список x_i
x_i_list = [(h * i) for i in range(0, num + 1)]
# 4.1. формируем список y_i
y_i_list = [(func(x)) for x in x_i_list]
# 4.2. формируем список  y_j для дальнейшего расчета погрешности в точках x_j
y_j_list_dif = []
for x in x_j_list:
    y_j_dif = (func(x))
    y_j_list_dif.append(y_j_dif)
    
first_diff_list_original = []
second_diff_list_original = []

for points, point_elem_j_dif_err in enumerate(x_j_list):
    ...
        # 8.3.2.1. рассчитаем первую прозводную для исходной сетки аналитической функции
        summas = 0  # sum 
        for j_first_err in range(0, order):
            produs = 1  # произведение
            for k_first_err in range(0, order):
                if k_first_err != j_first_err:
                    produs *= (((point_elem_j_dif_err - x_0_dif_20) / h_new_20) - k_first_err)
            summas += produs
        first_diff_original = ((1 / h_new_20) * (string_one_20[0] + (sum_final_first_err * summas)))
        first_diff_list_original.append(first_diff_original)

        
        # 8.3.2.2. рассчитаем вторую прозводную аналитической функции
        sum_outside_sec_dif = 0  # первая сумма 
        for j_second_err in range(0, order):
            sum_inside_sec_dif = 0  # вторая сумма 
            for k_second_err in range(0, order):
                if k_second_err != j_second_err:
                    prod_inside_sec_dif = 1  # произведение 
                    for l_second_err in range(0, order):
                        if l_second_err != k_second_err and l_second_err != j_second_err:
                            prod_inside_sec_dif *= (
                                        ((point_elem_j_dif_err - x_0_dif_20) / h_new_20) - l_second_err)
                    sum_inside_sec_dif += prod_inside_sec_dif
            sum_outside_sec_dif += sum_inside_sec_dif
        second_diff_original = (
                    (1 / (h_new_20 ** 2)) * (string_one_20[1] + (sum_final_second_err * sum_outside_sec_dif)))
        second_diff_list_original.append(second_diff_original)

А вот что на выходе по двум столбцам: введите сюда описание изображения


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