是否可以在simulink中显示可变时间步长求解器的积分器步的局部误差。我想找出为什么simulink采取小积分器步骤。由于步长大小取决于集成的本地错误,因此记录本地错误会很有帮助。这可能吗?
答案 0 :(得分:1)
您是否尝试过使用Simulink Debugger?如果您在感兴趣的块的输入和输出上设置断点,并将模拟运行到步骤开始变小的时间,那么您可以确定发生了什么。
你也可以玩过零检测。可以找到关于其基础知识的相当好的讨论here。
答案 1 :(得分:1)
这可以从调试器中获得(正如Phil Goddard暗示的那样)。使用调试器启动模型(来自matlab控制台):
>> sldebug mdl
启用"解算器跟踪级别1"
>> strace 1
启用"中断失败的集成步骤"
>> xbreak
开始模拟:
>> continue
当局部误差太大时,模拟将中断。例如:
[TM = 0.035250948751817182 ] Start of Major Time Step
[Tm = 0.035250948751817182 ] [Hm = 0.0009443691112440444 ] Start of Solver Phase
[Tm = 0.03525094875181718 ] [Hm = 0.0009443691112440444 ] Begin Integration Step
[Tn = 0.03525094875181718 ] [Hn = 0.0009443691112440444 ] Begin Newton Iteration
[Tf = 0.03619531786306122 ] [Hf = 0.0009443691112440444 ] Fail [Er = 6.8210e+00 ] [Ix = 1]
Detected integation step failure. Interrupting model execution
Er 值是本地错误, Ix 是状态索引。要查找相应的块类型:
>> states
带输出
Continuous States:
Idx Value (system:block:element Name 'BlockName')
0 -7.96155746500428e-06 (0:0:0 CSTATE 'mdl/x')
1 1.630758262432841e-12 (0:1:0 CSTATE 'mdl/y')