solver为求常微分方程数值解 的函数(即下面表格中的函数)。filename是定义f(t,y)的函数名,该函数必须返回一个列向量。tspan形式为[t0,tf],表示求解区间。y0是初始状态向量。Option是可选参数, 用于设置求解属性,常用的属性包括相对误差值RelTol(默认值是10-3)和绝对误 差值AbsTol(默认值是10-6)。常微分方程数值求解函数的统一命名格式:
odennxxode是Ordinary Differential Equation的缩写,是常微分方程的意思。nn是数字,代表所用方法的阶数。
例如,ode23采用2阶龙格-库塔(Runge-Kutta)算法,用3阶公式做误差估计来调节步长,具有低等精度。
ode45采用4阶龙格-库塔算法,用5阶公式做误差估计来调节步长,具有中
等精度。xx是字母,用于标注方法的专门特征。例如,ode15s、ode23s中的“s”
代表(Stiff),表示函数适用于刚性方程。
求常微分方程数值解的函数
举几个个栗子
例一
f=@(t,y)(y^2-t-2)/4/(t+1);[t,y]=ode23(f,[0,10],2); y1=sqrt(t+1)+1;%精确计算 plot(t,y,'b:',t,y1,'r');%绘图比较一下精确计算与数值求解的结果,从图形可以看出拟合较好
例二
f=@(t,x)[-2,0;0,1]*[x(2);x(1)];[t,x]=ode45(f,[0,20],[1,0]);%四个未知数 subplot(2,2,1);plot(t,x(:,2));subplot(2,2,2);plot(x(:,2),x(:,1));
刚性问题
有一类常微分方程,其解的分量有的变化很快,有的变化很慢,且相差悬殊,这就是所谓的刚性问题(Stiff)。
对于刚性问题,数值解算法必须取很小步长才能获得满意的结果,导致计算
量会大大增加。