以数值方式求解二阶微分方程
此示例说明如何将二阶微分方程转换为可以使用 MATLAB® 的数值求解器 ode45 求解的微分方程组。
求解高阶常微分方程的典型方法是将其转化为一阶微分方程组,然后求解这些方程组。此示例使用 Symbolic Math Toolbox™ 将二阶 ODE 转换为一阶 ODE 方程组。然后使用 MATLAB 求解器 ode45 来求解方程组。
将二阶 ODE 重写为一阶 ODE 方程组
使用 odeToVectorField 重写下面的二阶微分方程
(通过变量替换实现)。令 ,,对这两个方程进行微分,得到一个一阶微分方程组。
syms y(t)
[V] = odeToVectorField(diff(y, 2) == (1 - y^2)*diff(y) - y)V =
生成 MATLAB 函数
MATLAB ODE 求解器不接受符号表达式作为输入。因此,在使用 MATLAB ODE 求解器求解方程组之前,必须将该方程组转换为 MATLAB 函数。使用 matlabFunction,并以 V 作为输入,从这个一阶微分方程组生成 MATLAB 函数。
M = matlabFunction(V,'vars', {'t','Y'})
M = function_handle with value:
@(t,Y)[Y(2);-(Y(1).^2-1.0).*Y(2)-Y(1)]
求解一阶 ODE 方程组
要求解该方程组,请调用 MATLAB ode45 数值求解器,并使用生成的 MATLAB 函数作为输入。
sol = ode45(M,[0 20],[2 0]);
绘制解
使用 linspace 在区间 [0,20] 内生成 100 个点,并使用 deval 对每个点求解,从而绘制解。
fplot(@(x)deval(sol,x,1), [0, 20])
