Как задать условие в функции Python при расчете интеграла?
Реализовал получение интеграла методом Симпсона. Его считает функция integrated(x_0, x_n, n), где x_0 - начало отрезка интегрирования, x_n - конец отрезка интегрирования, n - количество интервалов, на которые разбиваем отрезок интегрирования. Функция запрашивает желаемую точность расчета accuracy.
Структурно функция integrated() содержит внутреннюю функцию simpson(n), которая реализует алгоритм расчета. Затем считается погрешность err_runge, которая сравнивается с accuracy.
Если погрешность err_runge выше точности accuracy, количество разбиений n удваивается, и расчет начинается снова.
После расчета simpson() я реализовал цикл while, однако получил бесконечный цикл. Что исправить? Код:
def integrated(x_0, x_n, n):
# 1. запросим точность
accuracy = float( input('Введите точность расчета (десятичная дробь): ') )
# 2. Определим условие о том, что n должно быть четным
# (это является условием для вычисления погрешности по Рунге)
assert n%2 == 0, 'Значение n должно быть четным'
# 3. рассчитаем интеграл
def simpson(n):
...
# 4. Создадим для удобства переменные
integ_1 = simpson(n)
n *= 2
integ_2 = simpson(n)
# 5. применим критерий точности вычисления
err_simpson = abs((integ_2 - integ_1)/integ_2)
# 6. Применим цикл
while err_simpson > accuracy:
integ_1 = integ_2
n *= 2
integ_2 = simpson(n)
print('Интеграл по методу Симпсона: ', integ)
print('Достигнутая ошибка интегрирования: ', err_simpson)
return integ, err_runge, err_simpson