simulink

《MATLAB/Simulink系统仿真超级学习手册》——1.3 MATLAB/Simulink应用示例

冷暖自知 提交于 2019-12-04 19:56:15
本节书摘来自异步社区《MATLAB/Simulink系统仿真超级学习手册》一书中的第1章,第1.3节,作者:MATLAB技术联盟 , 石良臣著,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.3 MATLAB/Simulink应用示例 MATLAB/Simulink系统仿真超级学习手册 本节将介绍几个例子来展示MATLAB/Simulink在系统仿真中的应用,希望读者通过这些例子对MATLB/Simulink有一个初步的认识。 【例1-1】微分方程求解。一个非线性刚体系统可用如下方程进行描述: 试求出在初始条件y 1(0)=0、y 2(0)=1、y 3(0)=1下系统的解。 编写如下MATLAB程序: function ep1_1 options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); [T,Y] = ode45(@rigid,[0 12],[0 1 1],options); plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.') function dy = rigid(t,y) dy = zeros(3,1); dy(1) = y(2) * y(3); dy(2) = -y(1) * y(3); dy(3) = -0.51 * y(1) * y(2); 程序运行结果如图1

matlab/simulink多次仿真形成对比(仿真完之后输出一个scope,改变参数后再输出一个scope,如何将两个图弄到一起形成对比)

白昼怎懂夜的黑 提交于 2019-12-04 19:55:43
方法1: 将仿真复制一下,再粘贴回去,将其中一个仿真中参数修改,两个仿真输出的信号用mux连接到同一个scope里面。这是最简单的方法: 首先随便建立一个模型: 双击打开Scope2,其输出信号为: 复制并粘贴模型,用mun将两个模型连接到同一个scope: 修改其中一个输入的参数: 得到输出如图: 点击Autoscale按键使图形全部显示: 方法2: 首先将每次仿真的结果保存于workspace中,要注意每次保存的名称要不同(下面会详细介绍);然后在命令窗口中使用plot画出图形。以线性二自由度汽车模型角阶跃输入响应试验为例,具体步骤如下: 建好的模型如图 现在要模拟速度不变(u=50),在t=1时刻,前轮角阶跃输入分别为5°、10°、15°时的 响应。首先将阶跃输入信号设置好(输入为5°) 然后双击打开Scope,点击Parameters按键,在对话框中设置如图,点击History选项卡,可以将”Limit data points to last”复选框勾掉,以防图像大小超出,然后将”Save data to workspace”选中,并将”Variable name”改成自己的名字,此处命名为”Input_angle_5”,”Format”为”Array”。 此时,运行仿真,得到的结果将会以”Input_angle_5”的名字保存在workspace。 同样

MATLAB/simulink控制系统5.2微分方程模型(0基础)

自古美人都是妖i 提交于 2019-12-04 19:55:05
目录 5.2 微分方程模型 5.2.1常见机电元件 5.2.2微分方程的建立 5.2.3 非线性数学模型的线性化 5.2 微分方程模型 5.2.1常见机电元件 能量分类 总方程 元件微分方程 储能元件 机械: 牛顿定律 质量块或 定轴转动物体 弹簧(弹性元件) 电气: 节点电流定律;回路电压定律 电容 电感 耗能元件 机械 阻尼器 电气 电阻 m-质量;x/x(t)-位移/变形量;f(t)-外作用力;θ-转角;M(t)-外力矩;J-转动惯量;k-弹簧刚度系数;fx(t)-弹簧力;U-电压;R-电阻;C-电容;i(t)-充电电流;L-电感;B-阻尼系数; 5.2.2微分方程的建立 列写微分方程一般步骤: 确定系统的输入量和输出量; 根据系统所遵循的基本定律,依次列出各元件的微分方程; 消中间变量,得到只含有输入、输出量的标准形式,标准化:右端输入,左端输出,导数降幂排列; 在列写元件的微分方程或求出系统的微分方程时,对非线性项应加以线性化。 eg.设有由电感L,电容C和电阻R组成的电路,如图所示。试求出以输出电压U2为输出变量和以输入电压U1为输入变量的微分方程。 (1)确定电路输入量/输出量 U1为输入量,U2为输出量 (2)依据电路所遵循的电学基本定律列写微分方程 (3)消去中间变量i,得到U2与U1的关系方程 5.2.3 非线性数学模型的线性化 线性化: 将非线性微分方程

