请教matlab里用ode函数的积分步长选取问题
使用ode函数求解微分方程组
怎么自由选择积分步长阿
=ode45('rigid',,x0,options)
rigid是一个微分方程组
现在我可以运行,但是无法自由选择积分步长
options.AbsTol
options.RelTol
options.InitialStep
options.MaxStep
这四个可以吗?
找了好多材料也没弄出来
谁帮帮我把
可以bg
5555 ode45是变步长rk法,它的步长是根据容许误差自动确定的,不需要设定,只要在options中设置求解精度就可以了。
变步长的runge-kutta法,先从节点xn出发,以h为步长求得近似值,记做y_n+1_(h),由于公式局部阶段误差为o(h^5)则有:y(x_n+1)-y_n+1_(h)≈ch^5
再将步长折半,跨两步到x_n+1求得近似值y_n+1_(h/2),每跨一步截断误差为o((h/2)^5),所以有y(x_n+1)-y_n+1_(h)≈2c(h/2)^5
这样步长折半误差可以减少到1/16,对于最后我们所设定的精度ε,如果折半两次计算结果的偏差Δ>ε,则再折半,直到Δ<ε为止
反之,如果如果折半两次计算结果的偏差Δ<ε,则加倍步长,直到Δ>ε为止,这时再将步长折半一次,得到所要的结果.
这样做的目的无非是得到合理的步长值使得计算速度在给定精度下最为合理,因此我们在ode45中事前并不能知道步长确切等于多少。
举个例子,如果定步长只能够使精度达到1e-12的量级,而同样的问题,用ode45变步长方法则能够得到1e-18的精度量级,所以总体上讲虽然计算量增加,但是是合算的. MATLAB配备的常规微分方程求解器函数采用了各种方法。ODE23是基于龙格-库塔(Runge-Kutta)(2,3)积分方法,ODE45是基于龙格-库塔(4,5)积分方法。ODE113是变阶Adams-Bashforth-Mouulton PESE求解器。各种求解器和他们采用的方法详细列表请参阅MATLAB在线文档。
MATLAB通过采取迈一步,估计在这步的误差,检查其值是大于还是小于容差,然后相应地调整步长。这些积分方法是不利于采用定步长的。采用定步长算法,在当你的信号频率大于求解器的频率的时候,你就可能丢失掉一些点,因而是危险的。采用变步长算法可以确保在低频的时候采用大的步长,而在高频的时候采用小的步长。MATLAB中的ODE求解器优化了变步长算法,采用变步长的时候能够运行更快,而且显而易见的是得到的结果是更加精确的。现在在MATLAB Central站点,一些定时步长的函数可以直接利用。这些求解器有:
ODE1 一阶Euler 方法
ODE2 二阶Euler方法
ODE3 三阶龙格-库塔法
ODE4 四阶龙格-库塔法
ODE5 五阶龙格-库塔法
这些求解器可以采用如下的与否使用:
y = ODE4( odefun,tspan,y0 );
积分在tspan所规定是时间间隔值到的时候一步一步进行处理。时间值必须是按升序或者降序的方式排列。注意步长(tspan的连续元素间的距离)并不要求必须是均匀的。如果步长是均匀的,你或许可以采用 LINSPACE创建。例如:
tspan = linspace(t0, tf, nsteps); %t0 = 0; tf = 10, nsteps=100; matlab里的ode45若是explicit rk法,就很难解刚性方程
好像有个叫gear的求解程序,主要用来求解刚性方程的。
可以找找,以前俺也找过一次没找到。
所以得确认matlab里的ode45用的是否为implicit 算法。 ode45是变步长rk法,它的步长是根据容许误差自动确定的,但也可以自己设定的。 原帖由 siyanger 于 2006-3-30 08:09 发表
ode45是变步长rk法,它的步长是根据容许误差自动确定的,但也可以自己设定的。
能告知如何设定吗?
回复
可以参考ode45源程序:edit ode45.也可以找一本“Matlab数值计算”的书看看,一般都会有关于自定义步长的RK45程序.
页:
[1]