声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1830|回复: 2

[编程技巧] ode45时间步长为什么太小

[复制链接]
发表于 2012-3-5 11:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请问,我在ode45中,tspan为[0:0.01:2],为什么它还是10的-13次方计算一步?谢谢
回复
分享到:

使用道具 举报

发表于 2012-3-6 21:38 | 显示全部楼层
还是贴程序吧  
发表于 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

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-18 04:59 , Processed in 0.065558 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表