lorenz系统simulink仿真_如何加快Simulink的仿真速度30

476e236d140a686fd634f2a1e37c52d8.gif

Simulink对于工科生来说,必不可少,它的应用大大缩减了我们的产品开发成本与开发周期,但是随着其不断地更新换代,对于算法的精确度越来越高,现实中我们对系统的要求也越来越高,难免会遇到仿真速度变慢,无法满足我们现实需要的情况。

下面我们结合MathWorks Support Team列举的可能导致仿真运行速度很慢的几种原因,进行一些总结与探讨:

1. 模型中有一个 MATLAB 函数块 :如下图所示,当存在 MATLAB Fcn 模块时,在每个采样时间都会调用 MATLAB 解释器。这会大大降低仿真速度。所以,应尽可能使用内置Simulink模块。私以为,这里也非那么绝对,现在的MATLAB版本功能越来越强大,计算精度更高,当遇到一些内部模块用简化的函数代替时,也可以缩短仿真时间。

053fae5f79fa8849e21b8f63acbcb46f.png

2. MATLAB S函数(S-Function):在每个时间步长都会计算 S-Function。把MATLAB代码转为MEX文件,这样性能可以得到显著提高。此外,如果可能,应尽量使用内置模块建模。

3. 较小的步长或采样时间(或者彼此间不是倍数关系的采样时间):为了在仿真期间捕获重要事件,有时必须设置最够小的步长;反过来,步长太小会导致产生不必要的输出点,从而减慢仿真速度。变步长可以大大加快仿真速度,但同时也可能带来结果不准确的问题。

4. 最大步长太小:如果您更改了最大步长,请尝试用默认值(设置为自动)来运行仿真。

5. 您要求的精度可能过高:默认相对容差(0.1% 精度)通常就足够了。对于状态趋于零的模型,如果绝对容差参数太小,则仿真可能在近零状态值附近采用过多步长。有关容错度的详细信息,请参阅《使用 Simulink 手册》第 5-13 页。请记住,所有要输入的容差值都是绝对值。所以,默认相对容差值设置为 1e-3 时,意味着相对容差是 0.001,或者 0.1%(采用百分比形式)。

6. 时间尺度可能太长:减少时间间隔。

7. 您的模型中包含一个 Memory 模块:使用 Memory 模块会导致在每个步长上变阶求解器(ode15s 和 ode113)被重置回阶数 1。

8. Extras 库中有包含以上三项之一(即Graph Scope、Autoscaling Scopes、Spectrum analyzer等)的Mask模块:Unmask模块来看看它们是否调用 S-Function。

9. 使用了Scope模块:尽管它们的影响很可能不明显。Scope模块为方便观察波形,得到结果反馈,使用在所难免。因此,在允许的情况下,尽可能地少开示波器窗口,实时绘图模块,减少向workspace空间存储数据。

10. 代数环:模型包含有代数循环。在每一时间步都会反复计算代数循环,因此这会大大地降低仿真的速度。因此需要减少代数环,在无法减少的情况下就要拆环,拆环的方法有状态端口法,代数约束模块法,积分模块等等。从另外一个角度来讲,在Simulink环境中建模时,以s域的表达式进行建模时问题要少一些,增大误差限、取消过零检测等可以提高发展速度,减少警告信息。而z域的情况下要注意的问题会多一点。第一点是把模型中的代数环(Algebraic Loop)要消除掉;因为z域处理的数据都是一拍一拍按照采样周期处理的,所以如果一个数据既作为输入,同时又无延时地作为输出,就产生了数值处理的问题,造成仿真速度显著下降,处理的方法一般也不难,把反馈加一个延时环节就好了。

11. 不要在积分函数中引入白噪声模块:对于连续系统,使用 Extras/Sources 库中的带限白噪声模块。

33b9bb59c241d937adb74ff9ff14e090.png

12. 这可能是个刚性(stiff)问题,而您使用的是非刚性(non-stiff)求解器:尝试使用 ode15s。

