248.48K

спец1

1.

Пакет SymPy для решения
дифференциальных уравнений

2.

3.

4.

• from sympy import symbols, Function
• # Определяем независимую переменную
• x = symbols('x')
• # Определяем функцию
• y = Function('y')

5.


from sympy import Eq, dsolve, Derivative
# Уравнение
eq = Eq(Derivative(y(x), x), x**2)
# Решение
sol = dsolve(eq, y(x))
print(sol)

6.

• eq = Eq(Derivative(y(x), x) + y(x)**2, 0)
• sol = dsolve(eq, y(x))
• print(sol)

7.

from sympy import dsolve
x, y = symbols('x y', cls=Function)
t = symbols('t')
eq1 = Eq(x(t).diff(t), 3*x(t))
eq2 = Eq(y(t).diff(t), -2*y(t))
sol = dsolve([eq1, eq2])
print(sol)

8.

eq = Eq(Derivative(y(x), x), x)
sol = dsolve(eq, y(x), ics={y(0): 1})
print(sol)

9.

Использование classify_ode(eq)
• from sympy import symbols, Function, Eq, Derivative, classify_ode
• # Определяем переменные и функцию
• x = symbols('x')
• y = Function('y')
• # Уравнение
• eq = Eq(Derivative(y(x), x) + y(x), x**2)
# Определение доступных методов
methods = classify_ode(eq)
print("Доступные методы решения:")
print(methods)

10.

• Доступные методы решения:
• ['1st_linear', 'Bernoulli', 'lie_group']
• 1st_linear: Метод решения линейных уравнений
первого порядка.
• Bernoulli: Метод Бернулли (для более сложных
нелинейных уравнений, сюда попадает как частный
случай).
• lie_group: Метод на основе групп Ли.
• После этого можно выбрать подходящий метод для
дальнейшего анализа.

11.


from sympy import symbols, Function, Eq, Derivative, checkodesol
# Определяем переменные и функцию
x = symbols('x')
y = Function('y')
# Уравнение
eq = Eq(Derivative(y(x), x) + 2*y(x), e**x)
# Решение
solution = Eq(y(x), (e**x)/2 + symbols('C1')*e**(-2*x))
# Проверка решения
is_correct = checkodesol(eq, solution)
print("Проверка решения:", is_correct)

12.

• Проверка решения: (True, 0)

13.

• from sympy import symbols, Function, Eq, dsolve, sin
• # Определяем переменные и функцию
• x = symbols('x')
• y = Function('y')
• # Уравнение
• eq = Eq(y(x).diff(x), y(x)**2 * sin(x) + x**2)
• # Попытка решить
• solution = dsolve(eq)
• print("Решение:", solution)

14.

вывод
NotImplementedError: No algorithms are
implemented to solve this equation;
consider solving it numerically.

15.

Разбор:SymPy не смог найти аналитическое
решение, так как уравнение не поддается
известным методам решения. В таких
случаях: Можно попробовать использовать
численные методы, например, с помощью
scipy.integrate.solve_ivp. Попробовать
упростить уравнение или рассмотреть
частные случаи, например, задать начальные
условия или ограничить диапазон функций.

16.

• Преимущества и ограничения SymPy
• Преимущества:
• Аналитические решения.
• Простота использования.
• Гибкость (работа с системами и условиями).
• Ограничения:
• Не все сложные ДУ решаются аналитически.
• Для численных методов предпочтительнее
использовать SciPy.
English     Русский Правила