Как вычислить интеграл от заданной функции без SymPy? - PullRequest
0 голосов
/ 13 ноября 2018

У меня возникают трудности при создании простого кода цикла для интеграции данной функции без использования SymPy.Я думаю использовать какое-то приближение Римана, но я не знаю, как именно это сделать.Пока у меня есть код:

def xsquared(x):
    n = 2
    return x**n

def integral(fun, xmin, xmax):
    total = 0
    for a in range(xmin, xmax):
        x = a
        total += fun(x*1.235)
    return total 

print(integral(xsquared, 0, 4))

Вывод дает 21.3, но как мне сделать это без ввода числа, относящегося к части "fun(x*1.235)"?

Любая помощь будетбыть оцененным.

1 Ответ

0 голосов
/ 13 ноября 2018

Вычисление интеграла по Риману означает, что вы вычисляете предел суммы Римана, делая внутренние разбиения ( Wikipedia ).

Для этого ваша функция может иметь новый параметр interval: dx или, может быть, вы можете просто угадать интервал, разделив полный диапазон на N интервалы одинакового размера.Вот пример, запрашивающий dx в качестве аргумента.

Тогда ваша функция должна быть:

def riemann(fun, xmin, xmax, dx):
    total = 0
    a = xmin
    while a < xmax:
        total += fun(a + dx/2)*dx
        a += dx
    return total

Пример выходных данных

print(riemann(xsquared, 0, 4, 0.1))
> 21.330000000000013

print(riemann(xsquared, 0, 4, 0.25))
> 21.3125

print(riemann(xsquared, 0, 4, 0.5))
> 21.25

Аналитическое разрешение дает: 64/3 ~ 21.33333

Вы аппроксимируете интеграл, вычисляя площадь прямоугольника, имеющую:

  • высота : значение функции всредняя точка интервала fun(a + dx/2)
  • ширина : длина интервала (dx)

Примечание: если xmax < xmin, следует проверить, что dx < 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...