Почему функция Python не возвращает ожидаемое представление колонки Pandas?
Рассчитываю функцию поиска корня в уравнении dichotomy()
способом дихотомии и затем вывожу значения с помощью декоратора print_dichotomy()
. Полагаю, что в итоге увижу колонки корень - значение функции в корне - погрешность - сходимость. Однако на деле получаю так, что из столбцов ожидаемо выводятся лишь корень и значение функции, а две другие колонки некорректны. В них погрешность представлена лишь одним значением (остальные строки NaN
), а сходимость - все ее значения оказались в одной строке.
Я не стал расписывать суть функции dichotomy()
, поместив в нее списки псевдозначений для колонок Pandas.
В чем ошибка?
Мой код:
import numpy as np
import pandas as pd
def print_dichotomy(funcs):
def wrapper(a, b, eps_func, eps_arg):
*res, func, eps_list, prev_roots = list(funcs(a, b, eps_func, eps_arg))
func = list(map(lambda x: f'{f(x):.10f}', res))
result_table = pd.DataFrame()
result_table['Корни'] = pd.Series(res)
result_table['Значения функции'] = pd.Series(func)
result_table['Погрешность расчета'] = pd.Series(eps_list)
result_table['Сходимость'] = pd.Series(prev_roots)
print(result_table)
return wrapper
def f(x):
return 1.2 - np.log(x) - 4 * np.cos(2 * x)
@print_dichotomy
def dichotomy(a, b, eps_func, eps_arg):
# 1. создаем переменную-список для хранения значений корня
prev_roots = [0.01, 0.01, 0.01, 0.01, 0.01, 0.01]
# 2. создадим список для хранения погрешностей расчета
eps_list = [0.02, 0.02, 0.02, 0.02, 0.02, 0.02]
# 3. создадим список для хранения корней
roots = [0.03, 0.03, 0.03, 0.03, 0.03, 0.03]
for i in roots:
root = i
# 4. возвращаем корень
if root:
yield root
# 5. возвращаем значение погрешности расчета корня, сходимости
yield eps_list, prev_roots
dichotomy(0.0001, 50, 0.000001, 0.000001)