Как задать условие в функции 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
Источник: Stack Overflow на русском