若解函數并不是平滑的,則在求解的時候漸變處會有很多數值求解點,這會導緻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,隐式解析解
%若隐式求解仍不能,則使用數值解法
求解時間輸出結果
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!