0e021415fd4e2a4366cad1dac36775e1.png0e021415fd4e2a4366cad1dac36775e1.png

13. 您可能碰到了连续过零,导致仿真逐渐“停滞”,时间很长(并且可能是无限长时间):要解决此问题,可以禁用过零检测。这可以通过在“Simulation 参数”(Simulation Parameters) 对话框的“高级”(Advanced) 窗格中选择“禁用过零检测”(Disable zero crossing detection) 选项来实现。在 R11 中,可通过转到模型的“仿真”(Simulation) ->“参数”(Parameters) ->“诊断”(Diagnostics) 部分来实现此目的。有关过零检测的详细信息,请参阅《使用 Simulink 手册》第 5-44 页。

1ca083a9c86fd030ac0b647e41ebd3c5.png

14. 您也可能想要尝试设置“模型参数配置”(Model Parameter Configuration) 对话框以便您的 Simulink 模型使用“内联参数”(Inline Parameters) 选项:选择此选项可使 Simulink 能够将指定参数视为常量,从而加快仿真速度。请参阅《使用 Simulink 手册》第 5-30 页了解更多信息。

e39718f0eda1e19b1a3e785e33a2e1b5.png

15. Simulink Accelerator 仿真模式可以加快仿真时间。Profiler可以分析模型性能瓶颈来提高仿真速度。

可以改变仿真的模式。在老版本Simulink中,这个选择很少,但是新版本有了Normal、Accelerator和Rapid Accelerator、HIL等模式。硬件在回路HIL显然速度最快,但是好多时候并不适用,因为首先要有相应的硬件,其次是仿真对象要支持代码生成。因为Simulink用的是一种解释性的语言,normal模式就可以理解为Matlab解释一句,操作系统执行一句,速度自然不会太快;Accelerator则是把一部分共享模块编译为库文件,例如dll进行调用,相当于混合模式,既有解释-执行,也有直接调用,速度;Rapid Accelerator则是把整个模型编译为操作系统下独立运行的程序,少了Simulink解释给操作系统的工作,自然运行速度快,代价则是需要一定的时间来编译模型;这种模式对PC的硬件配置要求是相对比较高的,内存少于3GB时容易出错。

4663de97922a53da53be6b29b01a39f1.png

16. 如果模型非常复杂(涉及大量模型引用和子系统)且包含大量数据记录,仿真速度也会受到影响:禁用数据记录功能也能提高仿真速度。

我们先来看如何保存数据:

(1)在搜scope串口的工具栏,点击 Parameters 按钮 。

(2)点击 Logging 选项卡,然后选中 Log data to workspace 复选框。在 (3)Variable name 框中,输入用于保存数据的变量名称或使用默认名称 “ScopeData”。从 Save format 列表中选择 “Dataset”。点击 OK。可以将 Save format 设置为 “Dataset” 以外的格式(例如 “Array”)。运行仿真即可。

因此,将Log data to workspace 复选框取消即可。不同的版本可能设置不太一样,但都是一个意思。例如这里2014的版本为Save data to workspace。

5f98b1c60492606e09a9915fcd64c995.png

17.系统的本身是离散的还是连续的。离散系统的运行速度要快于连续系统。对系统离散化,方法为在你的gui模块里选择discretize electric model,采样时间越大仿真越快,当然采样时间的设定要与你对系统精确性相配合,因为采样时间是与准确性成反比的。

c1f6275ea74c3c83db98be1654bae151.png

18.除此之外,仿真速度受系统(即处理器、RAM、正在发生的交换量等)的制约。所以,尽可能让你的计算机性能满足仿真的需要,这就是“磨刀不误砍柴工”,好的工具能让你的工作得心应手。当你使用一台计算机仿真时,就要着重考虑它的图形引擎速度、CPU 速度、内存量等因素,其中性能与 CPU 速度成正比。如果在仿真过程中存储的变量大于系统上的 RAM 量,则性能会很差。解决办法是运行较小的仿真或增加内存。

