Simulink杂谈之一

仿真时间太长

使用Sumulink进行仿真时,有时会发现仿真时间“走的太慢”,甚至有时候程序跑几个小时还没有结束,原因是在Simulink中默认使用了“变步长”的设置(图1),

                                                                                                              图1

这样,有些程序在运行时Simulink采样的数据会非常之多,导致程序要运行很长时间。如果我们需要快速地知道仿真的结果,我么可以使用“固定步长“,如在上图中将Slover Options选项的Type改为Fixed-step并更改采样时间(Fixed-step size),如果我们将起始时间设定为0,终止时间设定为30s,采样时间设定为0.01s,我们一共可以得到3001(30/0.01+1)个点(图2)。

                                                                                                            图2

当然最后仿真的实际效果也是和设定的采样时间有关的,不能将采样时间设定的过大,这样虽然仿真速度很快但是这是以牺牲采样点数据为代价的,所以在仿真时,在能够接受的仿真耗时之内应该尽量缩短采样时间,这样得到的仿真效果也会更好。

仿真过程中的问题

    1、关于代数环(algebraic loop),在数字计算中,输入信号决定输出信号,同时输出信号也决定输入信号,由于数字计算的时序性,导致没有输出信号无法计算输入信号,没有输入信号又反过来无法计算输出信号,形成死循环,这就是代数环。简单地说,代数环其实就是一个输入信号包含输出信号,同时输出信号也包含输入信号的特殊反馈回路。在simulink中,这是由于直通模块(无延时的模块)的原因造成的,simulink中大部分的模块都是直通模块,因此很容易形成代数环。在整个回路中,只包含直通模块就会形成代数环,反馈回路有延时模块就会消除代数环。解决方案:我们可以通过在反馈回路中加入“延时”环节(在“Continuous”模块中),让输出信号做出一定时间的延迟,这样就可以达到消除代数环的问题。

    2、关于"实向量"问题,可能在仿真的过程中出现如下问题,during flag=3 call must be a real vector of length “xxx”,这一问题的出现是由于控制器的设计或者某些参数的设置有错误,相应地,在matlab窗口中可能出现了类似Nan,或者Inf等提示信息,遇到这种情况我们需要检查控制器的设计或者更改某些参数,举个栗子,有一次我遇到了这样的情况,经过排查我发现在S函数中有类似这样的矩阵,C2 = [6/t,0,0;0,10/(3*t-10),0;0,0,1]; 而我设置的仿真时间t是从0开始的,这样导致在仿真一开始的时候C2中就有元素出现“0作除数”的错误。于是处理办法如下:将仿真时间 t 设置从0.01开始,这样就消除了错误。

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值