Как в питоне организовать цикл с выводом колонок и суммы по ним?

Строю полином тригонометрической функции y=sin(x). Для него избрана степень n=5. Отсюда m=2n=10. На данном этапе мне надо получить промежуточный результат (таблицу) значений, как показано ниже (нулевое и 10-е значения исключаются на основании условия формулы):

введите сюда описание изображения

Собственно, задача — рассчитать значения ячеек таблицы. Они вычисляются по формуле: введите сюда описание изображения.

Здесь k приравнены к n (т.е. k=n=5).

Сейчас я вручную реализовал перебор по k, самостоятельно задавая эти коэффициенты (1, 2 и так далее до 5-ти). Теперь же пытаюсь (пока безуспешно) получить следующий алгоритм:

  1. Рассчитать столбец произведений ∏ при k=1;
  2. Занести в список list_product_of_elements;
  3. Рассчитать сумму этих значений;
  4. Занести в список sum_of_list_product_of_elements;
  5. Вывести списки в консоль;
  6. Внести в столбец фрейма Pandas;
  7. Очистить списки;
  8. Перейти к следующему столбцу ∏ при k=2 и повторить операции;
  9. Вывести заполненный фрейм Pandas.

Поскольку неверно рассчитываются колонки, то количество элементов с объектов Pandas тоже не совпадает. Что не так в моем цикле?

Код:

# Рассчитаем коэффициенты b_j: 
# получаем столбцы перемноженных значений y_j на sin(k*x_j) для таблицы выше

# сначала объявим списки, переменные, фрейм Pandas
df_table = pd.DataFrame(columns=['j','y_j', 'П, k=1', 'П, k=2', 'П, k=3', 'П, k=4', 'П, k=5'])
n=5
m=10
list_product_of_elements = []
sum_of_list_product_of_elements = []
sin_list = []

# следом получим столбец y_j:
for elem in x_list:
    sin = round(math.sin(1*elem), 4)
#     print(sin)
    sin_list.append(sin)
summa = sum(sin_list)

# теперь займемся формированием таблицы:
# идем по индексам коэффициентов k (т.е. k=1, k=2 и т.д.):
for n_elems in range(1, n+1): 
    # идем по элементам графы sin(x) (то есть y_j):
    for y_j in sin_list[1:10]:  
        # идем по x_j, рассчитанным по формуле для получения коэффициента b_j
        for x_j in grid_x_j_for_b_k: 
            product_of_elements = round( (y_j*np.sin(n_elems*x_j)), 4)
        # заносим в список рассчитанные элементы для данного k
        list_product_of_elements.append(product_of_elements) 
        # получаем сумму элементов по итерации
        sum_of_list_product_of_elements.append(sum(list_product_of_elements)) 
        # заполняем колонки фрейма 
        df_table[f'П, k={n_elems}'] = list_product_of_elements      
        # вывод колонки в консоль
        print(f'Произведения для k={n_elems}: ', list_product_of_elements)   
        # вывод суммы колонки в консоль
        print(f'Сумма для k={n_elems}: ', sum_of_list_product_of_elements)  
        # очистка списка элементов
        list_product_of_elements.clear()      
        # очистка списка суммы
        sum_of_list_product_of_elements.clear()
    
df_table['j'] = sin_list[1:10]

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

Автор решения: Алексей Казанцев

Вроде бы, перенастроил цикл и получил более корректный вывод:

Произведения для k=1: [0.0955, 0.1816, 0.2499, 0.2939, 0.309, 0.294, 0.2502, 0.182, 0.0959]

Сумма для k=1: [1.952]

Произведения для k=2: [-0.1816, -0.3454, -0.4754, -0.559, -0.5878, -0.5593, -0.476, -0.3461, -0.1825]

Сумма для k=2: [-3.7131]

и так далее до k=5

Скрипт выполнил так:

# идем по индексам коэффициентов k (т.е. k=1, k=2 и т.д.):
for n_elems in range(1, n+1): 
    for y_j in sin_list[1:10]:  
        for x_j in grid_x_j_for_b_k: 
            product_of_elements = round( (y_j*np.sin(n_elems*x_j)), 4)
        list_product_of_elements.append(product_of_elements) 
    sum_of_list_product_of_elements.append(sum(list_product_of_elements))  
    df_table[f'П, k={n_elems}'] = list_product_of_elements      
    print(f'Произведения для k={n_elems}: ', list_product_of_elements)   
    print(f'Сумма для k={n_elems}: ', sum_of_list_product_of_elements)  
    list_product_of_elements.clear()      
    sum_of_list_product_of_elements.clear()
df_table['y_j'] = sin_list[1:10]
df_table.loc['Сумма'] = df_table.sum()
print(df_table)

Также разобрался с фреймом Pandas: код с ним также приведен выше.

→ Ссылка