Как в питоне организовать цикл с выводом колонок и суммы по ним?
Строю полином тригонометрической функции y=sin(x). Для него избрана степень n=5. Отсюда m=2n=10. На данном этапе мне надо получить промежуточный результат (таблицу) значений, как показано ниже (нулевое и 10-е значения исключаются на основании условия формулы):
Собственно, задача — рассчитать значения ячеек таблицы. Они вычисляются по формуле:
.
Здесь k приравнены к n (т.е. k=n=5).
Сейчас я вручную реализовал перебор по k, самостоятельно задавая эти коэффициенты (1, 2 и так далее до 5-ти). Теперь же пытаюсь (пока безуспешно) получить следующий алгоритм:
- Рассчитать столбец произведений ∏ при k=1;
- Занести в список list_product_of_elements;
- Рассчитать сумму этих значений;
- Занести в список sum_of_list_product_of_elements;
- Вывести списки в консоль;
- Внести в столбец фрейма Pandas;
- Очистить списки;
- Перейти к следующему столбцу ∏ при k=2 и повторить операции;
- Вывести заполненный фрейм 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: код с ним также приведен выше.
