SciPy кітапханасын пайдаланып Python тілінде дифференциалдық теңдеулерді шешу
Автор: talgatovaaikerim • Январь 11, 2026 • Лабораторная работа • 468 Слов (2 Страниц) • 7 Просмотры
Зертханалық жұмыс №14
SciPy кітапханасын пайдаланып Python тілінде дифференциалдық теңдеулерді шешу
Дифференциалдық теңдеулер — туынды арқылы өрнектелетін функциялар арасындағы байланыстарды сипаттайтын теңдеулер. Python тілінде дифференциалдық теңдеулерді шешудің ең ыңғайлы жолдарының бірі — SciPy кітапханасының integrate модулі.
1.1. Қарапайым дифференциалдық теңдеу
Қарапайым дифференциалдық теңдеу бір айнымалыға тәуелді функцияның туындылары арқылы беріледі:
[pic 1]
Мұнда:
- y— ізделетін функция,
- x — тәуелсіз айнымалы,
- f(x, y) — берілген функция.
1.2. Жоғары ретті дифференциалдық теңдеулер
Мысалы, 2-тәртіпті теңдеу:
[pic 2]
SciPy жоғары ретті теңдеулерді жүйе түріне келтіру арқылы шешеді:
[pic 3]
1.3. SciPy-де ҚДТ шешу әдістері
SciPy-де келесі негізгі әдістер бар:
- RK45 — ең кең қолданылатын Рунге–Кутта әдісі (автоматты қадам таңдауы).
- RK23 — қысқа интервал үшін жылдам.
- Radau, BDF — қатаң (stiff) теңдеулерге.
- LSODA — автоматты stiff/non-stiff анықтайды.
- odeint — ескі, бірақ әлі де кең қолданылатын әдіс.
Біз ең заманауи әдіс — solve_ivp функциясын қолданамыз.
2.1. Бірінші ретті ҚДТ шешу
Мысал:
[pic 4]
Шешу:
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
def f(x, y):
return -2*y
x_span = (0, 5)
y0 = [5]
sol = solve_ivp(f, x_span, y0, t_eval=np.linspace(0, 5, 100))
plt.plot(sol.t, sol.y[0])
plt.xlabel("x")
plt.ylabel("y")
plt.title("dy/dx = -2y шешімі")
plt.grid()
plt.show()
[pic 5]
Есептің аналитикалық шешімі:
[pic 6]
Мұнда:
f → дифференциалдық теңдеу
x_span → х аймағы: бастапқы шарт сол интервалдың басына сәйкес болуы керек, теңдеу сол интервалда анық болуы тиіс.
y0 → бастапқы шарт
t_eval → шешім қай нүктелерде есептелуі керек
np.linspace(0, 5, 100) → 0-ден 5-ке дейін 100 нүкте жасайды
2.2. Бірінші ретті — жүйе түріндегі ҚДТ
Жүйе:
[pic 7]
[pic 8]
def system(t, y):
y1, y2 = y
dy1 = 3*y1 - 4*y2
dy2 = y1 + y2
...