Как вычислить определенные и неопределенные интегралы в Python
Python — это универсальный язык программирования, который предлагает библиотеки и инструменты для научных вычислений и математических расчетов.
Многие существенные математические операции часто связаны с определенными и неопределенными интегралами. В этой статье мы рассмотрим пример выполнения вычислений интегралов с помощью Python.
Как вычислить определенные интегралы с одной переменной
Установить SciPy
Прежде чем мы начнем, нам нужно установить модуль SciPy. Он предоставляет набор математических алгоритмов и функций, которые мы будем использовать.
Вы можете сделать это, выполнив следующую команду в терминале:
pip install scipy
Чтобы вычислить определенные интегралы с одной переменной, нам нужно сначала импортировать quad
из scipy.integrate
. Это функция общего назначения, используемая для вычисления определенных интегралов с одной переменной.
from scipy.integrate import quad
Элементарные функции
Оттуда нам нужно определить подынтегральную функцию как функцию в Python.
Например, если бы мы хотели вычислить интеграл от х-квадрата, мы бы определили подынтегральную функцию как функцию Python следующим образом:
def integrand(x):
return x**2
Как только мы определим подынтегральную функцию, мы можем вычислить определенный интеграл, используя счетверенную функцию следующим образом:
print(quad(integrand, 0, 1))
# (0.33333333333333337, 3.700743415417189e-15)
В приведенном выше коде 0
представляет собой нижний предел интегрирования, а 1
— верхний предел интегрирования. Их может быть любое другое число.
В этом примере мы вычисляем, что оценочный результат интеграла от 0 до 1 от X² составляет приблизительно 0,333 с абсолютной ошибкой примерно 3,7e-15.
Функция quad
возвращает кортеж оценки определенного integrand
, за которым следует абсолютная ошибка оценки.
Четверная функция, по сути, оценивает подынтегральную функцию при нескольких различных значениях между нашими пределами интегрирования, чтобы иметь возможность вычислить оценку интеграла.
Другой пример: если бы я хотел вычислить интеграл от (x+1)/x**2
. Сначала мы определили бы его как функцию в Python и передали бы в функцию quad
вместе с ограничениями интеграции:
from scipy.integrate import quad
def integrand(x):
return(x+1)/x**2
print(quad(integrand, 1, 2))
# (1.1931471805599452, 1.3246594716242401e-14)
В этом примере мы вычисляем, что оценочный результат интеграла от 1 до 2 от x +1 по всему x-квадрату составляет приблизительно 1,19 с абсолютной ошибкой примерно 1,32e-14.
Другие общие функции
Если мы хотим использовать общие математические функции, такие как sin(x)
или log(x)
, мы можем использовать другой пакет Python для научных вычислений — NumPy. Вы можете установить пакет с помощью следующей команды:
pip install numpy
Импортируя его, мы получаем доступ к этим общим функциям, которые мы можем использовать в нашем подынтегральном выражении:
from scipy.integrate import quad
from numpy import log, sin
def integrand(x):
return log(sin(x))
print(quad(integrand, 0, 2))
# (-1.1022223889049558, 1.2237126744196256e-15)
В этом примере мы вычисляем, что оценочный результат интеграла от 0 до 2 от log(sin(x)) приблизительно равен -1,10 с абсолютной ошибкой примерно 1,22e-15.
Полный список математических функций, которые предоставляет NumPy, находится в их документации.
Как использовать константы
NumPy также предоставляет полезные константы, такие как e
и pi
, а также inf
. Это представление с плавающей запятой положительной бесконечности. Мы можем использовать его для вычисления определенного интеграла, который сходится.
from scipy.integrate import quad
from numpy import inf, exp
def integrand(x):
return exp(-x)
print(quad(integrand, 0, inf))
# (1.0000000000000002, 5.842606742906004e-11)
В этом примере мы вычисляем, что оценочный результат интеграла e
, возведённого в -x от 0 до бесконечности, приблизительно равен 1,00 с абсолютной ошибкой примерно 5,84e-11.
Как вычислить интегралы от нескольких переменных
Двойные интегралы
Для вычисления двойных интегралов нам нужно импортировать функцию dblquad
из scipy.integrate
:
from scipy.integrate import dblquad
Мы определяем подынтегральную функцию аналогичным образом, чтобы определить ее с одной переменной, только на этот раз вместо этого мы указали два аргумента.
def integrand(y, x):
return x*y**2
Затем мы можем вычислить определенный интеграл, используя функцию dblquad
, заданную scipy
.
Обратите внимание, что подынтегральное выражение — это функция, которая должна принимать y
в качестве первого параметра и x
в качестве второго параметра.
print(dblquad(integrand, 0, 1, 2, 4))
# (9.333333333333334, 2.0679162295394134e-13)
В этом примере мы подсчитали, что оценочный результат двойного интеграла x
, умноженного на y², от x = 0 до 1 и от y = 2 до y = 4 составляет приблизительно 9,33 с абсолютной ошибкой примерно 2,07e-13.
Функция требует, чтобы мы передали подынтегральное выражение, нижний и верхний пределы интегрирования для x
, а затем нижний и верхний пределы интегрирования для y
.
Переменные пределы
Чтобы вычислить интегралы с переменными пределами, нам нужно определить функции нижнего и верхнего пределов интегрирования для y
через x
:
def upper_limit_y(x):
return x**2
def lower_limit_y(x):
return x
def integrand(y, x):
return x+y
print(dblquad(integrand, 0, 2, lower_limit_y, upper_limit_y))
В этом примере мы вычисляем, что расчетный результат двойного интеграла x+y от x = 0 до x = 2 и от y = x до y = X² составляет приблизительно 3,2 с абсолютной ошибкой примерно 1,10e- 13.
Тройные интегралы
Для вычисления тройных интегралов мы можем использовать функцию tplquad
:
from scipy.integrate import tplquad
def integrand(z, y, x):
return z*(x+y+z)
print(tplquad(integrand, 0, 1, 4, 5, 0, 1))
# (2.8333333333333335, 3.6983326566167174e-14)
Функция требует, чтобы мы передали аналогичные аргументы, являющиеся верхним и нижним пределами интегрирования по x
, y
и z
.
В этом примере мы рассчитываем, что предполагаемый результат тройного интеграла от z, умноженного на (x+y+z) от x = 0 до x = 1, y = 4 до y = 5 и от z = 0 до z = 1 составляет примерно 2,83 с абсолютной ошибкой 3,70e-14:
Как вычислить неопределенные интегралы с одной переменной
Чтобы вычислить неопределенные интегралы с одной переменной с помощью Python, нам нужно использовать библиотеку SymPy. Он используется для символьных вычислений и включает точные вычисления с использованием переменных. Чтобы установить его, установите модуль SymPy:
pip install sympy
После его установки мы можем импортировать Symbol
и интегрировать методы из sympy
:
from sympy import Symbol, integrate
Сначала нам нужно определить переменные, используемые в подынтегральной функции:
x = Symbol('x')
После этого мы можем интегрировать функцию, используя метод интеграции, который предоставляет SymPy. Он ожидает два аргумента: первый — подынтегральная функция, а второй — переменная, по которой мы интегрируем.
Например, если мы хотим интегрировать X² относительно x, мы можем определить подынтегральное выражение в Python как x**2:
print(integrate(x**2, x))
# (x**3)/3
В этом примере мы вычисляем интеграл от X², который является x³ над 3.
Обратите внимание, что SymPy не добавляет константу интегрирования, но это подразумевается.
SymPy также предоставляет другие общие функции, такие как sin(x)
и exp(x)
, которые мы можем использовать.
Прежде чем использовать их, нам сначала нужно импортировать их из sympy
:
from sympy import Symbol, integrate, sin
Затем, используя импортированную функцию sin, мы можем вычислить интеграл от sin(x)
.
x = Symbol('x')
print(integrate(sin(x), x))
# -cos(x)
В этом примере мы вычисляем интеграл от sin(x)
, который равен -cos(x)
:
Sympy предоставляет полный список математических функций, которые вы можете использовать в своей документации.
Краткое содержание
В этом уроке мы рассмотрели основы того, как вычислять как определенные, так и неопределенные интегралы в Python. Мы также рассмотрели, как вычислять интегралы от элементарных функций, которые включали в себя общие математические функции, а также с использованием констант.
Мы использовали популярные библиотеки Python для научных вычислений и рассмотрели примеры вычисления интегралов.
Если вам нравится то, что я пишу, рассмотрите возможность подписки на мой канал YouTube.
Заключение:
Статья останется не доработанной. Но мы ее опубликуем. Необходимо исправить формулы с самом тексте, не могу столько времени уделить на это. Возможно на выходных.
Удачного кодирования!