MATLAB/simulink时域分析之输入响应(0基础)

邮差的信 提交于 2019-12-04 19:54:49
目录 6.2 输入响应 6.2.1 MATLAB中 (1)零初始条件响应函数 (2)阶跃响应函数 (3)单位脉冲响应函数 (4)任意输入响应函数 (5)ode45函数 6.2.2 simulink中 6.2 输入响应 6.2.1 MATLAB中 空间模型求解:一个动态系统的性能常用典型输入作用下的响应来描述,响应是指 零初始值条件下 某种典型的输入函数作用下对象的响应。 initial、step、lsim只能计算出状态响应的计算值,若需要计算状态响应的表达式,则需要根据前面介绍的符号工具箱,自己编程实现状态响应函数表达式的求解。 (1)零初始条件响应函数 initial(sys,x0,t); %绘制输出响应曲线图 [y,t,x] = initial(sys,x0,t); sys为输入的状态空间模型; x0为给定的初始状态; t为指定仿真计算状态响应的时间区间变量(数组); y输出数组形式的输出变量响应值; t仿真时间坐标数组; x状态变量响应值 eg. 计算如下系统在[0,5s]的初始状态响应 A=[0 1; -2 -3]; B=[]; C=[]; D=[];% 输入状态空间模型各矩阵,若没有相应值,可赋空矩阵 x0=[1; 2];% 输入初始状态 sys=ss(A,B,C,D);%计算系统的状态空间模型 [y,t,x]=initial(sys,x0,0:5);% 求系统在[0

MATLAB/simulink控制系统之传递函数模型(0基础)

无人久伴 提交于 2019-12-04 19:54:21
目录 5.3 传递函数模型 5.3.1 概述 5.3.2 模型建立 5.3.3 MATLAB中 5.3 传递函数模型 5.3.1 概述 ( 1 )概念 传递函数 :当初始条件为零时,系统 输出 量(响应函数)的拉氏变换表达式与系统 输入 量(驱动函数)的拉氏变换表达式之比,称为该系统的传递函数,其一般表达式为: 特征多项式: 传递函数的 分母 为系统的特征多项式; 极点: 特征多项式等于0组成特征方程的根; 阶数: 特征多项式的最高阶数n; 根轨迹增益 : ; 拉普拉斯变换: 可采用 传递函数 代替常系数微分方程来描述系统的特性。这就为采用直观和简便的图解方法来确定控制系统的整个特性、分析控制系统的运动过程,以及提供控制系统调整的可能性。 (2)算子阻抗法 参考: https://download.csdn.net/download/qq_38693598/10969179 https://wenku.baidu.com/view/f11c8023915f804d2b16c1ef.html?sxts=1550723655119 模型 算子阻抗 输入为电流,输出位电压 电阻:R 电容: 电感:Ls (3)典型电路环节 比例环节 惯性环节 理想积分环节 实际积分环节 理想微分环节 一阶微分环节 二阶微分环节 实际微分环节 二阶振荡环节 延迟环节 K=Rf/Ri;T=Rf*Cf,积分

matlab/simulink使用小技巧

送分小仙女□ 提交于 2019-12-04 19:50:42
1. 信号线上出现类似信号图标,是怎么回事? 在模块上右击,菜单中选择“signals & ports”,在相应弹出的对话框中选择“log signal data”,即在对应信号线上会出现该图标。仿真后该变量会出现在workspace中,存储在logsout中 2. selector的用法--如果增加输入通道? 增加相应维数后,在index option中选择“index vector(import)”即会出现增加的输入通道。 需要注意的是,第一个通道是数据输入,elector的输出结果即为第一个通道中输入的数据。 而其他增加的通道,是做输出配置用。比如,输入的数据是一个2维数据,而输出其中一列还是输出2列由外部的变量决定。那么就需要增加通道。 另外,“index vector(import)”与“index vector(dialog)”的区别是,前者是增加了一个通道作为配置,后者是在模块中直接写进参数进行配置。 3. 求和∑运算模块应用于多维数组的配置 a) 输入可以为任意维数的数组[m,n],而输出的维数可自定义。 b) 输出维数若为"all dimensions",则输出结果为一个元素(mXn个数相加的结果)。 c) 输出维数若为自定义,则需注意,定义的维数只能为1和m(前者为[1,n]数组,后者输出为[m,1]数组),即相应地所有列对应的行数据相加、所有行对应的列数据相加

