|
请问你是如何知道他是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
查看全部评分
-
|