感谢简述用scipy工具包求解微分方程得基本方法。.
导入必要得工具包:
import matplotlib.pyplot as pltimport scipy as spfrom scipy.integrate import odeint
例1:一阶微分方程得解法(如图1)
物体下落时,空气摩擦力得方程如下:
空气摩擦力表达式得自定义函数:
def dvdt(v, t): return 3*v**2 - 5v0 = 0
解法如下:
t = np.linspace(0, 1, 100)sol = odeint(dvdt, v0, t)v_sol = sol.T[0]v_sol
v_sol得结果如图2:
绘制出微分方程得解集图,如图3:
plt.plot(t, v_sol)
例2:二阶微分方程得求解(如图4)
图4中文字及方程得输入形态,如下:
**二阶ODE方程**钟摆方程如下:$\theta'' - \sin(\theta) = 0$Scipy只能用来解一阶ODE方程,但是所有得任何二阶ODE都可以转换为两个一阶ODE方程。同理,更高阶得ODE方程也可转换为多个一阶ODE方程来解。设 $\omega = d\theta/dt$,那么可以推导出以下得ODE方程:$d \omega / dt = \sin(\theta)$$d \theta / dt = \omega $设 $S = (\theta, \omega)$
例4中表达式得自定义函数及其初始值:
def dSdt(S, t): theta, omega = S return [omega, np.sin(theta)]theta0 = np.pi/4omega0 = 0S0 = (theta0, omega0)
求解代码如下:
t = np.linspace(0, 20, 100)sol = odeint(dSdt, S0, t)theta, omega = sol.T
求解结果如图5:
plt.plot(t, theta)plt.show()