Друкарня від 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

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

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

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

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

    Теми цього довгочиту:

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

    Теми цього довгочиту:

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

    Теми цього довгочиту:

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

    Теми цього довгочиту:

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

    Теми цього довгочиту:

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

Нічний читач

322Прочитань
17Автори
9Читачі
На Друкарні з 14 липня

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

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

  • Чому людям без технічної освіти/технічних ставати проджект менеджерами - дуже погана ідея

    Я бачу за останні роки дуже велика кількість знайомих намагається потрапити в АйТі через позицію проджект менеджера. Тут є проблема, я навіть не буду тут торкатись теми кризи, що склалась на ринку кандидатів в зимку 2022 року в Україні і триває досі і буде тривати ще довго.

    Теми цього довгочиту:

    Програмування
  • 5 уроків, які я виніс з 2 півотів на Scrimmage

    Коли ви робите інвестиції, кожен ваш грошовий рух вимірюється і перевіряється, але коли ви робите ставки на спорт, ви покладаєтеся тільки на своє внутрішнє чуття, чому так? Чому б нам не змінити це і не дати кожному гравцю на спортивних ставках силу інвестора?

    Теми цього довгочиту:

    Стартап
  • Нова спільнота web розробників

    У сучасному цифровому світі важливо мати майданчики, де фахівці можуть обмінюватися досвідом, отримувати підтримку та навчатися. Для українських веб-розробників з’явився новий ресурс — WOX (https://wox.in.ua).

    Теми цього довгочиту:

    Websites

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

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

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

  • Чому людям без технічної освіти/технічних ставати проджект менеджерами - дуже погана ідея

    Я бачу за останні роки дуже велика кількість знайомих намагається потрапити в АйТі через позицію проджект менеджера. Тут є проблема, я навіть не буду тут торкатись теми кризи, що склалась на ринку кандидатів в зимку 2022 року в Україні і триває досі і буде тривати ще довго.

    Теми цього довгочиту:

    Програмування
  • 5 уроків, які я виніс з 2 півотів на Scrimmage

    Коли ви робите інвестиції, кожен ваш грошовий рух вимірюється і перевіряється, але коли ви робите ставки на спорт, ви покладаєтеся тільки на своє внутрішнє чуття, чому так? Чому б нам не змінити це і не дати кожному гравцю на спортивних ставках силу інвестора?

    Теми цього довгочиту:

    Стартап
  • Нова спільнота web розробників

    У сучасному цифровому світі важливо мати майданчики, де фахівці можуть обмінюватися досвідом, отримувати підтримку та навчатися. Для українських веб-розробників з’явився новий ресурс — WOX (https://wox.in.ua).

    Теми цього довгочиту:

    Websites