Drukarnia.BLOG

Символьне обчислення інтегралів у 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. Також дещо розібрали особливість кожного інтеграла і навчилися реалізовувати їх у коді. Всім дякую за увагу!

Articles about local business and interesting people:

Share your ideas in a new publication.
We are waiting for your longread!
Magnifique numérique

Magnifique numérique

@magnifiquedigitalworld

Прекрасний цифровий світ

95Longreads
2KViews
28Followers
Support
On Drukarnia since July 14 2025

More from the author

  • Відтепер для застосунків на Base44 можна додавати push-повідомлення

    Нещодавно компанія-розробник платформи Base44, яка дозволяє створювати застосунки за допомогою ШІ, заявила, що відтепер до своїх застосунків можна підключати push-повідомлення.

    Topics of this longread:

    It Новини
  • Оновлення проєкту Magnifique numérique

    Відтепер Magnifique numérique — це не лише про статті з програмування, а й новини про IT та технології. Це означає, що відтепер контент стане різноманітнішим.

    Topics of this longread:

    Оновлення
  • Метод zfill() у Python

    У цій статті ми розберемо метод zfill() у Python на основі практичних прикладів його використання.

    Topics of this longread:

    It

You may also be interested in:

Comments (0)

Support the author first.
Write a comment!

You may also be interested in: