如何加快Simulink模型的仿真速度有几种原因可能导致仿真运行速度很慢:
1. 模型中有一个 MATLAB 函数块 :当存在 MATLAB Fcn
模块时,在每个采样时间都会调用 MATLAB 解释器。这会大大降低仿真速度。所以,应尽可能使用内置Simulink
模块。
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
模块:尽管它们的影响很可能不明显。
10. 代数环:为了解代数环,会在每个步长上都执行迭代计算。因此,它大大降低了速度。有关代数环的详细信息,请参阅《使用 Simulink 手册》第 3-18 页。
11. 不要在积分函数中引入白噪声
模块:对于连续系统,使用 Extras/Sources 库中的带限白噪声
模块。
12. 这可能是个刚性(stiff)问题,而您使用的是非刚性(non-stiff)求解器:尝试使用 ode15s。
13. 您可能碰到了连续过零,导致仿真逐渐“停滞”,时间很长(并且可能是无限长时间):要解决此问题,可以禁用过零检测。这可以通过在“Simulation 参数”(Simulation Parameters) 对话框的“高级”(Advanced) 窗格中选择“禁用过零检测”(Disable zero crossing detection) 选项来实现。在 R11 中,可通过转到模型的“仿真”(Simulation) ->“参数”(Parameters) ->“诊断”(Diagnostics) 部分来实现此目的。
有关过零检测的详细信息,请参阅《使用 Simulink 手册》第 5-44 页。
14. 您也可能想要尝试设置“模型参数配置”(Model Parameter Configuration) 对话框以便您的 Simulink 模型使用“内联参数”(Inline Parameters) 选项:选择此选项可使 Simulink 能够将指定参数视为常量,从而加快仿真速度。请参阅《使用 Simulink 手册》第 5-30 页了解更多信息。
15. Simulink Accelerator 仿真模式可以加快仿真时间。Profiler可以分析模型性能瓶颈来提高仿真速度。
16. 如果模型非常复杂(涉及大量模型引用和子系统)且包含大量数据记录,仿真速度也会受到影响:禁用数据记录功能也能提高仿真速度。
除此之外,仿真速度受系统(即处理器、RAM、正在发生的交换量等)的制约。
关于仿真速度有还有几点需要考虑:
- 图形引擎速度
- CPU 速度
- 内存量
为此,下面是几点提示:
- 如果在仿真过程中有打开的scope或其他可视化输出设备,这些都会降低性能
- 性能与 CPU 速度成正比
- 如果在仿真过程中存储的变量大于系统上的 RAM 量,则性能会很差。解决办法是运行较小的仿真或增加内存
如何利用MATLAB/SIMULINK搭建简单的仿真模型1、建立对应的数学模型了,比如,传递函数,状态空间,这些模型代表了对象或是系统本身;
2、在simulink的库里面直接拖拽进新建模型里面,并修改参数;
3、确定输入和输出,如,输入为阶跃信号,输出可以用scope示波器显示出来;
4、对输出的结果或曲线进行分析;
如何用命令运行matlab simulik 模型常用命令:
仿真命令:
sim ---仿真运行一个simulink
模块 sldebug ---调试一个simulink
模块 simset ---设置仿真参数
simget ---获取仿真参数
线性化和整理命令:
linmod ---从连续时间系统中获取线性模型
linmod2 ---也是获取线性模型,采用高级方法
dinmod ---从离散时间系统中获取线性模型
trim ---为一个仿真系统寻找稳定的状态参数
构建模型命令:
open_system --打开已有的模型
close_system --关闭打开的模型或
模块 new_system --创建一个新的空模型窗口
load_system --加载已有的模型并使模型不可见
save_system --保存一个打开的模型
add_block --添加一个新的
模块 add_line --添加一条线(两个
模块之间的连线)
delete_block --删除一个
模块 delete_line --删除一根线
find_system --查找一个
模块 hilite_system --使一个
模块醒目显示
replace_block --用一个新
模块代替已有的
模块 set_param --为模型或
模块设置参数
get_param --获取
模块或模型的参数
add_param --为一个模型添加用户自定义的字符串参数
delete_param --从一个模型中删除一个用户自定义的参数
bdclose --关闭一个simulink窗口
bdroot --根层次下的
模块名字
gcb --获取当前
模块的名字
gcbh --获取当前
模块的句柄
gcs --获取当前系统的名字
getfullname --获取一个
模块的完全路径名
slupdate --将1.x的
模块升级为3.x的
模块 addterms --为未连接的端口添加terminators
模块 boolean --将数值数组转化为布尔值
slhelp --simulink的用户向导或者
模块帮助
封装命令:
hasmask --检查已有
模块是否封装
hasmaskdlg --检查已有
模块是否有封装的对话框
hasmaskicon --检查已有
模块是否有封装的图标
iconedit --使用ginput函数来设计
模块图标
maskpopups --返回并改变封装
模块的弹出菜单项
movemask --重建内置封装
模块为封装的子
模块 诊断命令:
sllastdiagnostic --上一次诊断信息
sllasterror --上一次错误信息
sllastwarning --上一次警告信息
sldiagnostics --为一个模型获取
模块的数目和编译状态
硬拷贝和打印命令:
frameedit --编辑打印画面
print --将simulink系统打印成图片,或将图片保存为m文件
printopt --打印机默认设置
orient --设置纸张的方向