参考书目 《反馈控制系统设计与分析—— MATLAB语言应用》清华大学出版社,2000年,薛定宇
计算机仿真 在计算机支持下进行的现代仿真技术称为计算机仿真。 仿真不单纯是对模型的实验,它包括建立模型、仿真运行和分析研究仿真结果,即建模——实验——分析的全过程。 MATLAB提供各种用于系统仿真的函数,用户可以通过m 文件调用指令和函数进行系统仿真,也可以通过Simulink工具箱,进行面向系统结构方框图的系统仿真。这两种方式可解决任意复杂系统的动态仿真问题,前者编辑灵活,而后者直观性强,实现可视化编辑。 内容:连续系统仿真:数值积分法、离散相似法 离散事件系统仿真 SIMULINK动态仿真
上篇:一、MATLAB的工作空间 1、MATLAB的工作空间包含了一组可以在命令窗口中调整(调用)的参数 who:显示当前工作空间中所有变量的一个简单列表 whos:则列出变量的大小、数据格式等详细信息 clear :清除工作空间中所有的变量 clear 变量名:清除指定的变量 2、保存和载入workspace (1)save filename variables 将变量列表variables所列出的变量保存到磁盘文件filename中 Variables所表示的变量列表中,不能用逗号,各个不同的变量之间只能用空格来分隔。 未列出variables时,表示将当前工作空间中所有变量都保持到磁盘文件中。 缺省的磁盘文件扩展名为“.mat”,可以使用“-”定义不同的存储格式(ASCII、V4等)
(2)load filename variables 将以前用save命令保存的变量variables从磁盘文件中调入MATLAB工作空间。 用load 命令调入的变量,其名称为用save命令保存时的名称,取值也一样。 Variables所表示的变量列表中,不能用逗号,各个不同的变量之间只能用空格来分隔。 未列出variables时,表示将磁盘文件中的所有变量都调入工作空间。 3、退出工作空间 quit 或 exit
二、文件管理 文件管理的命令,包括列文件名、显示或删除文件、显示或改变当前目录等。(what、dir、type、delete、cd、which) what:显示当前目录下所有与matlab相关的文件及它们的路径。 dir:显示当前目录下所有的文件 which:显示某个文件的路径 cd path:由当前目录进入path目录 cd ..:返回上一级目录 cd:显示当前目录 type filename:在命令窗口中显示文件filename delete filename:删除文件filename
三、MATLAB语句形式 》变量=表达式; 通过等于符号将表达式的值赋予变量。当键入回车键时,该语句被执行。语句执行之后,窗口自动显示出语句执行的结果。如果希望结果不被显示,则只要在语句之后加上一个分号(;)即可。此时尽管结果没有显示,但它依然被赋值并在MATLAB工作空间中分配了内存。
1、变量 (1)变量的命名:变量的名字必须以字母开头(不能超过19个字符),之后可以是任意字母、数字或下划线;变量名称区分字母的大小写;变量中不能包含有标点符号。 (2)变量操作 在命令窗口中,同时存储着输入的命令和创建的所有变量值,它们可以在任何需要的时候被调用。如要察看变量a的值,只需要在命令窗口中输入变量的名称即可:》a 2、数值显示格式 任何MATLAB的语句的执行结果都可以在屏幕上显示,同时赋值给指定的变量,没有指定变量时,赋值给一个特殊的变量ans,数据的显示格式由format命令控制。 format只是影响结果的显示,不影响其计算与存储;MATLAB总是以双字长浮点数(双精度)来执行所有的运算。
四、基于数值积分法的连续系统仿真 1.数值积分法的MATLAB函数 MATLAB的工具箱提供了各种数值积分方法函数: 格式:[T,Y]=solver(‘F’,TSPAN,Yo,OPTIONS) solver为微分方程的求解函数名。 F为系统模型文件名,模型为TSPAN=[To Tfinal]为积分区间,初值—终值, Yo为系统输出初始值,即To时刻的初值列向量; OPTIONS设置积分相对允误’RelTol’和绝对允误’AbsTol’, 缺省时,RelTol=1e-3, AbsTol=1e-6. 输出参数T和Y为列向量,T为时刻向量,Y表示不同时刻的函数值。
系统模型函数的编写格式是固定的,如果其格式没有按照要求去编写则将得出错误的求解结果,系统模型函数的引导语句为: function xdot=模型函数名(t,x,附加参数) 其中t为时间变量,x为状态变量,xdot为状态变量的导数。如果有附加参数需要传递,则可以列出,中间用逗号分开。 solver: ode23 Runge-Kutta法 三阶积分算法、二阶误差估计、变积分步长的低阶算法 ode45 Runge-Kutta法,变步长的中等阶次积分算法 ode113 变阶的Adams-Bashforth-Moulton,多步长 ode15s 改进的Gear法,用于刚性方程的求解。
例1:求微分方程 先建立一个系统模型文件(m文件函数)dfun.m function y=dfun(t,x) y=sqrt(x)+5; 然后建立m文件mp2-1 %mp2-1 [t,x]=ode23('dfun', [0 10] , 1) plot(t,x) , ,
2.对于高阶常微分方程 则可以选择一组状态变量, 将原高阶微分方程模型变换成以下的一阶微分方程组形式:
例2考虑描述振荡器的经典的范得波(Var der Pol)微分方程 可变换成 建立一个系统模型文件(m文件函数) function xprime = vdp_eq(t,x) global MU xprime = [x(2);MU*(1-x(1)^2)*x(2)-x(1)] 然后建立m文件显示 。。。 [t,x] = ode45('vdp_eq',0,40,Y0);
五、基于离散相似法的连续系统仿真 所谓离散相似法是首先将连续系统模型离散化,得到等价的或相似的离散化的模型,然后对相似的离散模型进行仿真计算。 根据这一原理,首先应将连续时间系统模型转换为等价的离散时间系统模型。连续系统离散化处理是通过①采样和信号保持器;②变换法(如双线性变换)来实现的。③转移矩阵法;
连续系统模型转换为离散时间系统模型的函数C2D,调用格式为 sysd = c2d (sys, Ts, method) 其中,sys为线性连续时间系统;Ts为采样时间;sysd为等价的离散时间系统。 method为离散化方法,可以选用: ① 'zoh '为零阶保持器 ② 'foh'为一阶保持器 ③ 'tustion'为双线性变换法,④ 'prewarp'为改进的双线性变换法 ⑤ 'matched'使连续和离散系统具有匹配的DC增益
例3:连续系统传递函数 采用一阶采样保持器,采样周期为 求其离散化系统模型 sysc = tf ( [1 -1] , [14 5] , ‘td’ , 0.35 );% ‘td’ 为time delay sysd = c2d ( sysc, 0.1, 'foh' ) step ( sysc, sysd ); 运行结果: Transfer function:
下篇:一、Simulink与建模仿真 Simulink及应用领域 Simulink是一种用来实现计算机仿真的软件工具。它是MATLAB 的一个附加组件,可用于实现各种动态系统(包括连续系统、离散系统和混合系统)的建模、分析和仿真。 特点:易学易用,能够依托MATLAB提供的丰富的仿真资源(1)通讯与卫星系统;(2)航空航天系统;(4)船舶系统;(6)金融系统;(3)生物系统;(5)汽车系统;(7)控制系统。
创建一个简单的模型 例4:示范模型的功能是对一个正弦信号进行积分,显示积分的结果。Mp1.mdl 图 mp1模型
模型结构已设计,用SIMULINK建立模型的过程可以概括为:在SIMULINK的模块库中找到所需的模块,并把它们拖曳到模型窗口,将这些模块排列好,然后用直线将各个模块连接起来。步骤如下: 新建一个空白模型:单击库浏览器工具栏上的空白按钮。模型的后缀名为.mdl. 在模块库浏览器窗口找到所需的模块,并将模块拖曳到空白的模型窗口中的适当位置(均在SIMULINK库)。 正弦发生器(source子库的sine wave)、积分器(continuous子库的integrator)、复用器(signals & systems子库的MUX)、示波器(sinks子库的scope)。 用直线将模块连接起来,注意一个模块的输入端只能和另一个模块的输出端连接。保存,*.mdl。 运行(simulation/start)、查看结果(双击scope)。修改参数,查看运行的结果。
子系统创建及封装 在命令窗口键入“thermo”(这是一个房间热力学仿真演示程序)。里面包含许多模块,模块之间用直线相连,组成模型,模型造好后,可以仿真运行,等待结果。 双击“house”模块,出现“thermo/house”窗口,表示house模块是由窗口右边所示的一些模块连接而成。像house这样由由几个相互关联的模块组合而成的模块在simulink中称为子系统 用户自定义该子系统的图表和设置参数对话 House房屋形状的图标就是封装后的结果。 还可以做其他尝试,如:把温度设为80(预期的室内温度),观察仿真结果的变化。 标签为daily temperature variation的正弦模块是设置日温度变化,试改变幅度值参数,观察仿真结果的变化。
线性系统积分模块 1)构作如下图所示系统 2)双击标准积分模块,引出积分器对话框,在External reset外复位下拉拦中,选择rising项。按OK键,模块呈现如图所示的两个端口,下端口旁的符号表示:此端口信号由负变正的瞬间,该积分器被强迫置零。 3)双击标准示波器模块,引出标准示波器窗口,点击,引出属性对话框,在该对话框的Number of axes栏中填写2,按OK键,就获得两端口示波器。 4)仿真操作 5)仿真结果说明 在仿真启动时,积分器从零开始对0.5t进行积分。当复位口信号t-5=0瞬间,积分器被重置为0,此后再对0.5t进行积分,
SIMULINK 运行仿真 两种Simulink运行仿真的方法 使用窗口运行仿真 使用MATLAB 命令运行仿真 使用窗口运行仿真 优点:人机交互性强,不必记住繁琐的命令语句即可进行操作。使用窗口运行仿真主要可以完成以下一些操作。 1. 设置仿真参数: 仿真参数和算法选择的设置 2. 应用仿真参数: 仿真参数和算法设置后,使之生效 3. 启动仿真: 选择命令运行仿真 4. 停止仿真: 选择命令停止仿真 5. 中断仿真: 可以在中断点继续启动仿真,而停止仿真则不能 6. 仿真诊断: 在仿真中若出现错误,Simulink将会终止仿真并在仿真诊断对话框中显示错误信息
1. 设置仿真参数 选择菜单选项【Simulation>Parameters】,可以对仿真参数及算法进行设置,共有五个选项卡 解法设置(Solver)(已讲) 工作间I/O(Workspace I/O) 诊断页(Diagnostics)(自学) 高级设置(Advanced) (自学) 实时工具对话框(Real-Time Workshop) (自学)
工作间I/O Simulink作为MATLAB 的一个附件,理应与MATLAB 很好地结合,它的输入数据可以从MATLAB的工作空间中获得,其仿真结果也可以被引入到MATLAB的工作空间。实现此项功能需要用到仿真参数对话框中的工作间I/O页。 工作间I/O 页大致可以分为三个部分: 从MATLAB工作空间获得系统输入(Load from workspace) 仿真结果输出到MATLAB的工作空间(Save to workspace) 输出选项(Save option) 下面对Workspace I/O选项页的功能与使用分别予以简介。
从MATLAB工作空间加载 (Load from workspace) 虽然Simulink提供了多种系统输入信号,但并不能完全满足需要。Simulink允许使用用户自定义的信号作为系统输入信号。在Load from workspace框中,用户可以设置MATLAB中的变量作为系统输入信号或系统状态初值,如下所述: (1)Input:用来设置系统输入信号,其格式为[t, u],其中t、u 均为列向量,t 为输入信号的时间向量,u 为相应时刻的信号取值。可以使用多个信号输入,如[t, u1, u2]。输入信号与Simulink的接口由Inport模块(In1模块)实现。 (2)Initial state:用来设置系统状态变量的初始值。初始值xInitial可为列向量。 注意:使用xInitialstate所设置的状态变量初始值会自动覆盖系统模块中的设置。另外,输入信号与状态变量需要按照系统模型中Inport模块(即In1 模块)的顺序进行正确设置。
仿真结果输出到MATLAB的工作空间 (Save to workspace) 使用Workspace I/O选项页可以将系统的仿真结果、系统仿真时刻、系统中的状态或指定的信号输出到MATLAB的工作空间中,以便用户对其进行定量分析,如下所述: (1)Time:输出系统仿真时刻。 (2)States:输出系统模型中的所有状态变量。 (3)Output:输出系统模型中的所有由Output 模块(即Out1 模块)表示的信号。 (4)Final state:输出系统模型中的最终状态变量取值,即最后仿真时刻处的状态值。 输出选项(Save option) (1)Limit data points to last:表示输出数据的长度(从信号的最后数据点记起)。 (2)Format:表示输出数据类型。共有三种形式:Structure with Time(带有仿真时间变量的结构体)、Structure(不带仿真时间变量的结构体)、Array(信号数组)。
使用MATLAB命令运行仿真 MATLAB提供了sim命令,用户可以在MATLAB 的环境下以命令行或M 文件的形式运行Simulink模型。 使用命令行方式,用户可以在脚本文件中重复地对同一系统在不同的仿真参数或不同的系统模块参数下进行仿真,而无需一次又一次启动Simulink图形窗口中的Start Simulink。
(1)系统的输入为一单位幅值、单位频率的正弦信号; (2)系统的输出信号为输入信号的积分。 要求如下: 建立一个简单的动态系统,其功能如下: (1)系统的输入为一单位幅值、单位频率的正弦信号; (2)系统的输出信号为输入信号的积分。 要求如下: (1)系统的输入信号由MATLAB 工作空间中的变量提供,时间0~10s; (2)使用MATLAB绘制原始输入信号与系统运算结果的曲线。 问题描述: 原函数:sin(t) 时间区域:0-10s 原函数的积分为:-cos(t)+C 若取零初始条件,则有:C=1; 因此,有x(t)=-cos(t)+1
对Workspace I/O 页进行如下设置: (1)Load from workspace 栏:Input 打勾,并填入sim_input(由MATLAB 工作空间输入的输入名)。Initial state 不选。 (2)Save to workspace 栏:Time 和Output 项勾上,State 和Final state 项不勾。 (3)Save options 栏依次为:1000,1,Array
在MATLAB工作空间中定义输入变量sim_input如下: >t = 0: 0.1: 10; t = t’; % 表示输入信号的时间范围 >u = sin( t ); % 产生输入正弦信号 >sim_input= [ t, u ]; % 传递给Simulink系统模型的变量 然后运行Simulink仿真。: 或者[ tout, x, yout] = sim( ‘command_in_out’) %使用sim进行系统仿真,仿真参数取与前面相同 最后在MATLAB工作空间运行如下命令 plot(t, u, tout, yout, ’--’); grid