nullSIMULINK
SIMULINK
第三章 运行仿真null 介绍两种 Simulink 运行仿真的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
3.1 使用窗口运行仿真
3.2 使用 MATLAB 命令运行仿真本章内容和学习目的 掌握以上两种运行仿真的方法nullMATLAB Function 与Function 模块利用User_Defind Function模块库中的MATLAB Function 与Function 进行Simulink 与MATLAB之间的数据交互。
Fcn 模块一般用来实现简单的函数关系,在Fcn模块中
1)输入总是表示成u, u可以是一个向量。
2)可以使用C语言表达式, 例如:sin(u[1])+cos(u[2])
输出永远为一个标量。
nullMATLAB Fcn 一般用来调用MATLAB函数来实现一定的功能:
(1)所要调用的函数只能有一个输出(可以是一个向量)
(2)单输入函数只需使用函数名,多输入函数需要引用相应的元素
(3)在每个仿真步长内都需要调用MATLAB解释器。
nullsin(u(1))+u(2)cosnull3.1 使用窗口运行仿真运行一个仿真的完整过程是:
设置仿真参数、开始仿真、查看分析结果
运行仿真的方法有两种:
使用窗口菜单命令 和使用MATLAB命令null使用窗口运行仿真主要可以完成以下一些操作。
设置仿真参数 仿真参数和算法选择的设置
启动仿真 选择命令运行仿真
停止仿真 选择命令停止仿真
中断仿真 可以在中断点继续启动仿真,而停止仿真则不能
仿真诊断 在仿真中若出现错误,Simulink 将会终止仿真并在仿真诊断对话框中显示错误信息
null设置仿真参数 选择菜单选项【Simulation>Configuration Parameters】,可以对仿真参数及算法进行设置,共有五个选项卡1. 解法设置(Solver)
2. 工作空间输入输出(Workspace I/O)
3. 仿真诊断参数(Diagnostics)
4. 高级设置(Advanced)
5. 实时工具对话框(Real-Time Workshop)null 解法设置(Solver) 工作空间I/O(Workspace I/O) 诊断页(Diagnostics) 设置起始和终止时间,选择解法,指定求解参数和选择输出选项 管理MATLAB工作空间的输入输出项 选择在仿真中警告信息的等级null 高级设置(Advanced) 实时工具对话框(Real-Time Workshop) 对仿真的一些高级配置进行设置 对实时工具中若干参数进行设置。若没有安装实时工具,不出现此框。null 1. Solver (仿真解法设置) 选中【Simulation>Configuration Parameters】后,再点击【Solver】。
解法设置选项卡包括五项内容:
Simulation time ,
Solver option,
step,
Relative tolerance/Absolute tolerance,
Output options. null 1) Simulation timenull2)Solver option变步长解法:ode45,ode23,ode113,discrete
默认解法是 ode45-连续系统
discrete-离散系统
定步长解法:ode5,ode4,ode3,ode2,discrete
默认解法是 ode5-连续系统
discrete-离散系统null3)Step 变步长解法—可以设置初始步长和最大步长
固定步长解法—固定步长解法只可设置固定步长
系统的默认步长是auto.4)Relative tolerance/Absolute tolerance (相对误差限/绝对误差限)
相对误差限默认: 绝对误差限默认:auto1e-3null 5)output options
用户用来控制仿真输出个数的对话框,共有三个选项:
一般输出,产生附加输出,产生指定输出。nullSimulink的数值解法表null2. Workspace I/O工作空间输入输出 Simulink 的输入数据可以从 MATLAB 的工作空间中获得,其仿真结果也可以被引入到 MATLAB的 工作空间。
实现此项功能需要用到仿真参数对话框中的工作空间 I/O 页。Workspace Data Import/Export 分为三个部分: 从MATLAB工作空间获得系统输入(Load from workspace)
仿真结果输出到MATLAB的工作空间(Save to workspace)
数据保存设置(Save options)null 从MATLAB工作空间加载 (Load from workspace) 用户可以设置 MATLAB 中的变量作为系统输入信号或系统状态初值,有两个选项(1) Input:用来设置系统输入信号。
格式为 [t, u], t、u 均为列向量,
t 为输入信号的时间向量,u 为相应时刻的信号取值。
可以使用多个信号输入,如 [t, u1, u2]。
在模型中添加接受外部信号的 Inport 模块(In1模块)。null(2) Initial state:用来设置系统状态变量的初始值。初始值 xInitial 可为列向量。例1:已建立好仿真模型如下null在MATLAB命令窗口中输入命令:
>> t=(0:0.1:10)’; %注意t为列向量
>> u=sin(t);将 Load from workspace 栏 Input 选上,
然后进行仿真。null例2 这是一个模型接受多个输入变量的实例输入状态u包含三个输入项,在模型中应该有三个接受外部变量的端口,即添加3个In1 模块。null在MATTAB命令窗口中输入的变量为:
>> t=(1:0.01:10)';
>> u=[sin(t),2*cos(t),0.5*t];将 Load from workspace 栏 Input 选上,
然后进行仿真null 仿真结果输出到MATLAB的工作空间(Save to workspace)可将系统的仿真结果、系统仿真时刻、系统中的状态或指定的信号输出到 MATLAB 的工作空间中,有四个选项。(1) Time:tout 输出系统仿真时刻。
(2) States:xout 输出系统模型中的所有状态变量。
(3)Output:yout 输出系统模型中的所有由 Output 模块
(即 Out1 模块)表示的信号。
(4)Final state:xFinal 输出系统模型中的最终状态变量取值,即最后仿真时刻处的状态值。null 数据保存设置(Save option)(1) Limit data points to last:表示输出数据的长度(从信号的最后数据点记起)。
(2) Format:表示输出数据类型。共有三种形式:
Structure with Time(带有仿真时间变量的结构体),
Structure(不带仿真时间变量的结构体),
Array(信号数组)。
null假定两个输入信号都为正弦信号 sin(t),并且假定初始值为 [0,1]例3:null将 Load from workspace 栏的两项全部选上,并且将 Input 栏改写为[t, u, u]。
将 Save to workspace 栏的四项全部选上。
Save option 栏的三项分别为:1000,1,Array首先生成系统输入信号与状态初始值,在 MATLAB 命令窗口中键入如下命令:> >t = 0: 0.1: 10; t = t’;
> >u = sin ( t );
> >xInitial = [0, 1];null然后运行仿真,结果如下:null运行 whos 的结果:Name Size Bytes Class
t 101x1 808 double array
tout 51x1 408 double array
u 101x1 808 double array
xFinal 1x2 16 double array
xInitial 1x2 16 double array
xout 51x2 816 double array
yout 51x2 816 double array上面 t 和 tout 的维数不相同,这是因为在 Solver 中采用了变步长解法,若采用定步长解法(步长取 0.1)则维数相同。null3.2 使用MATLAB命令运行仿真 MATLAB 提供了 sim 命令,使用户可以在 MATLAB 的环境下以命令行或 M 文件的形式运行 Simulink 模型。
使用命令行方式,用户可以编写并运行系统仿真的脚本文件来完成动态系统的仿真,在脚本文件中重复地对同一系统在不同的仿真参数或不同的系统模块参数下进行仿真,而无需一次又一次启动 Simulink 图形窗口中的 Start Simulink 进行仿真。
使用命令行方式进行动态系统的仿真给用户提供了更强的控制能力,尤其适合高级用户。为什么需要使用命令行方式对动态系统进行仿真?null建立一个简单的动态系统,其功能如下:
(1)系统的输入正弦信号 :
(2)系统的输出信号为输入信号的积分:要求如下:
(1)系统的输入信号由 MATLAB 工作空间中的变量提供,时间0~10s;
(2)使用 MATLAB 绘制原始输入信号与系统运算结果的曲线。原函数的积分为:若取零初始条件,则有:null在 MATLAB 工作空间中定义输入变量 sim_input 如下:
>>t = 0: 0.1: 10; t = t’; % 表示输入信号的时间范围
>>u = sin ( t ); % 产生输入正弦信号
>>sim_input = [ t, u ]; % 传递给 Simulink 系统模型的变量nullSimulink 模型
(保存文件名为:command_in_out)对 Workspace Data I/O 页进行如下设置:
(1)Load from workspace 栏:Input 打勾,并填入 sim_input
(由 MATLAB 工作空间输入的变量名)。
(2)Save to workspace 栏:Time 和 Output 项勾上。
tout-输出系统仿真时刻,
yout- 输出模型中所有由outport模块(即Out1模块)表示的信号null然后运行 Simulink 仿真。最后在 MATLAB 工作空间运行如下命令:
plot (t, u, tout, yout, ’--’); gridnull 使用 sim 命令进行动态系统仿真1 使用语法 sim 命令的格式为:
[ t, x, y ] = sim ( model, timespan, options, ut )
[ t, x, y1, y2, …, yn ] = sim ( model, timespan, options, ut )
t:返回系统仿真的时间向量;
x:返回系统仿真的状态变量矩阵。
y:返回系统仿真的输出矩阵。按照顶层输出 Outport 模块的顺序输出。
y1,…,yn:返回多个系统仿真的输出实际使用时可省略某些参数设置而采用默认参数进行仿真。null2 参数说明(1)model:需要进行仿真的系统模型框图名称;
(2)timespan:系统仿真的时间范围(起始至终止时间),可有如下形式:
tFinal:设置仿真终止时间。仿真起始时间默认为0;
[tStart tFinal]:仿真起始时间 与终止时间;
[tStart OutputTimes tFinal]:设置仿真起始时间与终止时间,并且设置仿真返回的时间向量 。
其中 tStart、OutputTimes、tFinal 必须按照升序排列。null(3)options:由 simset 命令所设置的除仿真时间外的仿真参数;
(4)ut:表示系统模型顶层的外部可选输入。ut 可以是 MATLAB 函数。可以使用多个外部输入 ut1、ut2、…。
3 举例之一:简单仿真输入:sin(t)输出:null 对于前面的动态系统 command_in_out,在此采用命令行语句进行仿真。
在仿真之前,首先使用仿真参数设置对话框设置参数,然后在 MATLAB 命令窗口中键入如下命令:>>t = 0: 0.1: 10; t = t’;
>>u = sin ( t );
>>sim_input = [ t, u ]; % 传递给 Simulink 系统模型的变量
>>[ tout, x, yout ] = sim ( ‘command_in_out’ )
% 使用 sim 进行系统仿真,仿真参数取与前面相同
>>plot ( t, u, tout, yout, ‘--’ ); gridnull4 举例之二:仿真时间设置 sim 命令中的仿真时间参数 timespan 具有三种使用形式:[ t, x, y ] = sim ( model, tFinal )
[ t, x, y ] = sim ( model, [ tStart, tFinal] )
[ t, x, y ] = sim ( model, [ tStart outputTimes tFinal ] ) 注意: 仿真终止时间 tFinal 应该大于起始时间 tStart。
在默认情况下,系统仿真的输出结果(输出时间、状态和运算结果)受到 Simulink 求解器仿真步长的控制。
如果需要在指定的时刻输出系统仿真结果,则需要使用第三种方式,其中 [tStart outputTimes tFinal] 表示输出时间向量,此向量为一递增行向量。null仍以前面的 command_in_out 为例进行说明;
仿真参数设置对话框内的设置与前面相同;
这里使用四组不同的仿真时间对此系统进行仿真;
绘制系统输入信号与系统运算结果关系图作比较。nullM文件名:command_in_out_m>>t=0:0.1:10; t=t’; u=sin(t); sim_input=[t,u];
>>[tout1,x1,yout1]=sim(‘command_in_out’,5);
% 仿真时间范围0~5s,
>>[tout2,x2,yout2]=sim(‘command_in_out’,[1 8]);
% 1~8s,
>>[tout3,x3,yout3]=sim(‘command_in_out’,[1:8]);
% 1~8s,
>>[tout4,x4,yout4]=sim(‘command_in_out’,1:0.2:8);
%1~8s, null>>subplot(2,2,1); plot(t,u,tout1,yout1,’.’);
>>subplot(2,2,2); plot(t,u,tout2,yout2,’.’);
>>subplot(2,2,3); plot(t,u,tout3,yout3,’.’);
>>subplot(2,2,4); plot(t,u,tout4,yout4,’.’);null左上图:系统仿真返回时间向量 tout1 由 Simulimk 的求解器步长决定;
右上图:系统仿真返回时间向量 tout2 由 Simulimk 的求解器步长决定;
左下图 :每隔 1s 输出一次,系统仿真返回时间向量为 [1 2 3 4 5 6 7 8]
右下图:每隔 0.2s 输出一次,系统仿真返回时间向量为 [1 1.2 1.4 … 7.6 7.8 8]
null5 举例之三:外部输入变量设置 前面对动态系统 command_in_out 进行仿真时,通过设置 Simulink 仿真参数设置对话框中 Workspace I/O 中的外部变量输入,以使系统在仿真过程中获取输入信号 sim_input。
除了使用这种方法从 MATLAB 工作空间中获得系统输入信号之外,用户还可以通过使用 sim 命令中的 ut 参数来设置系统的外部输入信号。下面介绍如何使用 ut 参数设置外部输入信号。 仍以 command_in_out 为例进行说明。在使用如下命令时
[t, x, y]=sim (model, timespan, options, ut)
ut 为一个具有两列的矩阵,第一列表示外部输入信号的时间,第二列代表与时间列相对应的外部输入信号。 null>t=0:0.1:10; t=t’; u=sin(t); sim_input=[t, u];
>[tout1, x1, yout1]=sim(‘command_in_out’, 10); % 使用 Simulink 仿真参数对话框中的 workspace I/O 从 MATLAB 工作空间中获得输入信号
>u=cos(t);
>ut=[t, u]; % 改变系统输入信号
>>[tout2, x2, yout2]=sim(‘command_in_out’, 10, [], ut); % 使用 Sim 中的 ut 参数获得系统输入信号, ut的使用会覆盖由 Workspace I/O 的系统输入设置,这一点可以在下面的系统仿真结果图形中反映出来.
>subplot(1, 2, 1); plot(tout1, yout1); grid
>subplot(1, 2, 2); plot(tout2, yout2); grid MATLAB 程序(程序名:command_in_out_m2.m)null 图中上图表示系统输入为 sin(t) 时的相应曲线,下图表示 cos(t) 时的相应曲线。从图中可明显看出,当使用 sim 命令的 ut 参数时,Simulink 仿真参数设置对话框中的设置被覆盖。以前对话框中的外部输入是名为 sim_input 的正弦信号,而采用 ut 参数后执行的余弦输入信号。注意:这里指的“覆盖”,并不是在 Workspace I/O 对话框的 Input 中,将 sim_input 改变成了 ut,事实上并没有改变,只是不执行 sim_input,而执行了命令行中的 ut。null3.2.2 simset 命令3.2.3 simget 命令 simget 命令用来获得系统模型的仿真参数设置。 simset 命令是用来创建和编辑 options 结构的。用户可以使用simset对系统仿真参数进行设置3.2.4 simplot 命令
可以使用simplot命令绘制图形,输出仿真结果 使用语法: simplot ( data );
simplot ( time, data );说明:data 是动态系统仿真的输出数据,一般由 outport 模块、To Workspace 模块等产生的输出,其数据类型可以为矩阵、向量或是结构体等。null离散系统的仿真分析人口变化的数学模型
这是一个简单的人口变化模型,设某一年的人口数目为p(n),其中n表示年份,它与上一年的人口p(n-1) 、人口繁殖速率预计新增资源所能满足的个体数目K之间的动力学方程有如下的差分方程描述
p(n)=rp(n-1)[1-p(n-1)/K]
此系统为一非线性离散系统,设人口初始值 p(0)=100000,
人口繁殖速率r=1.05, 新增资源所能满足的个体数目K=1000 000.
要求建立此人口动态变化系统的系统模型,并分析人口数目在0至100年之间的变化趋势。null设置模块参数:
1)增益模块Gain表示人口繁殖速率:1.05
2)另一个增益模块表示新增资源所能满足的个体数目倒数,1/1000 000
3)Unit Delay 模块参数设置,人口初始值100 000仿真参数设置
1)设置系统仿真时间范围0-100
2)离散求解器与变步长求解器设置运行系统仿真nullp(n)=rp(n-1)[1-p(n-1)/K]null作业1:以前面的 command_in_out 模型框图为例,采用命令行语句并使用四组不同的仿真时间对此系统进行仿真;绘制系统输入信号与系统运算结果关系图作比较。
作业2:人口变化的离散系统模型的Simulink仿真。