matlab ode45 与ode15s 有什么区别 应该怎么选择?
2个回答
展开全部
以下是我个人的一些理解,供参考:
1.
MATLAB提供了7个常微分方程求解器(solver),分别是ode45,
ode23,
ode113,
ode15s,
ode23s,
ode23t,
ode23tb,其中前3个适用于求解非刚性(Nonstiff)问题,后4个适用于刚性问题。所谓刚性问题,简单点说,就是系统包含多个相互作用但变化速度相差十分悬殊的子过程。
2.
ode45基于显式4-5阶龙格库塔公式,其算法属于单步法;ode15s是一个变阶求解器,用的是多步法。
3.
对于很多问题,这些求解器都是可以使用的,尽管可能存在一些效率和精度方面的差异。
4.
但是,这些求解器并不是可以互相取代的,它们分别适用于不同的精度要求和问题的类型。也就是说,没有任何一个求解器在任何情况下都优于或劣于其它求解器。否则,MATLAB也没必要提供这么多求解器。
5.
要彻底搞清楚这些求解器的差别和适用范围是有一定难度的,需要对其背后的算法有一定了解才行。MATLAB在函数参考里对算法做了简要的说明,并给出了多个参考文献,如果有兴趣,可以进一步查阅。
6.
如果对于问题的性质比较清楚,也知道什么算法可能比较有效,可以直接选择适当的求解器。在没有对于问题是否刚性的先验知识的条件下,根据MATLAB的建议,ode45是大多数情况下应该尝试的首选,如果ode45求解失败或效率很低,次选就是ode15s。
1.
MATLAB提供了7个常微分方程求解器(solver),分别是ode45,
ode23,
ode113,
ode15s,
ode23s,
ode23t,
ode23tb,其中前3个适用于求解非刚性(Nonstiff)问题,后4个适用于刚性问题。所谓刚性问题,简单点说,就是系统包含多个相互作用但变化速度相差十分悬殊的子过程。
2.
ode45基于显式4-5阶龙格库塔公式,其算法属于单步法;ode15s是一个变阶求解器,用的是多步法。
3.
对于很多问题,这些求解器都是可以使用的,尽管可能存在一些效率和精度方面的差异。
4.
但是,这些求解器并不是可以互相取代的,它们分别适用于不同的精度要求和问题的类型。也就是说,没有任何一个求解器在任何情况下都优于或劣于其它求解器。否则,MATLAB也没必要提供这么多求解器。
5.
要彻底搞清楚这些求解器的差别和适用范围是有一定难度的,需要对其背后的算法有一定了解才行。MATLAB在函数参考里对算法做了简要的说明,并给出了多个参考文献,如果有兴趣,可以进一步查阅。
6.
如果对于问题的性质比较清楚,也知道什么算法可能比较有效,可以直接选择适当的求解器。在没有对于问题是否刚性的先验知识的条件下,根据MATLAB的建议,ode45是大多数情况下应该尝试的首选,如果ode45求解失败或效率很低,次选就是ode15s。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
dx=myfun(t,x)
dx(1)=20/7*x(1)-x(2)*x(3);
dx(2)=-10*x(2)+x(1)*x(3);
dx(3)=-4*x(3)+x(1)*x(2);
dx=dx(:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在matlab下面输入:
x0=[3,-4,2];
t0=0.001:0.001:20;
[t,x]=ode45('myfun',[0.001,20],x0);
%ode45会自动调整步长
plot(t,x)
legend('x','y','z')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
dx=myfun(t,x)
dx(1)=20/7*x(1)-x(2)*x(3);
dx(2)=-10*x(2)+x(1)*x(3);
dx(3)=-4*x(3)+x(1)*x(2);
dx=dx(:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在matlab下面输入:
x0=[3,-4,2];
t0=0.001:0.001:20;
[t,x]=ode45('myfun',[0.001,20],x0);
%ode45会自动调整步长
plot(t,x)
legend('x','y','z')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询