我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:正版王中王 > 仿真 >

simulink仿真起始终止时间的设定有意义吗?

归档日期:09-04       文本归类:仿真      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部取决于你的模型是否时变。举个最简单的例子来说,下面这个最简单的系统y(t) = t可以用一个clock模块和一个Scope实现,你取不同的起始终止时间得到的结果当然是不一样的。

  更多追问追答追问你看啊:我的模型要运行从0到130秒,到90秒左右的时候工况开始稳态,然后我设定到100秒的时候进行一个参数变化的变工况仿真。由于数据量太大耗时、耗内存所以我想从90秒稳态时候仿线秒时候算的仿线秒时的仿真结果不一样啊?有什么办法可以达到从90秒时候算起就已经是稳态然后继续往下算的结果吗?追答我不知道你模型的具体内容,所以提供个思路供你参考,不一定可行:把模型运行到90秒的状态保存下来,注意把积分器的初值设置为此时的状态。如果模型中用到传递函数,则需要格外慎重,因为传递函数不能设置初始条件,应该把传函改成用积分器实现。如果还用到了一些带有记忆性质的模块,也都要注意设置相应的状态。

  追问我就是因为算到90秒时太占内存,到不了90秒时模型就强制不算停止了。哎。。。所以我才想别的办法的。还有别的办法吗?多谢了,大哥!

  追答你之前并没有说算不到90秒啊,那你就把时间提前,比如算到80秒,把结果存下来,以后从80秒开始算。这种方法理论上肯定是可行的,但具体操作上你可能要花点时间去改模型。我不知道你的模型会复杂到什么程度,但我个人仿真过比较复杂的系统,也不至于发生你的说的问题,建议你检查一下模型,把耗费内存的一些不必要的模块删掉,比如,很典型的,scope模块,To Workspace模块等,如果确实需要用到这些模块,那就把数据间隔改大一些(例如,把模块的Decimation改成10)。如果你的模型不保密的话,也可以发给我帮你查。

  追问示波器模块我都去的不能再去了!To Workspace模块我也没用过。你说的修改数据间隔我还不会,真不好意思哈。多谢了大哥!请留下您的邮箱!马上给你发过去。追答======================10月13日补充:你的模型规模比我想象中大很多。用文本方式打开统计了一下,整个模型总计有超过3.4万个block,2837个子系统(其中包括1021个Embedded MATLAB模块),166个积分器,705个Scope。

  这种规模的模型运行起来,出现内存不足实在算不上什么奇怪的事。仿真耗时也很严重,我对整个模型仿真,仅代码生成就用了至少十几分钟(我的电脑两年多前买的,性能比较一般),然后仿了近半个小时,仿线秒,所以我就没让它继续算下去。

  根据观察,你的模型最顶层由15个子系统组成,按照层次可以划分成3个子系统为一级,共5级,每级有6个信号到下一级,但并无向上一级反馈的信号。根据模型的这种特点,可以考虑把模型分解成5个子模型分别进行仿真,上一级的仿真结果使用To Workspace或To File模块导出,然后下一级的模型使用From Workspace或From File模块导入。这种方法肯定是可行的,我没有进行完整的仿真,只对前两级作了验证。其中仿真第一级的时候没留意计算时间,第二级在我的机器上用了3个多小时还没算完(仿线秒,第二级实际仿线秒多,因为我只是验证方法可行,仿真结果并无实际意义,所以就给停了)。

  大的思路就是上面说的这些,其实这也是对于复杂问题的一种比较通用的解决方法——当问题规模超出计算资源能力时,如有可能,就把它划分成几个相对独立的子问题进行求解,而分解的原则是子问题之间的耦合尽量少。对于这个问题来说,经过划分,每个子问题的规模大约是原来的15,一般应该没什么问题了,还不行的线个子问题。当然,如果你机器的资源够用,把原模型分解成3级+2级的两个子模型也可以。

  还存在一个问题:如果模型不是现在的形式,而是下级有向上级反馈的信号怎么办?我只能很遗憾的说,除了使用更好性能的计算机,我想不出什么好办法了。如果一个复杂问题不能有效分解成子问题,解决这个问题自然就需要更多的资源。当然,通过理论分析对模型本身进行简化或降阶是一个有效途径,但那需要对模型有更深入的了解。

本文链接:http://merlejacobs.com/fangzhen/935.html