MATLAB/SIMULINK建模小结

拈花ヽ惹草 提交于 2019-12-04 19:50:06
1.MATLAB中编写m文件时,针对不同模块可以用%%+空格的形式分隔开,这样便于查找变量的位置,另外要习惯对于写的代码添加注释,方便以后查阅。 2.m文件前可以加上clc(清空命令行窗口),clear(清空工作空间) 3.SIMULINK中多用From/Goto模块,这样会让模型清晰很多 4.模型搭建完成之后,如果仿真出现问题的话,多尝试。可以从以下几个角度出发 (1)改变仿真步长。在有积分模块的模型中,经常会报错计算不收敛,有singularity出现,这个时候可以尝试着改变步长,另外也需要是否有除数为0等情况出现。 (2)确定输入源是否正确。如果是用siganal builder确定的信号,那么时间要与系统仿真的时间相一致,否则后面输入信号与需要的输入信号不一致,可能会出错。 (3)多用scope进行调试。通过看输出波形可以直观的看到模型的输出结果,对调试有很大的帮助。 (4)unit delay的初始值要记得加上。 (5)代数环的问题。如果模型中有积分,可能就不会出现代数环。 来源: CSDN 作者: 恏恏过生活 链接: https://blog.csdn.net/qq_41769322/article/details/86503857

MATLAB/SIMULINK生成嵌入式代码的步骤

痞子三分冷 提交于 2019-12-04 19:49:49
昨天参加了Mathworks公司在东南大学举办的关于MATLAB的培训,内容是关于MATLAB/SIMULINK的嵌入式代码生成以及物理建模,在这里把代码生成的步骤及一些相关内容总结一下。 嵌入式代码生成 嵌入式代码生成主要利用的是MATLAB中自带的 MATLAB Coder 模块,MATLAB Coder可以从MATLABcode产生可读且可移植的C/C++程序,支持多数MATLAB语言和工具箱,可以将产生的程序作为源程序、静态库或动态库集成到项目中,可在MATLAB环境中使用产生的程序来加快MATLAB代码的执行速度。 接下来就以一个非常简单的例子来举例说明嵌入式代码生成的步骤。 1.创建模型 这个模型很简单,输出Out1等两个输入信号Input1和Input2之和再乘以增益k(这里先用2代替),即: 其中,x和y在其他模块中定义,z和k在本模块中定义(这个影响后面数据管理中各个参数的属性,后面再说,现在不管)。 2.更改设置 上文提到代码生成利用的是MATLAB自带的 MATLAB Coder 模块,打开SIMULINK中的Configuraton Parameters模块 或者Ctrl+E可行。打开之后, 第一步:更改求解器设置 因为我们生成的代码是需要下载到单片机中的,而单片机中的计时是按照它的频率严格进行的,因此求解器中的求解步长要与单片机的步长一致,否则就会出错

Matlab Parallel Computing with Simulink Model

老子叫甜甜 提交于 2019-12-04 17:09:35
I'm working on a project in which parallel computing would be a huge advantage. The project simulates multiple Simulink models. I did the simulation with a normal for-Loop, but since it takes days to simulate I decided to try the "parfor"-Loop . But that's where the problem begins. First I'll give you pictures of my code, the workspace and the Simulink-part which is causing me problems: Here's my code: apool = gcp('nocreate'); if isempty(apool) apool = parpool('local'); end wpath = pwd; parfor k = 1:number_of_models load_system(strcat(wpath,'\Models_Folder\',House(k).model_name)); set_param

Feedback loop in Simulink/HDL Coder

我们两清 提交于 2019-12-04 07:12:01
问题 I have a system in Simulink/HDL coder (see below image please). I have 3 outputs and 3 inputs. I want my system to run 10 times. After each iteration it should select the outputs and use them as inputs. How I can do that? 回答1: Build a loop using a memory and a initial value block for each signal. The memory block allows you to access the previous iteration signal and the initial value block is used to set the input for the first iteration. A simple example looping back one signal can be found