之前零零散散写了一些matlab中微分方程求解方法,本文做个汇总和一些补充。
方法1:方向场
假定方程表达式为如下
代码语言:javascript复制[x,y]=meshgrid(0:.1:2,0:.1:1.5);
dy=1-y;
dx=ones(size(dy));
quiver(x,y,dx,dy)
axis([0,2,0,1.5])
xlabel('x')
ylabel('y')
mesh命令设置xy网格。在这种情况下,x在[0,2]和y在[0,1.5]。在这种情况下,网格间距是0.1。让dy =1 -y, dx =1。
quiver命令在(x,y)处产生一个向量(dx,dy)。每个向量的斜率是dy/dx。
axis标记了坐标轴,并提供了一个窗口,其中xmin=0, xmax=2, ymin=0, ymax=1.5。
quiver函数说明:quiver(X,Y,U,V) 在由 X 和 Y 指定的笛卡尔坐标上绘制具有定向分量 U 和 V 的箭头。例如,第一个箭头源于点 X(1) 和 Y(1),按 U(1) 水平延伸,按 V(1) 垂直延伸。默认情况下,quiver 函数缩放箭头长度,使其不重叠。
这种方法可以看到x和y的相对变化关系
方法2:dsolve方法
代码语言:javascript复制sol = dsolve('Dx=2*sin(t)-4*x','x(0)=0','t');
ezplot(sol,[0 10])
xlabel('t'),ylabel('x'), grid
方法3:ode45和其他的ode相关solver
参考:
Matlab通过ode系列函数求解微分方程
matlab微分方程ODE求解器的事件(Event)属性
Matlab求解微分代数方程 (DAE)
方法4:simulink求解
参考:
Matlab/Simulink求解微分方程样例分享
几个微分方程求解框图样例
微分方程表达式