matlab中微分方程的数值解(MATLAB微分方程数值解法的刚性问题)
若解函数并不是平滑的,则在求解的时候渐变处会有很多数值求解点,这会导致MATLAB中的ode45方法求解时间增长,这就是刚性问题,需在渐变处减少求解点,以加快求解速度。
使用ode45和ode15s计算,对比求解时间即可判断是否为刚性问题,s代表自适应变步长求解。
% syms y(x) %数值解,不用符号变量
y0=[2,0];%y和diff(y)的初始值
tspan=[0,500];%积分区间
opts=odeset('RelTol',1e-2,'AbsTol',1e-4);
tic
[x,y]=ode45(@ode7,tspan,y0,opts)%y为两列,表示位置和速度,计算时间2.72
toc
tic
sol=ode15s(@ode7,tspan,y0,opts)%增加收敛性,计算时间0.0214
toc
tic
sol=ode23s(@ode7,tspan,y0,opts)%增加收敛性,计算时间0.0214
toc
tic
sol=ode23t(@ode7,tspan,y0,opts)%增加收敛性,计算时间0.0214
toc
tic
sol=ode23tb(@ode7,tspan,y0,opts)%增加收敛性,计算时间0.0214
toc
%刚性求解器 ode23s,ode23t,ode23tb
function dy=ode7(x,y)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=1000*(1-y(1)^2)*y(2)-2*y(1);
end
%不能求解符号解,添加属性'implicit',true,隐式解析解
%若隐式求解仍不能,则使用数值解法
求解时间输出结果
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com