|
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的精度量级,所以总体上讲虽然计算量增加,但是是合算的. |
|