本讲主要说一下微分方程的数值解法,在数模中常微分方程是经常会碰到的问题,我们还会附带说一下差分方程和偏微分方程的数值解法。
微分方程的数值解法:
1)显示解:dsolve
example:
1 %farmat:dsolve('diff_equation','condition1,condition2,…','var') 2 %example% 3 y=dsolve('D3y-D2y=x','y(1)=8,Dy(1)=7,D2y(2)=4','x');
介绍数值解前先做两个铺垫
a.高阶微分方程初值问题化为一阶常微分方程组:
通过换元,化成标准形式:
y’=F(t,y),y(0)=y0
b.匿名函数:
%F=@(x,y)[......]
2)Euler法:离散化思想
3)Runge-Kutta法:ode23/ode45
%Farmat:[T,Y]=solver('F',tspan,y0)
若把F写成匿名函数的形式则没有引号!!!
Practice:Verderpol微分方程
Solution:
将二阶问题化成标准的一阶形式:
[y1’;y2’]=F[y2;7(1-y1^2)y2-y1];y1(0)=1,y2(0)=0
1 F=@(t,y)[y(2);7*(1-y(1)^2)*y(2)-y(1)]; 2 [T,Y]=ode45(F,[0 40],[1;0]); 3 plot(T,Y(:,1));