我是靠谱客的博主 哭泣金鱼,最近开发中收集的这篇文章主要介绍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开始,这样就消除了错误。

 

最后

以上就是哭泣金鱼为你收集整理的Simulink杂谈之一的全部内容,希望文章能够帮你解决Simulink杂谈之一所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部