根据以上分析,其中常遇到的影响仿真速度的主要就是步长,离散或连续系统,计算机的性能等,其他因素影响程度没有那么大,因此在构建仿真系统时 ,应重点注意1,3,5,6,17,18等的影响,遇到其他问题可参考另外的选项解决。

b1005bddda908bdc456c240573f360f4.gif

‧  END  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Lorenz系统是一种混沌系统,它的状态变量随时间的演化呈现出非周期性、高度敏感的特Simulink是一种基于图形化编程的仿真工具,可以用来模拟和分析各种系统的行为。因此,可以使用SimulinkLorenz系统进行仿真,以研究其动态特性和行为。 ### 回答2: Lorenz系统是混沌理论中的一个经典模型,它描述的是三维动力学系统的行为。该系统的特在于它是一个高度敏感的非线性系统,它所表现出的行为是难以预测的,比如以不断变化的方式波动着,存在着无穷的轨道。 使用Simulink进行Lorenz系统仿真,可以从多个方面了解其运行机制。首先,我们需要建立一个Simulink模型,该模型应包含三个作为输入的微分方程,以及Lorenz系统中的三个关键变量:x,y和z。在建立模型时,我们需要采用适当的设置,将该模型构建为基于时间的模型(Time-based model),并定义时间步长。 接下来,我们需要设置模型参数,例如系统的初始条件或初值的取值。Lorenz系统的初始条件可以是任意的值,但通常情况下一组特定的初始值被确立为该系统的标准初始条件:x=1,y=1,z=1。 此外,我们还需要设置其他的参数,例如命名系统量,定义和输入参数等。 完成以上的设置后,我们可以启动仿真,观察仿真结果。相比于数值求解的方法,Simulink可以以图形化的方式来呈现模型的结果,这样更容易观察和分析实验结果。 在Simulink中,我们可以使用scope窗口、3D视图、X-Y图、图形工具箱,对仿真结果进行可视化分析,明确混沌系统演变的规律和特性。 总结来说,Simulink是一个方便而易用的仿真工具,可以用来模拟和探索许多复杂系统的行为,包括Lorenz系统。通过使用Simulink进行Lorenz系统的建模和仿真,我们可以更好地理解混沌系统理论以及其他复杂系统的行为,以及预测和解释系统行为的规律。 ### 回答3: Lorenz系统是一类非线性动力学系统,由美国数学家Edward Lorenz于1963年提出。它是一种混沌系统,具有很强的敏感性依赖于初始条件的特,即所谓的蝴蝶效应。Lorenz系统具有非常重要的应用价值,对于气象、流体力学等领域的研究都有很大的帮助。 SimulinkMATLAB软件中的一个可视化建模工具,可以方便地进行模拟和分析各种动态系统。在使用Simulink进行Lorenz系统仿真时,我们需要首先构建Lorenz系统的微分方程模型。根据Lorenz的原始定义,该模型由三个非线性方程组成: dx/dt = σ(y - x) dy/dt = x(ρ - z) - y dz/dt = xy - βz 其中,x、y、z是系统的三个状态变量,分别代表系统中的位置、速度、加速度等,σ、ρ、β是三个常数,分别代表系统的物理参数。根据这三个方程,我们可以构建Lorenz系统的数学模型。 接下来,我们使用Simulink将该方程组构建出来。首先,我们需要建立三个状态变量x、y、z的输入端口和三个状态变量的微分方程模块。对于每个状态变量,我们可以建立一个积分器模块,将微分方程转换为积分方程。然后,我们建立三个参数模块,分别用于输入系统参数σ、ρ、β。最后,将三个状态变量的输出连接到三个计算器模块,计算出下一时刻的状态值。 在完成该模型的搭建后,我们可以进行仿真操作,通过调节系统参数和初始状态进行模拟分析。通过对Lorenz系统仿真,我们可以更好地理解混沌系统的特性,以及如何通过调节参数来控制其运动行为,为相关领域的研究提供重要的参考和支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值