结合Python中Scipy,专注创建可以解决问题的方程
目录
一阶常微分方程
二阶常微分方程
三阶常系数微分方程组
修正贝塞尔微分方程
伯努利方程
一阶常微分方程
加速度、速度、时间
计算物体速度的时候,若加速度不断变化,如何确定速度和时间的关系?假设加速度随速度和时间变化的关系是:
即:
我们利用Scipy求解该方程:
import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint # v是速度,t是时间 def dvdt(v, t): return v + 6*t v0 = 0 t = np.linspace(0, 2, 100) # 结果res是 N行1列的二维数组(因为是一元方程) res = odeint(dvdt, v0, t) # 转置之后第一行就是各个时间点的速度 res_v = res.T[0] # 绘制速度和时间的关系 plt.plot(t, res_v) plt.show()
由下图结果易得加速度随时间逐渐增大。
图1
二阶常微分方程
且
,,
# 二阶ODE的求解 import matplotlib.pyplot as plt import numpy as np from scipy.integrate import odeint def dSdx(x, S): x, v = S return [v, -v ** 2 + np.sin(x)] x_0 = 0 v_0 = 3 S_0 = (x_0, v_0) t = np.linspace(0, 1, 100) sol = odeint(dSdx, y0=S_0, t=t, tfirst=True) x_sol = sol.T[0] v_sol = sol.T[1] l1, = plt.plot(t, x_sol) l2, = plt.plot(t, v_sol) plt.legend((l1, l2), ['x', 'v']) plt.show()
图2
这个二阶ODE描述了速度v相对于位置x的变化率。变量S是一个元组(x, v),它表示系统在给定点(x, v)的状态。通过使用龙格-库塔法或欧拉法等适当的方法对该系统进行数值求解,我们可以确定函数v(x),它表示速度作为位置的函数。</