sytibm 发表于 2012-3-5 11:16

ode45时间步长为什么太小

请问,我在ode45中,tspan为,为什么它还是10的-13次方计算一步?谢谢

WF1987 发表于 2012-3-6 21:38

还是贴程序吧

sososwim 发表于 2012-6-14 17:20

请问你是如何知道他是10-13次方计算一次的,你调试ode45程序中的步长h了?ode45是自适应的变步长算法,根据你对相对误差,绝对误差的设置,自动调整下一步的步长和上一步步长的关系
ode45通过对y值的无穷范数的控制计算误差,主要程序如下:
if normcontrol
    rh = (norm(f0) / max(normy,threshold)) / (0.8 * rtol^pow);
else
    rh = norm(f0 ./ max(abs(y),threshold),inf) / (0.8 * rtol^pow);
end
if absh * rh > 1
    absh = 1 / rh;
end
下面的程序根据误差的结果控制下一步的步长增加还是减小的倍数,最大增加步长不超过上一次的5倍。
absh = max(absh, hmin);
if nofailed
    % Note that absh may shrink by 0.8, and that err may be 0.
    temp = 1.25*(err/rtol)^pow;
    if temp > 0.2
      absh = absh / temp;
    else
      absh = 5.0*absh;
    end
end
一般来说如果是连续的系统temp的数值不会太大,所以10-13次的步长基本不会出现,有一种可能就是你运行的系统是不连续的方程,所以ode45计算到不连续的点时不停的循环调整步长,有可能达到10-13
页: [1]
查看完整版本: ode45时间步长为什么太小