simulink的若干小问题总结

更新时间:2024-01-19 11:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.回调函数的设置

a.整个模型的回调函数设置:

File->Model properties(模型属性)->callback页中可设置整个模型的回调函数

(通常可将一些初始化数据写成m脚本文件,然后在初始化回调函数中调用此m文件,完成初始化,免得每次运行模型前都要RUN m文件)

b.单个模块回调函数的设置

右击模块->Block properties(模块属性)callback页中可设置单个模块的回调函数

2.数据点限制问题

a.Scope(示波器)

示波器默认的显示点数是5000,超过5000个点时,只会显示后5000个点;修改方法:示波器属性->Data history页->将limit data points to last前面的对勾去掉;

b.out模块

out模块输出数据到工作空间时,默认的点数是1000,超过1000点时只输出后1000点,修改方法:Simulation菜单->Configuration Paraments对话框->Data Import/Export页->limit data points to last前面的对勾去掉;使用simout模块就不存在这个问题。(当需要将数据输出作谱分析时,应使用simout模块,这样才有恒定的采样时间)

3.矩阵的相关操作 a.矩阵乘除法

乘法模块和除法模块默认的是 点除,改成矩阵除法的方法,双击模块弹出属性对话框->Main页Multiplication项改为Matrix(*)

同理,增益模块也可改为矩阵乘,有四个选项(其中K为增益矩阵,u为信号矩阵):K.*u,K*u,u*K,K*u(u为向量)

b.矩阵的连接

在simulink->Math Operation->Matrix Connection(矩阵组合模块);可以完成矩阵组合工作,一般不用mux来完成,因为其拼接的方式不好定义。

c.恒值向量

当在恒值里输入一恒值行向量时,要将属性中的Interpret vector parameters as 1-D(1维的意思)前的对勾去掉。

d.矩阵信号维数初始化

当仿真时,信号线都是矩阵形式的信号时,此时很容易出现矩阵维数初始化错误(特别是有环路时),可以在import(in输入模块)、mux(混合模块)、selecter(选择模块)定义输入信号的初始维数,方便系统初始化维数。

4.仿真异常问题

a.代数环

简单的说就是某个模块的输入值依靠当前时刻的输出值,这对于迭代算法来说是无法求解的。一般有两个方法解决:

memory模块,memory模块的作用类似于delay模块,即使用上一步的输出值来构造输入,使得迭代得以进行;对于某些动力学问题,加入memory后可能会造成结果错误,因

为用y(k-1)代替y(k)后,差分方程已经与原来不同了。也可考虑用初值模块(Singal Attributes下的IC模块)或有积分模块时在其中设置初始状态作为迭代的启动。

手工化简,代数环类似于隐函数,可以通过手工化简成显函数的方法来消除代数环。(建议手工化简)

代数环问题可参考帖子 http://www.ilovematlab.cn/viewthread.php?tid=60582&sid=Fdflj2

b.奇点

个人认为奇点多数是由于仿真发散导致的,特别是在有连续积分时容易出现。可以试试以下方法:

(1) 改变求解器,试试定步长或是刚性求解器;

(2) 如果是变步长的话,可设置最大步长上限,也可以增大容差试试; (3) .确保没有0为除数的情况出现; (4) .消除代数环(最好是人工化简);

(5) 若是由微分方程写成的模型,尽量写成积分形式,因为纯微分很容易导致不稳定。

本文来源:https://www.bwwdw.com/article/u1oo.html

Top