标签:
matlabsimulink |
分类: Simulink基础 |
几个月前,我介绍了几个我分析变步长求解器性能时最喜欢用的命令my favorite command to analyze the performance of a variable-step solver。
本周,我将介绍如何使用Simulink Debugger 来对变步长求解器进行进一步的分析。所以,我们这次使用 debugger command-line interface。
Launching the debugger
我们使用vdp这个例子。
sldebug vdp,打开vdp模型的调试器
strace 1, 跟踪记录求解器信息。
tbreak 5,因为我只是想仿真一段时间,所以在5秒的时刻设置断点。
http://s7/middle/b2f5027f4cf7457b25b96&690
continue,或者是使用快捷命令c之后,很多信息列了出来。
Solver Information
让我们来看一个成功的迭代步,从0.284s到0.54s。
http://s11/middle/b2f5027f4cf7457c7471a&690
(在上面这个截屏里,你可以看到:
- TM: 我们在0.284s的时候开始一个主迭代步。
- Tm - Hm: 我们在0.284s开始一个副迭代步。求解器评估上一个迭代步状态,设定本次迭代步长为0.256s合适。
- Tm - H: 没有什么意外情况,我们开始从0.284s往前迭代0.256s。
- Ts - Hs: 副迭代步成功,所以我们在保证求解公差的前提下推进0.256s。
-
Err -
Ix: Among all the
states in the modelthe one closest to the maximum tolerance was
state 1 and it's normalized error was 8.2045e-2. The normalization
is made relative to the maximum tolerance. An error above 1 exceeds
the tolerance and below one passes.
在模型的所有状态states,误差最大的那一个也是state 1,它的误差相对于设置的最大误差参数正则化过后是 8.2045e-2。error比1大则表示超出了设置误差,比1小则通过。 (这段话没怎么看懂)。
想要了解更多的关于怎么理解求解器跟踪信息的话,可以查看关于strace的文档。 .
要查看哪一个state的误差最大,可以使用states 命令:
http://s2/middle/b2f5027f4cf7457d03a31&690
在这一步可以看到,模块x2的state很接近最大误差参数(Ix=1)。
Step limited by maximum step size
现在我们来看一下另外一种情况,在时间4.651s的时候,可以看到步长受限 maximum step size:
http://s9/middle/b2f5027f4cf7457dafd18&690
如果你的模型里出现很多次这个信息,这表示你可以考虑增加求解器的最大步长的设置。
Failed step
当然,并不是每一个迭代步都那么一帆风顺。有时候,求解器需要将步长调小来满足设置公差。如果我们继续运行模型,会看到在13.21s的时候,求解器为了保证精度尝试了2次不同步长。
http://s11/middle/b2f5027f4cf7457ce895a&690
如果这种情况发生多次,你可能需要考虑别的求解器了,比如说刚性求解器stiff solvers。如果这依然不奏效,你需要看看你的方程以及产生最大误差的模块。
Conclusion
这个例子说明,通过了解Simulink调试器,我们更容易理解变步长求解器如何确定迭代步长。这个例子可能只关注states,但是你可以用一些函数zcbreak 和 zclist,通过类似的原则来研究zero-crossing。
这篇帖子够长的了,我得结尾了。但是我必须得说明的是,这个例子只是冰山一角。使用Simulink调试器,你还可以看到关于副迭代步的更多细节,可以显示任何模块和任何信号。
Now it's your turn
Take the time to go through the list of Simulink debugger Commands and let us know if you find something you will use by leaving a comment here
http://s5/middle/b2f5027f4cf7457e0b854&690
By Guy Rouleau