【Python】求解常微分方程的符号解+数值解例题
import numpy as np
import sympy as sp
from sympy.abc import x
# 定义微分方程
def dy_dx(y, x):
return x * sp.diff(y, x) + 2*y
# 初始条件和边界条件
y0 = sp.Symbol('y0')
x0 = sp.Symbol('x0')
# 数值解的范围
x_range = np.linspace(-5, 5, 1000)
# 解微分方程
sol = sp.dsolve(dy_dx(y, x) - x*sp.diff(y, x) - 2*y, y(x0) == y0)
print("符号解:", sol)
# 数值解
y_num = sp.lambdify(x, sol.subs({sp.diff(y, x): sp.Derivative('y', x), y0: 1, x0: 0}), 'numpy')
y_num_vals = y_num(x_range)
# 绘图
import matplotlib.pyplot as plt
plt.plot(x_range, y_num_vals, label='数值解')
plt.xlabel('x')
plt.ylabel('y')
plt.title('常微分方程的数值解')
plt.legend()
plt.show()
这段代码首先定义了微分方程dy_dx
,然后设置了初始条件和边界条件。接着使用sympy的dsolve
函数解微分方程得到符号解。最后,使用lambdify
将符号解转换为可以处理数值的函数,并计算在指定的数值区间内的数值解,最后通过matplotlib绘图展示结果。
评论已关闭