Почему в цикле 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)
А вот что на выходе по двум столбцам:
