Друкарня від WE.UA

Символьне обчислення інтегралів у Python за допомогою sympy

Зміст

У цій статті ми будемо займатися символьним обчисленням інтегралів у Python за допомогою спеціальної бібліотеки sympy. Ми будемо обчислювати усі наявні види інтегралів.

Встановлення

Для Windows:

pip install sympy

Для MacOS:

pip3 install sympy

Для Linux:

pip install sympy

Класичні інтеграли

Спочатку пропоную розглянути символьне обчислення доволі звичайних інтегралів — визначених та невизначених.

Невизначені інтеграли

Отже, невизначені інтеграли — це такий ти інтегралів, який не має меж. Пропоную спробувати записати ось такий інтеграл у рамках цього розділу статті:

Наш перший інтеграл

Спершу імпортуємо бібліотеку sympy, яка надає можливість проводити обчислення символьно:

import sympy as sp

Далі створимо функцію, яка буде приймати потрібні параметри та інтегрувати:

def indefinite_integral(function, x):
    integration = sp.integrate(function, x)
    print(f"Result: {integration}")

Наступним кроком стврюємо так звану символьну змінну, яку будемо інтегрувати:

x = sp.Symbol("x")

Тепер сворюємо змінну для нашої підінтегральної функції:

function = (x + x) ** 2

Ось повний код:

import sympy as sp


def indefinite_integral(function, x):
    integration = sp.integrate(function, x)
    print(f"Result: {integration}")


x = sp.Symbol("x")
function = (x + x) ** 2

indefinite_integral(function, x)

Тепер запускаємо код і бачимо настпуний результат:

Result: 4*x**3/3

Визначені інтеграли

Визначені інтеграли на відміну від невизначеих мають межі інтегрування. У рамках цього розділу запишемо цей інтеграл:

Визначений інтеграл

Для запису цього інтеграла створюємо функцію для обчислення саме визначених інтегралів. Ось який вона буде мати вигляд:

def definite_integral(function, x, lower_limit, upper_limit):
    integration = sp.integrate(function, (x, lower_limit, upper_limit))
    print(f"Result: {integration}")

Тут після змінної інтегрування ми ще додали lower_limit та upper_limit — нижня та верхя межа нашого інтеграла.

Визначаємо наші межі у відповідних змінних:

lower_limit = 3 / sp.pi
upper_limit = 6 / sp.pi

Змінюємо підінтегральну функцію:

function = sp.tan(x) * sp.cos(x)

Все інше залишаємо як і було. Повний код для обчислення визначеного інтеграла виходить таким:

def definite_integral(function, x, lower_limit, upper_limit):
    integration = sp.integrate(function, (x, lower_limit, upper_limit))
    print(f"Result: {integration}")


x = sp.Symbol("x")
function = sp.tan(x) * sp.cos(x)

lower_limit = 3 / sp.pi
upper_limit = 6 / sp.pi

definite_integral(function, x, lower_limit, upper_limit)

Отримуємо такий результат обчислення:

Result: -cos(6/pi) + cos(3/pi)

Невласні інтеграли

Невласні інтеграли — це такий вид інтегралів, у яких одна або усі межі є нескінченність. Вони поділяються на два невласні інтеграли 1-го роду та невласні інтеграли 2-го роду.

Невласні інтеграли 1-го роду

Невласні інтеграли 1-роду вирізняються тим, що вони мають в одній або усіх своїм межах саме знак нескінченності.

За приклад візьмемо отакий інтеграл:

Невласний інтеграл 1-роду

По суті єдине, що ми змінюємо з поперднього коду це підінтегральну функцію та межі. Робимо зміни:

function = 2 / x

lower_limit = 4
upper_limit = sp.oo

Примітка. У sympy нескінченність позначається як оо. Тому sp.oo — це позначення нескінченності.

Повний код виходить таким:

def improper_integral_first_kind(function, x, lower_limit, upper_limit):
    integration = sp.integrate(function, (x, lower_limit, upper_limit))
    print(f"Result: {integration}")


x = sp.Symbol("x")
function = 2 / x

lower_limit = 4
upper_limit = sp.oo

improper_integral_first_kind(function, x, lower_limit, upper_limit)

Отримуємо результат:

Result: oo

Невласні інтеграли 2-го роду

Невласні інтеграли 2-роду — це такі такий тип інтегралів, у яких немає нескінченностей у межах, але нескінченність утворюється у підінтегральному виразі.

Спробуємо обчислити такий інтеграл:

Невласний інтеграл 2-го роду

Тут ми бачимо вираз 1 — x у знаменнику — це якраз і є той момент, коли ми отримуємо нескінченність у підінтегральній функції. Так як коли змінна x = 1, то вираз 1 — 1 = 0. Виходить, що ми ділимо на нуль, а при діленні на нуль ми отримуємо нескінченність.

Знову змінюємо межі та підінтегральну функцію. Одразу можна показати повний код:

def improper_integral_second_kind(function, x, lower_limit, upper_limit):
    integration = sp.integrate(function, (x, lower_limit, upper_limit))
    print(f"Result: {integration}")


x = sp.Symbol("x")
function = 4 / (1 - x)

lower_limit = 1
upper_limit = 2

improper_integral_second_kind(function, x, lower_limit, upper_limit)

Результат:

Result: -oo

Кратні інтеграли

Кратними називаються подвійні та потрійні інтеграли. У цих видах інтегралах ми інтегруємо одразу по двом чи трьом змінним. Відповідно знаків інтеграла буде два або три.

Подвійні інтеграли

Подвійні інтеграли дозволяють інтегрувати одразу по двома змінним. Це ми можемо побачити у цьому прикладі:

Подвійний інтеграл

Отже, додаємо нову символьну змінну — y:

y = sp.Symbol("x")

Записуємо нову підінтегральну функцію:

function = (sp.sqrt(x) - sp.sqrt(y)) * 2

Визначаємо межі для x та y:

lower_limit_x = 5
upper_limit_x = 4
lower_limit_y = -2
upper_limit_y = -3

Тепер наша функція буде приймати більше параметрів, ось повний код програми:

def double_integral(function, x, lower_limit_x, upper_limit_x, y, lower_limit_y, upper_limit_y):
    integration = sp.integrate(function, (x, lower_limit_x, upper_limit_x), (y, lower_limit_y, upper_limit_y))
    print(f"Result: {integration}")


x = sp.Symbol("x")
y = sp.Symbol("y")

function = (sp.sqrt(x) - sp.sqrt(y)) * 2

lower_limit_x = 5
upper_limit_x = 4
lower_limit_y = -2
upper_limit_y = -3

double_integral(function, x, lower_limit_x, upper_limit_x, y, lower_limit_y, upper_limit_y)

Результат:

Result: -32/3 + 20*sqrt(5)/3 - 4*sqrt(3)*I + 8*sqrt(2)*I/3

Потрійні інтеграли

Останніми у статті будуть потрійні інтеграли. Сенс в принципі той самий, що й з подвійними, тільки у потрійних ми маємо справу з трьома змінними та трьома занаками інтеграла. Тобто ми інтегруємо по трьом змінним.

Пропоную обчислити такий потрійний інтеграл:

Потрійний інтеграл

Знову-таки змінюємо межі, підінтегральну функцію і додаємо нову символьну змінну z:

def triple_integral(function, x, lower_limit_x, upper_limit_x, y, lower_limit_y, upper_limit_y, z,
                    lower_limit_z, upper_limit_z):
    integration = sp.integrate(function, (x, lower_limit_x, upper_limit_x), (y, lower_limit_y, upper_limit_y),
                               (z, lower_limit_z, upper_limit_z))
    print(f"Result: {integration}")


x = sp.Symbol("x")
y = sp.Symbol("y")
z = sp.Symbol("z")

function = sp.exp(x - y - z) * sp.cos(z)

lower_limit_x = -1
upper_limit_x = 2
lower_limit_y = -7
upper_limit_y = -7
lower_limit_z = 4 / sp.pi
upper_limit_z = 2 / sp.pi

triple_integral(function, x, lower_limit_x, upper_limit_x, y, lower_limit_y, upper_limit_y, z,
                lower_limit_z, upper_limit_z)

Результат:

Result: 0

Висновок

У даній статті ми навчиися інтегрувати інтеграли різних видів за допомогою бібіліотеки для символьних розрахунків sympy. Також дещо розібрали особливість кожного інтеграла і навчилися реалізовувати їх у коді. Всім дякую за увагу!

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader we.ua/nocturnal_reader

Нічний читач

39Довгочити
461Прочитання
13Підписники
Підтримати
На Друкарні з 14 липня

Більше від автора

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: