精华内容
下载资源
问答
  • 控制中的各种函数MATLAB仿真

    万次阅读 多人点赞 2015-05-14 11:34:33
    控制系统MATLAB仿真 1 MATLAB简介 MATLAB是Mathworks公司开发的一种集数值计算、符号计算和图形可视化三大基本功能于一体的功能强大、操作简单的优秀工程计算应用软件。MATLAB不仅可以处理代数问题和数值分析...

     控制系统的MATLAB仿真

    1 MATLAB简介

    MATLAB是Mathworks公司开发的一种集数值计算、符号计算和图形可视化三大基本功能于一体的功能强大、操作简单的优秀工程计算应用软件。MATLAB不仅可以处理代数问题和数值分析问题,而且还具有强大的图形处理及仿真模拟等功能。从而能够很好的帮助工程师及科学家解决实际的技术问题。

    MATLAB的含义是矩阵实验室(Matrix Laboratory),最初主要用于方便矩阵的存取,其基本元素是无需定义维数的矩阵。经过十几年的扩充和完善,现已发展成为包含大量实用工具箱(Toolbox)的综合应用软件,不仅成为线性代数课程的标准工具,而且适合具有不同专业研究方向及工程应用需求的用户使用。

    MATLAB最重要的特点是易于扩展。它允许用户自行建立完成指定功能的扩展MATLAB函数(称为M文件),从而构成适合于其它领域的工具箱,大大扩展了MATLAB的应用范围。目前,MATLAB已成为国际控制界最流行的软件,控制界很多学者将自己擅长的CAD方法用MATLAB加以实现,出现了大量的MATLAB配套工具箱,如控制系统工具箱(control systems toolbox),系统识别工具箱(system identification toolbox),鲁棒控制工具箱(robust control toolbox),信号处理工具箱(signal processing toolbox)以及仿真环境SIMULINK等。

    MATLAB的安装

    本节将讨论操作系统为Microsoft Windows环境下安装MATLAB6的过程。

    将MATLAB6的安装盘放入光驱,系统将自动运行auto-run.bat文件,进行安装;也可以执行安装盘内的setup.exe文件启动MATLAB的安装程序。启动安装程序后,屏幕将显示安装MATLAB的初始界面,根据Windows安装程序的常识,不断单击[Next],输入正确的安装信息,具体操作过程如下:

    输入正确的用户注册信息码;

    选择接收软件公司的协议;

    输入用户名和公司名;

    选择MATLAB组件(Toolbox);

    选择软件安装路径和目录;

    单击[Next]按钮进入正式的安装界面。安装过程界面如图1所示。

    安装完毕后,选择[Restart my computer now]选项以重新启动计算机。

    重新启动计算机后,用户就可以点击图标

    使用MATLAB6了。MATLAB启动过程界面如图2所示。

    MATLAB桌面系统

    MATLAB的桌面系统由桌面平台以及桌面组件共同构成,如图3。桌面平台是各桌面组件的展示平台,它提供了一系列的菜单操作以及工具栏操作,而不同功能的桌面组件构成了整个MATLAB操作平台。其组件主要包含如下8个组件部分:

    ①命令窗口(Command Window)②历史命令窗口(Command History)③组件平台(Launch Pad)④路径浏览器(Current Directory Browser)⑤帮助浏览器(Help Browser)⑥工作空间浏览器(Workspace Browser)⑦数组编辑器(Array Editor)⑧M文件编辑调试器(Editor-Debugger)。

      用户可以在View菜单下选择打开或关闭某个窗口。

     

    (3) MATLAB命令窗口

    MATLAB可以认为是一种解释性语言。在MATLAB命令窗口中,标志>>为命令提示符,在命令提示符后面键入一个MATLAB命令时,MATLAB会立即对其进行处理,并显示处理结果。

    这种方式简单易用,但在编程过程中要修改整个程序比较困难,并且用户编写的程序不容易保存。如果想把所有的程序输入完再运行调试,可以用鼠标点击快捷

    或File|New|M-file菜单,在弹出的编程窗口中逐行输入命令,输入完毕后点击Debug|Run(或F5)运行整个程序。运行过程中的错误信息和运行结果显示在命令窗口中。整个程序的源代码可以保存为扩展名为".m"的M文件。

    在介绍MATLAB的强大计算和图象处理功能前,我们可以先运行一个简单的程序。

    设系统的闭环传递函数为:

    求系统的时域响应图,可输入下面的命令:

    >> num=[1,4];

    den=[1,2,8];

    step(num,den)

    程序运行后会在一个新的窗口中显示出系统的时域动态响应曲线,如图4。用鼠标左键点击动态响应曲线的某一点,系统会提示其响应时间和幅值。按住左键在曲线上移动鼠标的位置可以很容易的根据幅值观察出上升时间、调节时间、峰值及峰值时间,进而求出超调量。如果想求根轨迹,可将程序的第三行变为rlocus(num,den),求伯德图可改为bode(num,den)。所不同的是,在根轨迹和伯德图中,G(s)为开环传递函数。

    MATLAB的语法规则类似于C语言,变量名、函数名都与大小写有关,即变量A和a是两个完全不同的变量。应该注意所有的函数名均由小写字母构成。

    MATLAB是一个功能强大的工程应用软件,它提供了相当丰富的帮助信息,同时也提供了多种获得帮助的方法。如果用户第一次使用MATLAB,则建议首先在>>提示符下键入DEMO命令,它将启动MATLAB的演示程序。用户可以在此演示程序中领略MATLAB所提供的强大的运算和绘图功能。

    2 MATLAB基本操作命令

    本节简单介绍与本书内容相关的一些基本知识和操作命令。

    (1)简单矩阵的输入

    MATLAB是一种专门为矩阵运算设计的语言,所以在MATLAB中处理的所有变量都是矩阵。这就是说,MATLAB只有一种数据形式,那就是矩阵,或者数的矩形阵列。标量可看作为1×1的矩阵,向量可看作为n×1或1×n的矩阵。这就是说,MATLAB语言对矩阵的维数及类型没有限制,即用户无需定义变量的类型和维数,MATLAB会自动获取所需的存储空间。

    输入矩阵最便捷的方式为直接输入矩阵的元素,其定义如下:

    1、元素之间用空格或逗号间隔;

    2、用中括号([])把所有元素括起来;

    3、用分号(;)指定行结束。

    例如,在MATLAB的工作空间中,输入:

    则输出结果为:

    矩阵a被一直保存在工作空间中,以供后面使用,直至修改它。

    MATLAB的矩阵输入方式很灵活,大矩阵可以分成n行输入,用回车符代替分号或用续行符号(…)将元素续写到下一行。例如:

    以上三种输入方式结果是相同的。一般若长语句超出一行,则换行前使用续行符号(…)。

     

    在MATLAB中,矩阵元素不限于常量,可以采用任意形式的表达式。同时,除了直接输入方式之外,还可以采用其它方式输入矩阵,如:

    (1)利用内部语句或函数产生矩阵;

    (2)利用M文件产生矩阵;

    (3)利用外部数据文件装入到指定矩阵。

    (2)复数矩阵输入

    MATLAB允许在计算或函数中使用复数。输入复数矩阵有两种方法:

    (1) a=[12;34]+i*[56;78]

    (2) a=[1+5i 2+6i;3+7i 4+8i]

    注意,当矩阵的元素为复数时,在复数实部与虚部之间不允许使用空格符。如1 +5i将被认为是1和5i两个数。另外,MATLAB表示复数时,复数单位也可以用j。

    (3) MATLAB语句和变量

    MATLAB是一种描述性语言。它对输入的表达式边解释边执行,就象BASIC语言中直接执行语句一样。

    MATLAB语句的常用格式为:

    变量=表达式[;]

    或简化为:

     表达式[;]

    表达式可以由操作符、特殊符号、函数、变量名等组成。表达式的结果为一矩阵,它赋给左边的变量,同时显示在屏幕上。如果省略变量名和"="号,则MATLAB自动产生一个名为ans的变量来表示结果,如:

    1900∕81

    结果为:

    ans是MATLAB提供的固定变量,具有特定的功能,是不能由用户清除的。常用的固定变量还有eps、pi、Inf、NaN等。其特殊含义可以用7.2.10节介绍的方法查阅帮助。

    MATAB允许在函数调用时同时返回多个变量,而一个函数又可以由多种格式进行调用,语句的典型格式可表示为:

    [返回变量列表]=fun-name(输入变量列表)

    例如用bode()函数来求取或绘制系统的Bode图,可由下面的格式调用:

    其中变量num、den表示系统传递函数分子和分母,W表示指定频段,mag为计算幅值,phase为计算相角。

    (4)语句以"%"开始和以分号";"结束的特殊效用

    在MATLAB中以"%"开始的程序行,表示注解和说明。符号"%"类似于C++中的"//"。这些注解和说明是不执行的。这就是说,在MATLAB程序行中,出现"%"以后的一切内容都是可以忽略的。

    分号用来取消打印,如果语句最后一个符号是分号,则打印被取消,但是命令仍在执行,而结果不再在命令窗口或其它窗口中显示。这一点在M文件中大量采用,以抑制不必要的信息显示。

    (5)获取工作空间信息

    MATLAB开辟有一个工作空间,用于存储已经产生的变量。变量一旦被定义,MATLAB系统会自动将其保存在工作空间里。在退出程序之前,这些变量将被保留在存储器中。

    为了得到工作空间中的变量清单,可以在命令提示符>>后输入who 或 whos 命令,当前存放在工作空间的所有变量便会显示在屏幕上。

    命令clear能从工作空间中清除所有非永久性变量。如果只需要从工作空间中清除某个特定变量,比如"x",则应输入命令clear x。

    (6)常数与算术运算符

    MATLAB采用人们习惯使用的十进制数。如:

    数值的相对精度为eps,它是一个符合IEEE标准的16位长的十进制数,其范围为:

    MATLAB提供了常用的算术运算符:

    应该注意:(∕)右除法和(﹨)左除法这两种符号对数值操作时,其结果相同,其斜线下为分母,如1∕4与4﹨1,其结果均为0.25,但对矩阵操作时,左、右除法是有区别的。

    (7)选择输出格式

    输出格式是指数据显示的格式,MATLAB提供format命令可以控制结果矩阵的显示,而不影响结果矩阵的计算和存储。所有计算都是以双精度方式完成的。

    (1)如果矩阵的所有元素都是整数,则矩阵以不带小数点的格式显示。

    如输入:

    x=[-1    0    1]

    则显示:

    x=

      -1    0    1

    如果矩阵中至少有一个元素不是整数,则有多种输出格式。常见格式有以下四种:

    ① format short(短格式,也是系统默认格式)

    ② format short e(短格式科学表示)

    ③ format long(长格式)

    ④ format long e(长格式科学表示)

    如:

    对于以上四种格式,其显示结果分别为:

    一旦调用了某种格式,则这种被选用的格式将保持,直到对格式进行了改变为止。

    (8)MATLAB图形窗口

    当调用了一个产生图形的函数时,MATLAB会自动建立一个图形窗口。这个窗口还可分裂成多个窗口,并可在它们之间选择,这样在一个屏上可显示多个图形。

    图形窗口中的图形可通过打印机打印出来。若想将图形导出并保存,可用鼠标点击菜单File|Export,导出格式可选emp、bmp、jpg等。命令窗口的内容也可由打印机打印出来:如果事先选择了一些内容,则可打印出所选择的内容;如果没有选择内容,则可打印出整个工作空间的内容。

    (9)剪切板的使用

    利用Windows的剪切板可在MATLAB与其它应用程序之间交换信息。

    (1)要将MATLAB的图形移到其它应用程序,首先按Alt-Print Screen键,将图形复制到剪切板中,然后激活其它应用程序,选择edit(编辑)中的paste(粘贴),就可以在应用程序中得到MATLAB中的图形。当然还可以借助于copy to Bitmap 或copy to Metafile 选项来传递图形信息。

    (2)要将其它应用程序中的数据传递到MATLAB,应先将数据放入剪切板,然后在MATLAB中定义一个变量来接收。

    如键入:  q=[

    然后选择Edit中的paste,最后加上"]",这样可将应用程序中的数据送入MATLAB的q变量中。

    (10)MATLAB编程指南

    MATLAB的编程效率比BASIC、C、FORTRAN和PASCAL等语言要高,且易于维护。在编写小规模的程序时,可直接在命令提示符>>后面逐行输入,逐行执行。对于较复杂且经常重复使用的程序,可按7.1.3介绍的方法进入程序编辑器编写M文件。

    M文件是用MATLAB语言编写的可在MATLAB环境中运行的磁盘文件。它为脚本文件(Script File)和函数文件(Function File),这两种文件的扩展名都是.m。

    (1)脚本文件是将一组相关命令编辑在一个文件中,也称命令文件。脚本文件的语句可以访问MATLAB工作空间中的所有数据,运行过程中产生的所有变量都是全局变量。例如下述语句如果以.m为扩展名存盘,就构成了M脚本文件,我们不妨将其文件名取为"Step_Response"。

    % 用于求取一阶跃响应。

    num=[1 4];

    den=[1 2 8];

    step(num,den)

    当你键入help Step_Response时,屏幕上将显示文件开头部分的注释:

    用于求取一阶跃响应。

    很显然,在每一个M文件的开头,建立详细的注释是非常有用的。由于MATLAB提供了大量的命令和函数,想记住所有函数及调用方法一般不太可能,通过联机帮助命令help可容易地对想查询的各个函数的有关信息进行查询。该命令使用格式为:

    help 命令或函数名

    注意:若用户把文件存放在自己的工作目录上,在运行之前应该使该目录处在MATLAB的搜索路径上。当调用时,只需输入文件名,MATLAB就会自动按顺序执行文件中的命令。

    (2)函数文件是用于定义专用函数的,文件的第一行是以function作为关键字引导的,后面为注释和函数体语句。

    函数就像一个黑箱,把一些数据送进去,经加工处理,再把结果送出来。在函数体内使用的除返回变量和输入变量这些在第一行functon语句中直接引用的变量外,其它所有变量都是局部变量,执行完后,这些内部变量就被清除了。

    函数文件的文件名与函数名相同(文件名后缀为.m),它的执行与命令文件不同,不能键入其文件名来运行函数,M函数必须由其它语句来调用,这类似于C语言的可被其它函数调用的子程序。M函数文件一旦建立,就可以同MATLAB基本函数库一样加以使用。

    例1 求一系列数的平均数,该函数的文件名为"mean.m"

    function y=mean(x)

    % 这是一个用于求平均数的函数

    w=length(x); % length函数表示取向量x的长度

    y=sum(x)/w; % sun函数表示求各元素的和

    该文件第一行为定义行,指明是mean函数文件,y 是输出变量,x是输入变量,其后的%开头的文字段是说明部分。真正执行的函数体部分仅为最后二行。其中变量w是局部变量,程序执行完后,便不存在了。

    在MATLAB命令窗口中键入

    >> r=1:10; % 表示r变量取1到10共10个数

    mean(r)

    运行结果显示

    ans =

    5.5000

    该例就是直接使用了所建立的M函数文件,求取数列r的平均数。

     

    3 MATLAB在控制系统中的应用

     

    MATLAB是国际控制界目前使用最广的工具软件,几乎所有的控制理论与应用分支中都有MATLAB工具箱。本节结合前面所学自控理论的基本内容,采用控制系统工具箱(Control Systems Toolbox)和仿真环境(Simulink),学习MATLAB的应用。

    (1) 用MATLAB建立传递函数模型

    1.有理函数模型

    线性系统的传递函数模型可一般地表示为:

    (1)

    将系统的分子和分母多项式的系数按降幂的方式以向量的形式输入给两个变量numden,就可以轻易地将传递函数模型输入到MATLAB环境中。命令格式为:

    (2)

    (3)

    在MATLAB控制系统工具箱中,定义了tf() 函数,它可由传递函数分子分母给出的变量构造出单个的传递函数对象。从而使得系统模型的输入和处理更加方便。

    该函数的调用格式为:

    G=tf(num,den);   (4)

     

    例2 一个简单的传递函数模型:

    可以由下面的命令输入到MATLAB工作空间中去。

     

    >> num=[1,5];

     

    den=[1,2,3,4,5];

     

    G=tf(num,den)

     

    运行结果:

    这时对象G可以用来描述给定的传递函数模型,作为其它函数调用的变量。

     

    例3 一个稍微复杂一些的传递函数模型:

    该传递函数模型可以通过下面的语句输入到MATLAB工作空间。

     

    >> num=6*[1,5];

    den=conv(conv([1,3,1],[1,3,1]),[1,6]);

    tf(num,den)

    运行结果:

    其中conv()函数(标准的MATLAB函数)用来计算两个向量的卷积,多项式乘法当然也可以用这个函数来计算。该函数允许任意地多层嵌套,从而表示复杂的计算。

     

    2.零极点模型

    线性系统的传递函数还可以写成极点的形式:


    将系统增益、零点和极点以向量的形式输入给三个变量KGain、Z和P,就可以将系统的零极点模型输入到MATLAB工作空间中,命令格式为:

    在MATLAB控制工具箱中,定义了zpk()函数,由它可通过以上三个MATLAB变量构造出零极点对象,用于简单地表述零极点模型。该函数的调用格式为:

     

    G=zpk(Z,P,KGain)  

     

    例4 某系统的零极点模型为:

    该模型可以由下面的语句输入到MATLAB工作空间中。

    >> KGain=6;

    z=[-1.9294;-0.0353+0.9287j;-0.0353-0.9287j];

    p=[-0.9567+1.2272j;-0.9567-1.2272j;0.0433+0.6412j;0.0433-0.6412j];

    G=zpk(Z,P,KGain)

     

    运行结果:

    注意:对于单变量系统,其零极点均是用列向量来表示的,故Z、P向量中各项均用分号(;)隔开。

     

    3. 反馈系统结构图模型

     

    设反馈系统结构图如图5所示。

    控制系统工具箱中提供了feedback()函数,用来求取反馈连接下总的系统模型,该函数调用格式如下:

    G=feedback(G1,G2,sign);

    其中变量sign用来表示正反馈或负反馈结构,若sign=-1表示负反馈系统的模型,若省略sign变量,则仍将表示负反馈结构。G1和G2分别表示前向模型和反馈模型的LTI(线性时不变)对象。

    例5 若反馈系统图5中的两个传递函数分别为:

    则反馈系统的传递函数可由下列的MATLAB命令得出

     

    >> G1=tf(1,[1,2,1]);

    G2=tf(1,[1,1]);

    G=feedback(G1,G2)

    运行结果:

    若采用正反馈连接结构输入命令

    >> G=feedback(G1,G2,1)

    则得出如下结果:

    例6 若反馈系统为更复杂的结构如图6所示。其中

    则闭环系统的传递函数可以由下面的MATLAB命令得出:

    >> G1=tf([1,7,24,24],[1,10,35,50,24]);

    G2=tf([10,5],[1,0]);

    H=tf([1],[0.01,1]);

    G_a=feedback(G1*G2,H)

     

    得到结果:

    Transfer function:

    4. 有理分式模型与零极点模型的转换

    有了传递函数的有理分式模型之后,求取零极点模型就不是一件困难的事情了。在控制系统工具箱中,可以由zpk()函数立即将给定的LTI对象G转换成等效的零极点对象G1。该函数的调用格式为:

     G1=zpk(G) (11)

     

    例7 给定系统传递函数为:

    对应的零极点格式可由下面的命令得出

    >> num=[6.8, 61.2, 95.2];

    den=[1, 7.5, 22, 19.5, 0];

    G=tf(num,den);

    G1=zpk(G)

     

    显示结果:

    可见,在系统的零极点模型中若出现复数值,则在显示时将以二阶因子的形式表示相应的共轭复数对。

    同样,对于给定的零极点模型,也可以直接由MATLAB语句立即得出等效传递函数模型。调用格式为:

    G1=tf(G)  

     

    例8 给定零极点模型:


    可以用下面的MATLAB命令立即得出其等效的传递函数模型。输入程序的过程中要注意大小写。

     

    >> Z=[-2,-7];

     

    P=[0,-3-2j,-3+2j,-1.5];

     

    K=6.8;

     

    G=zpk(Z,P,K);

     

    G1=tf(G)

     

    结果显示:

    5. Simulink建模方法

     

    在一些实际应用中,如果系统的结构过于复杂,不适合用前面介绍的方法建模。在这种情况下,功能完善的Simulink程序可以用来建立新的数学模型。Simulink是由Math Works 软件公司1990年为MATLAB提供的新的控制系统模型图形输入仿真工具。它具有两个显著的功能:Simul(仿真)与Link(连接),亦即可以利用鼠标在模型窗口上"画"出所需的控制系统模型。然后利用SIMULINK提供的功能来对系统进行仿真或线性化分析。与MATLAB中逐行输入命令相比,这样输入更容易,分析更直观。下面简单介绍SIMULINK建立系统模型的基本步骤:

    (1) SIMULINK的启动:在MATLAB命令窗口的工具栏中单击按钮或者在命令提示符>>下键入simulink命令,回车后即可启动Simulink程序。启动后软件自动打开Simullink模型库窗口,如图 7所示。

    这一模型库中含有许多子模型库,如Sources(输入源模块库)、Sinks(输出显示模块库)、Nonlinear(非线性环节)等。若想建立一个控制系统结构框图,则应该选择File| New菜单中的Model选项,或选择工具栏上new Model按钮,打开一个空白的模型编辑窗口如图 8所示。

    (2) 画出系统的各个模块:打开相应的子模块库,选择所需要的元素,用鼠标左键点中后拖到模型编辑窗口的合适位置。

    (3) 给出各个模块参数:由于选中的各个模块只包含默认的模型参数,如默认的传递函数模型为1/(s+1)的简单格式,必须通过修改得到实际的模块参数。要修改模块的参数,可以用鼠标双击该模块图标,则会出现一个相应对话框,提示用户修改模块参数。

    (4) 画出连接线:当所有的模块都画出来之后,可以再画出模块间所需要的连线,构成完整的系统。模块间连线的画法很简单,只需要用鼠标点按起始模块的输出端(三角符号),再拖动鼠标,到终止模块的输入端释放鼠标键,系统会自动地在两个模块间画出带箭头的连线。若需要从连线中引出节点,可在鼠标点击起始节点时按住Ctrl键,再将鼠标拖动到目的模块。

    指定输入和输出端子:在Simulink下允许有两类输入输出信号,第一类是仿真信号,可从source(输入源模块库)图标中取出相应的输入信号端子,从Sink(输出显示模块库)图标中取出相应输出端子即可。第二类是要提取系统线性模型,则需打开Connection(连接模块库)图标,从中选取相应的输入输出端子。

    例9 典型二阶系统的结构图如图9所示。用SIMULINK对系统进行仿真分析。

    按前面步骤,启动simulink并打开一个空白的模型编辑窗口。

    (1)画出所需模块,并给出正确的参数:

    →在sources子模块库中选中阶跃输入(step)图标,将其拖入编辑窗口,并用鼠标左键双击该图标,打开参数设定的对话框,将参数step time(阶跃时刻)设为0。

    →在Math(数学)子模块库中选中加法器(sum)图标,拖到编辑窗口中,并双击该图标将参数List of signs(符号列表)设为|+-(表示输入为正,反馈为负)。

    →在continuous(连续)子模块库中、选积分器(Integrator)和传递函数(Transfer Fcn)图标拖到编辑窗口中,并将传递函数分子(Numerator)改为〔900〕,分母(Denominator)改为〔1,9〕。

    →在sinks(输出)子模块库中选择scope(示波器)和Out1(输出端口模块)图标并将之拖到编辑窗口中。

    2)将画出的所有模块按图9用鼠标连接起来,构成一个原系统的框图描述如图10所示。

    3)选择仿真算法和仿真控制参数,启动仿真过程。

    →在编辑窗口中点击Simulation|Simulation parameters菜单,会出现一个参数对话框,在solver模板中设置响应的仿真范围StartTime(开始时间)和StopTime(终止时间),仿真步长范围Maxinum step size(最大步长)和Mininum step size(最小步长)。对于本例,StopTime可设置为2。最后点击Simulation|Start菜单或点击相应的热键启动仿真。双击示波器,在弹出的图形上会"实时地"显示出仿真结果。输出结果如图11所示。

    →在命令窗口中键入whos命令,会发现工作空间中增加了两个变量――tout和yout,这是因为Simulink中的Out1 模块自动将结果写到了MATLAB的工作空间中。利用MATLAB命令plot(tout,yout),可将结果绘制出来,如图12所示。比较11和12,可以发现这两种输出结果是完全一致的。

    (2) 利用MATLAB进行时域分析

    1. 线性系统稳定性分析

    线性系统稳定的充要条件是系统的特征根均位于S平面的左半部分。系统的零极点模型可以直接被用来判断系统的稳定性。另外,MATLAB语言中提供了有关多项式的操作函数,也可以用于系统的分析和计算。

    (1)直接求特征多项式的根

    设p为特征多项式的系数向量,则MATLAB函数roots()可以直接求出方程p=0在复数范围内的解v,该函数的调用格式为:

    v=roots(p) (13)

    例10 已知系统的特征多项式为:

    特征方程的解可由下面的MATLAB命令得出。

    >> p=[1,0,3,2,1,1];

    v=roots(p)

    结果显示:

    v =

    0.3202 + 1.7042i

    0.3202 - 1.7042i

    -0.7209

    0.0402 + 0.6780i

    0.0402 - 0.6780i

    利用多项式求根函数roots(),可以很方便的求出系统的零点和极点,然后根据零极点分析系统稳定性和其它性能。

    (2)由根创建多项式

    如果已知多项式的因式分解式或特征根,可由MATLAB函数poly()直接得出特征多项式系数向量,其调用格式为:

    p=poly(v) 

    如上例中:

    v=[0.3202+1.7042i;0.3202-1.7042i;

    -0.7209;0.0402+0.6780i; 0.0402-0.6780i];

    >> p=poly(v)

    结果显示

    p =

    1.0000 -0.0000 3.0000 2.0000 1.0000 1.0000

    由此可见,函数roots()与函数poly()是互为逆运算的。

    (3)多项式求值

    在MATLAB 中通过函数polyval()可以求得多项式在给定点的值,该函数的调用格式为:

    polyval(p,v) (15)

    对于上例中的p值,求取多项式在x点的值,可输入如下命令:

    >> p=[1,0,3,2,1,1];

    x=1

    polyval(p,x)

    结果显示

    ans =

    8

    (4)部分分式展开

    考虑下列传递函数:

    MATLAB函数可将展开成部分分式,直接求出展开式中的留数、极点和余项。该函数的调用格式为:

    例11 设传递函数为:

    该传递函数的部分分式展开由以下命令获得:

    >> num=[2,5,3,6];

    den=[1,6,11,6];

    [r,p,k]=residue(num,den)

    命令窗口中显示如下结果

    r= p= k=

    -6.0000 -3.0000 2

    -4.0000 -2.0000

    3.0000 -1.0000

    中留数为列向量r,极点为列向量p,余项为行向量k。

    由此可得出部分分式展开式:

    该函数也可以逆向调用,把部分分式展开转变回多项式之比的形式,命令格式为:

    [num,den]=residue(r,p,k)

    对上例有:

    >> [num,den]=residue(r,p,k)

    结果显示

    num=

    2.0000 5.0000 3.0000 6.0000

    den=

    1.0000 6.0000 11.0000 6.0000

    应当指出,如果p(j)=p(j+1)=…=p(j+m-1),则极点p(j)是一个m重极点。在这种情况下,部分分式展开式将包括下列诸项:

    例12 设传递函数为:

    则部分分式展开由以下命令获得:

    >> v=[-1,-1,-1]

    num=[0,1,2,3];

    den=poly(v);

    [r,p,k]=residue(num,den)

    结果显示

    r=

    1.0000

    0.0000

    2.0000

    p=

    -1.0000

    -1.0000

    -1.0000

    k=

    [ ]

    其中由poly()命令将分母化为标准降幂排列多项式系数向量den, k=[]为空矩阵。

    由上可得展开式为:

    (5)由传递函数求零点和极点。

    在MATLAB控制系统工具箱中,给出了由传递函数对象G求出系统零点和极点的函数,其调用格式分别为:

    Z=tzero(G)

    P=G.P{1}

    注意:式19中要求的G必须是零极点模型对象,且出现了矩阵的点运算"."和大括号{}表示的矩阵元素,详细内容参阅后面章节。

    例13 已知传递函数为:

     

    输入如下命令:

    num=[6.8,61.2,95.2];

    den=[1,7.5,22,19.5,0];

    G=tf(num,den);

    G1=zpk(G);

    Z=tzero(G)

    P=G1.P{1}

    结果显示

    Z =

    -7

    -2

    P =

    0

    -3.0000 + 2.0000i

    -3.0000 - 2.0000i

    -1.5000

    其结果与例8完全一致。

    (6)零极点分布图。

    在MATLAB中,可利用pzmap()函数绘制连续系统的零、极点图,从而分析系统的稳定性,该函数调用格式为:

    pzmap(num,den) 

     

    例 14 给定传递函数:

    利用下列命令可自动打开一个图形窗口,显示该系统的零、极点分布图,如图13所示。

     

    2. 系统动态特性分析。

    (1)时域响应解析算法――部分分式展开法。

    用拉氏变换法求系统的单位阶跃响应,可直接得出输出c(t)随时间t变化的规律,对于高阶系统,输出的拉氏变换象函数为:

    对函数c(s)进行部分分式展开,我们可以用num,[den,0]来表示c(s)的分子和分母。

    例 15 给定系统的传递函数:

    (2)单位阶跃响应的求法:

    控制系统工具箱中给出了一个函数step()来直接求取线性系统的阶跃响应,如果已知传递函数为:

    则该函数可有以下几种调用格式:

    step(num,den) (22)

    step(num,den,t) (23)

    step(G) (24)

    step(G,t) (25)

    该函数将绘制出系统在单位阶跃输入条件下的动态响应图,同时给出稳态值。对于式23和25,t为图像显示的时间长度,是用户指定的时间向量。式22和24的显示时间由系统根据输出曲线的形状自行设定。

    如果需要将输出结果返回到MATLAB工作空间中,则采用以下调用格式:

    c=step(G)    (26)

    此时,屏上不会显示响应曲线,必须利用plot()命令去查看响应曲线。plot 可以根据两

    个或多个给定的向量绘制二维图形,详细介绍可以查阅后面的章节。

    例16 已知传递函数为:

    利用以下MATLAB命令可得阶跃响应曲线如图14所示。

    (3)求阶跃响应的性能指标

    MATLAB提供了强大的绘图计算功能,可以用多种方法求取系统的动态响应指标。我们首先介绍一种最简单的方法――游动鼠标法。对于例16,在程序运行完毕后,用鼠标左键点击时域响应图线任意一点,系统会自动跳出一个小方框,小方框显示了这一点的横坐标(时间)和纵坐标(幅值)。按住鼠标左键在曲线上移动,可以找到曲线幅值最大的一点――即曲线最大峰值,此时小方框中显示的时间就是此二阶系统的峰值时间,根据观察到的稳态值和峰值可以计算出系统的超调量。系统的上升时间和稳态响应时间可以依此类推。这种方法简单易用,但同时应注意它不适用于用plot()命令画出的图形。

    另一种比较常用的方法就是用编程方式求取时域响应的各项性能指标。与上一段介绍的游动鼠标法相比,编程方法稍微复杂,但通过下面的学习,读者可以掌握一定的编程技巧,能够将控制原理知识和编程方法相结合,自己编写一些程序,获取一些较为复杂的性能指标。

    通过前面的学习,我们已经可以用阶跃响应函数step( )获得系统输出量,若将输出量返回到变量y中,可以调用如下格式

    [y,t]=step(G) (27)

    该函数还同时返回了自动生成的时间变量t,对返回的这一对变量y和t的值进行计算,可以得到时域性能指标。

    ① 峰值时间(timetopeak)可由以下命令获得:

    [Y,k]=max(y); (28)

    timetopeak=t(k) (29)

    应用取最大值函数max()求出y的峰值及相应的时间,并存于变量Y和k中。然后在变量t中取出峰值时间,并将它赋给变量timetopeak。

    ② 最大(百分比)超调量(percentovershoot)可由以下命令得到:

    C=dcgain(G);

    [Y,k]=max(y); (30)

    percentovershoot=100*(Y-C)/C (31)

    dcgain( )函数用于求取系统的终值,将终值赋给变量C,然后依据超调量的定义,由Y和C计算出百分比超调量。

    ③ 上升时间(risetime)可利用MATLAB中控制语句编制M文件来获得。首先简单介绍一下循环语句while的使用。

    while循环语句的一般格式为:

    while<循环判断语句>

    循环体

    end

    其中,循环判断语句为某种形式的逻辑判断表达式。

    当表达式的逻辑值为真时,就执行循环体内的语句;当表达式的逻辑值为假时,就退出当前的循环体。如果循环判断语句为矩阵时,当且仅当所有的矩阵元素非零时,逻辑表达式的值为真。为避免循环语句陷入死循环,在语句内必须有可以自动修改循环控制变量的命令。

    要求出上升时间,可以用while语句编写以下程序得到:

    C=dcgain(G);

    n=1;

    while y(n)<C

    n=n+1;

    end

    risetime=t(n)

    在阶跃输入条件下,y 的值由零逐渐增大,当以上循环满足y=C时,退出循环,此时对应的时刻,即为上升时间。

    对于输出无超调的系统响应,上升时间定义为输出从稳态值的10%上升到90%所需时间,则计算程序如下:

    C=dcgain(G);

    n=1;

    while y(n)<0.1*C

    n=n+1;

    end

    m=1;

    while y(n)<0.9*C

    m=m+1;

    end

    risetime=t(m)-t(n)

    ④ 调节时间(setllingtime)可由while语句编程得到:

    C=dcgain(G);

    i=length(t);

    while(y(i)>0.98*C)&(y(i)<1.02*C)

    i=i-1;

    end

    setllingtime=t(i)

    用向量长度函数length( )可求得t序列的长度,将其设定为变量i的上限值。

    例 17 已知二阶系统传递函数为:

    利用下面的stepanalysis.m程序可得到阶跃响应如图 15及性能指标数据。

    >> G=zpk([ ],[-1+3*i,-1-3*i ],3);

    % 计算最大峰值时间和它对应的超调量。

    C=dcgain(G)

    [y,t]=step(G);

    plot(t,y)

    grid

    [Y,k]=max(y);

    timetopeak=t(k)

    percentovershoot=100*(Y-C)/C

    % 计算上升时间。

    n=1;

    while y(n)<C

    n=n+1;

    end

    risetime=t(n)

    % 计算稳态响应时间。

    i=length(t);

    while(y(i)>0.98*C)&(y(i)<1.02*C)

    i=i-1;

    end

    setllingtime=t(i)

    运行后的响应图如图 15,命令窗口中显示的结果为

    C = timetopeak =

    0.3000 1.0491

    percentovershoot = risetime =

    35.0914 0.6626

    setllingtime =

    3.5337

    有兴趣的读者可以用本节介绍的游动鼠标法求取此二阶系统的各项性能指标。将它们与例18得出的结果相比较,会发现它们是一致的。

     

    3. 利用MATLAB绘制系统根轨迹

    假设闭环系统中的开环传递函数可以表示为:

     

    则闭环特征方程为:

    特征方程的根随参数K的变化而变化,即为闭环根轨迹。控制系统工具箱中提供了rlocus()函数,可以用来绘制给定系统的根轨迹,它的调用格式有以下几种:

    rlocus(num,den) (32)

    rlocus(num,den,K) (33)

    或者   rlocus(G)     (34)

    rlocus(G,K) (35)

    以上给定命令可以在屏幕上画出根轨迹图,其中G为开环系统G0(s)的对象模型,K为用户自己选择的增益向量。如果用户不给出K向量,则该命令函数会自动选择K向量。如果在函数调用中需要返回参数,则调用格式将引入左端变量。如

    [R,K]=rlocus(G) (36)

    此时屏幕上不显示图形,而生成变量R和K。

    R为根轨迹各分支线上的点构成的复数矩阵,K向量的每一个元素对应于R矩阵中的一行。若需要画出根轨迹,则需要采用以下命令:

       (37)

    plot()函数里引号内的部分用于选择所绘制曲线的类型,详细内容见表1。控制系统工具箱中还有一个rlocfind()函数,该函数允许用户求取根轨迹上指定点处的开环增益值,并将该增益下所有的闭环极点显示出来。这个函数的调用格式为:

    [K,P]=rlocfind(G)  (38)

    这个函数运行后,图形窗口中会出现要求用户使用鼠标定位的提示,用户可以用鼠标左键点击所关心的根轨迹上的点。这样将返回一个K变量,该变量为所选择点对应的开环增益,同时返回的P变量则为该增益下所有的闭环极点位置。此外,该函数还将自动地将该增益下所有的闭环极点直接在根轨迹曲线上显示出来。

    例18 已知系统的开环传递函数模型为:

    利用下面的MATLAB命令可容易地验证出系统的根轨迹如图16所示。

    >> G=tf(1,[conv([1,1],[1,2]),0]);

    rlocus(G);

    grid

    title(?Root_Locus Plot of G(s)=K/[s(s+1)(s+2)]?)

    xlabel(?Real Axis?) % 给图形中的横坐标命名。

    ylabel(?Imag Axis?) % 给图形中的纵坐标命名。

    [K,P]=rlocfind(G)

    用鼠标点击根轨迹上与虚轴相交的点,在命令窗口中可发现如下结果

    select_point=0.0000+1.3921i

    K=

    5.8142

    p=

    -2.29830

    -0.0085+1.3961i

    -0.0085-1.3961i

    所以,要想使此闭环系统稳定,其增益范围应为0<K<5.81。

    参数根轨迹反映了闭环根与开环增益K的关系。我们可以编写下面的程序,通过K的变化,观察对应根处阶跃响应的变化。考虑K=0.1,0.2,…,1,2,…,5,这些增益下闭环系统的阶跃响应曲线。可由以下MATLAB命令得到。

    >> hold off; % 擦掉图形窗口中原有的曲线。

    t=0:0.2:15;

    Y=[ ];

    for K=[0.1:0.1:1,2:5]

    GK=feedback(K*G,1);

    y=step(GK,t);

    Y=[Y,y];

    end

    plot(t,Y)

    对于for循环语句,循环次数由K给出。系统画出的图形如图17所示。可以看出,当K的值增加时,一对主导极点起作用,且响应速度变快。一旦K接近临界K值,振荡加剧,性能变坏。

    4. MATLAB绘图的基本知识

     通过以上实例的应用,我们已初步尝试了MATLAB的绘图功能。MATLAB具有丰富的获取图形输出的程序集。我们已用命令plot()产生线性x-y图形(用命令loglog、semilogx、semilogy或polar取代命令plot,可以产生对数坐标图和极坐标图)。所有这些命令的应用方式都是相似的,它们只是在如何给坐标轴进行分度和如何显示数据上有所差别。

    (1)二维图形绘制

    如果用户将X和Y轴的两组数据分别在向量x和y中存储,且它们的长度相同,则命令

    plot(x,y) (39)

    将画出y值相对于x值的关系图。

    例19 如果想绘制出一个周期内的正弦曲线,则首先应该用t=0:0.01:2*pi(pi是系统自定义的常数,可用help命令显示其定义)命令来产生自变量t;然后由命令y=sin(t)对t向量求出正弦向量y,这样就可以调用plot(t,y)来绘制出所需的正弦曲线,如图18所示。

     

    (2)一幅图上画多条曲线。

    利用具有多个输入变量的plot( )命令,可以在一个绘图窗口上同时绘制多条曲线,命令格式为:

    plot(x1,Y1,x2,Y2,…,xn,Yn) (40)

    x1、Y1、x2、Y2等一系列变量是一些向量对,每一个x-y对都可以用图解表示出来,因而可以在一幅图上画出多条曲线。多重变量的优点是它允许不同长度的向量在同一幅图上显示出来。每一对向量采用不同的线型以示区别。

    另外,在一幅图上叠画一条以上的曲线时,也可以利用hold命令。hold命令可以保持当前的图形,并且防止删除和修改比例尺。因此,后来画出的那条曲线将会重叠在原曲线图上。当再次输入命令hold,会使当前的图形复原。也可以用带参数的hold命令――hold on 和hold off来启动或关闭图形保持。

    (3)图形的线型和颜色

    为了区分多幅图形的重叠表示,MATLAB提供了一些绘图选项,可以用不同的线型或颜色来区分多条曲线,常用选项见下表1

    表1中绘出的各个选项有一些可以并列使用,能够对一条曲线的线型和颜色同时作出规定。例如′--g′表示绿色的短划线。带有选项的曲线绘制命令的调用格式为:

    plot(X1,Y1,S1,X2,Y2,S2,…) (41)

    (4)加进网络线、图形标题、x轴和y轴标记

    一旦在屏幕上显示出图形,就可以依次输入以下相应的命令将网络格线、图形标题、x、y轴标记叠加在图形上。命令格式如下:

    grid(网络线) (42)

    title(′图形标题′) (43)

    xlabel(′x轴标记′)  (44)

    ylabel(′y轴标记′)  (45)

    函数引号内的字符串将被写到图形的坐标轴上或标题位置。

    (5)在图形屏幕上书写文本。

      如果想在图形窗口中书写文字,可以单击按钮,选择屏幕上一点,点击鼠标,在光标处输入文字。另一种输入文字的方法是用text()命令。它可以在屏幕上以(x,y)为坐标的某处书写文字,命令格式如下:

    text(x,y,′text′)  (46)

    例如,利用语句

    text(3,0.45,′sint′)

    将从点(3,0.45)开始,水平的写出"sint"。

    (6)自动绘图算法及手工坐标轴定标

    在MATLAB图形窗口中,图形的横、纵坐标是自动标定的,在另一幅图形画出之前,这幅图形作为现行图将保持不变,但是在另一幅图形画出后,原图形将被删除,坐标轴自动地重新标定。关于瞬态响应曲线、根轨迹、伯德图、奈魁斯特图等的自动绘图算法已经设计出来,它们对于各类系统具有广泛的适用性,但是并非总是理想的。因此,在某些情况下,可能需要放弃绘图命令中的坐标轴自动标定特性,由用户自己设定坐标范围,可以在程序中加入下列语句:

    v=[x-min x-max y-min y-max] (47)

    axis(v) (48)

    式中v是一个四元向量。axis(v)把坐标轴定标建立在规定的范围内。对于对数坐标图,v的元素应为最小值和最大值的常用对数。

    执行axis(v)会把当前的坐标轴标定范围保持到后面的图中,再次键入axis可恢复系统的自动标定特性。

    Axis(′sguare′)能够把图形的范围设定在方形范围内。对于方形长宽比,其斜率为1的直线恰位于45°上,它不会因屏幕的不规则形状而变形。Axis(′normal′)将使长宽比恢复到正常状态。

    5、线性系统的频域分析。

    (1)频率特性函数

    设线性系统传递函数为:

    由下面的MATLAB语句可直接求出G(jw)。

    i=sqrt(-1)     %   求取-1的平方根  (49)

    GW=polyval(num,i*w)./polyval(den,i*w) (50)

    其中(num,den)为系统的传递函数模型。而w为频率点构成的向量,点右除(./)运算符表示操作元素点对点的运算。从数值运算的角度来看,上述算法在系统的极点附近精度不会很理想,甚至出现无穷大值,运算结果是一系列复数返回到变量GW中。

    (2)用MATLAB作奈魁斯特图。

    控制系统工具箱中提供了一个MATLAB函数nyquist( ),该函数可以用来直接求解Nyquist    阵列或绘制奈氏图。当命令中不包含左端返回变量时,nyquist()函数仅在屏幕上产生奈氏图,命令调用格式为:

     nyquist(num,den) (51)

     nyquist(num,den,w) (52)

    或者

     nyquist(G) (53)

     nyquist(G,w) (54)

    该命令将画出下列开环系统传递函数的奈氏曲线:

    如果用户给出频率向量w,则w包含了要分析的以弧度/秒表示的诸频率点。在这些频率点上,将对系统的频率响应进行计算,若没有指定的w向量,则该函数自动选择频率向量进行计算。

    对于式43和45用户不必给定频率向量,系统会自动选择频率向量进行计算。式44和46需要用户给出率向量w。w包含了用户要分析的以弧度/秒表示的诸频率点,MATLAB会自动计算这些点的频率响应。

    当命令中包含了左端的返回变量时,即:

    [re,im,w]=nyquist(G)  (55)

    [re,im,w]=nyquist(G,w) (56)

    函数运行后不在屏幕上产生图形,而是将计算结果返回到矩阵re、im和w中。矩阵re和im分别表示频率响应的实部和虚部,它们都是由向量w中指定的频率点计算得到的。

    在运行结果中,w数列的每一个值分别对应re、im数列的每一个值。

    例20 考虑二阶典型环节:

    试利用MATLAB画出奈氏图。

    利用下面的命令,可以得出系统的奈氏图,如图19所示。

    >> num=[0,0,1];

    den=[1,0.8,1];

    nyquist(num,den)

    % 设置坐标显示范围

    v=[-2,2,-2,2];

    axis(v)

    grid

    (3)用MATLAB作伯德图

    控制系统工具箱里提供的bode()函数可以直接求取、绘制给定线性系统的伯德图。

    当命令不包含左端返回变量时,函数运行后会在屏幕上直接画出伯德图。如果命令表达式的左端含有返回变量,bode()函数计算出的幅值和相角将返回到相应的矩阵中,这时屏幕上不显示频率响应图。命令的调用格式为:

    [mag,phase,w]=bode(num,den)  (57)

    [mag,phase,w]=bode(num,den,w) (58)

    [mag,phase,w]=bode(G) (59)

    [mag,phase,w]=bode(G,w) (60)

    矩阵mag、phase包含系统频率响应的幅值和相角,这些幅值和相角是在用户指定的频率点上计算得到的。用户如果不指定频率w,MATLAB会自动产生w向量,并根据w向量上各点计算幅值和相角。这时的相角是以度来表示的,幅值为增益值,在画伯德图时要转换成分贝值,因为分贝是作幅频图时常用单位。可以由以下命令把幅值转变成分贝:

    magdb=20﹡log10(mag)  (61)

    绘图时的横坐标是以对数分度的。为了指定频率的范围,可采用以下命令格式:

    logspace(d1,d2) (62)

    或  

    logspace(d1,d2,n)     (63)

    公式(62)是在指定频率范围内按对数距离分成50等分的,即在两个十进制数之间产生一个由50个点组成的分量,向量中的点数50是一个默认值。例如要在之间的频区画伯德图,则输入命令时,在此频区自动按对数距离等分成50个频率点,返回到工作空间中,即

    w=logspace(-1,2)

    要对计算点数进行人工设定,则采用公式(63)。例如,要在之间产生100个对数等分点,可输入以下命令:

    w=logspace(0,3,100)

    在画伯德图时,利用以上各式产生的频率向量w,可以很方便地画出希望频率的伯德图。

    由于伯德图是半对数坐标图且幅频图和相频图要同时在一个绘图窗口中绘制,因此,要用到半对数坐标绘图函数和子图命令。

     

    (1)对数坐标绘图函数

     

    利用工作空间中的向量x,y绘图,要调用plot函数,若要绘制对数或半对数坐标图,只需要用相应函数名取代plot即可,其余参数应用与plot完全一致。命令公式有:

     

    semilogx(x,y,s) (64)

     

    上式表示只对x轴进行对数变换,y轴仍为线性坐标。

     

    semilogy(x,y,s)  (65)

     

    上式是y轴取对数变换的半对数坐标图。

     

    Loglog(x,y,s) (66)

    上式是全对数坐标图,即x轴和y 轴均取对数变换。

     

     

    (2)子图命令

     

    MATLAB允许将一个图形窗口分成多个子窗口,分别显示多个图形,这就要用到subplot()函数,其调用格式为:

     

     subplot(m,n,k)

     

    该函数将把一个图形窗口分割成m×n个子绘图区域,m为行数,n为列数,用户可以通过参数k调用各子绘图区域进行操作,子图区域编号为按行从左至右编号。对一个子图进行的图形设置不会影响到其它子图,而且允许各子图具有不同的坐标系。例如,subplot(4,3,6)则表示将窗口分割成4×3个部分。在第6部分上绘制图形。 MATLAB最多允许9×9的分割。

     

    例21 给定单位负反馈系统的开环传递函数为:

    试画出伯德图。

     

    利用以下MATLAB程序,可以直接在屏幕上绘出伯德图如图20。

     

    >> num=10*[1,1];

     

    den=[1,7,0];

     

    bode(num,den)

     

    grid

     

    title(′Bode Diagram of G(s)=10*(s+1)/[s(s+7)] ′)

     

    该程序绘图时的频率范围是自动确定的,从0.01弧度/秒到30弧度/秒,且幅值取分贝值,w轴取对数,图形分成2个子图,均是自动完成的。

    如果希望显示的频率范围窄一点,则程序修改为:

     

    >> num=10*[1,1];

     

    den=[1,7,0];

     

    w=logspace(-1,2,50); % 从0.1至100,取50个点。

     

    [mag, phase, w]=bode(num, den, w);

     

    magdB=20*log10(mag) % 增益值转化为分贝值。

     

     

    % 第一个图画伯德图幅频部分。

     

    subplot(2,1,1);

     

    semilogx(w,magdB, ′-r′) % 用红线画

     

    grid

     

    title(′Bode Diagram of G(s)= 10*(s+1)/[s(s+7)] ′)

     

    xlabel(?Frequency(rad/s)?)

     

    ylabel(?Gain(dB)?)

     

     % 第二个图画伯德图相频部分。

     

    subplot(2,1,2);

     

    semilogx(w,phase, ?-r?);

     

    grid

     

    xlabel(?Frequency(rad/s)?)

     

    ylabel(′Phase(deg) ′)

    修改程序后画出的伯德图如21所示。

     

     

    4. 用MATLEB求取稳定裕量

     

     同前面介绍的求时域响应性能指标类似,由MATLAB里bode()函数绘制的伯德图也可以采用游动鼠标法求取系统的幅值裕量和相位裕量。例如,我们可以在图20的幅频曲线上按住鼠标左键游动鼠标,找出纵坐标(Magnitude)趋近于零的点,从提示框图中读出其频率约为7.25dB。然后在相频曲线上用同样的方法找到横坐标(Frequence)最接近7.25dB的点,可读出其相角为-53.9度,由此可得,此系统的相角裕量为126.1度。幅值裕量的计算方法与此类似。

     

    此外,控制系统工具箱中提供了margin()函数来求取给定线性系统幅值裕量和相位裕量,该函数可以由下面格式来调用:

     

    [Gm, Pm, Wcg, Wcp]=margin(G);  (67)

     

    可以看出,幅值裕量与相位裕量可以由LTI对象G求出,返回的变量对(Gm, Wcg)为幅值裕量的值与相应的相角穿越频率,而(Pm, Wcp)则为相位裕量的值与相应的幅值穿越频率。若得出的裕量为无穷大,则其值为Inf,这时相应的频率值为NaN(表示非数值),Inf和NaN均为MATLAB软件保留的常数。

     

    如果已知系统的频率响应数据,我们还可以由下面的格式调用此函数。

     

    [Gm, Pm, Wcg, Wcp]=margin(mag, phase, w);

     

    其中(mag, phase, w)分别为频率响应的幅值、相位与频率向量。

     

    例22 已知三阶系统开环传递函数为:

    利用下面的MATLAB程序,画出系统的奈氏图,求出相应的幅值裕量和相位裕量,并求出闭环单位阶跃响应曲线。

     

    >> G=tf(3.5,[1,2,3,2]);

     

    subplot(1,2,1);

     

    % 第一个图为奈氏图

     

    nyquist(G);

     

    grid

     

    xlabel('Real Axis')

     

    ylabel('Imag Axis')

     

    % 第二个图为时域响应图

     

    [Gm,Pm,Wcg,Wcp]=margin(G)

    G_c=feedback(G,1);

     

    subplot(1,2,2);

     

    step(G_c)

     

    grid

     

    xlabel(′Time(secs) ′)

     

    ylabel(′Amplitude′)

     

    显示结果为:

     

    ans=1.1429 1.1578

     

    1.7321 1.6542

    画出的图形如图22 所示。由奈氏曲线可以看出,奈氏曲线并不包围(-1,j0)点,故闭环系统是稳定的。由于幅值裕量虽然大于1,但很接近1,故奈氏曲线与实轴的交点离临界点(-1,j0)很近,且相位裕量也只有7.1578o,所以系统尽管稳定,但其性能不会太好。观察闭环阶跃响应图,可以看到波形有较强的振荡。

     

    如果系统的相角裕量γ>45o,我们一般称该系统有较好的相角裕量。

     

    例23 考虑一个新的系统模型,开环传递函数为:

    由下面MATLAB语句可直接求出系统的幅值裕量和相位裕量:

     

    >> G=tf(100*conv([1,5],[1,5]), conv([1,1],[1,1,9]));

     

    [Gm, Pm, Wcg, Wcp]=margin(G)

     

    结果显示 Gm = Pm =

     

    Inf 85.4365

     

     

     

    Wcg = Wcp =

     

    NaN      100.3285

     

    再输入命令

     

    >> G_c=feedback(G,1);

     

    step(G_c)

     

    grid

     

    xlalel(′Time(sec) ′)

     

    ylalel(′Amplitude′)

    可以看出,该系统有无穷大幅值裕量,且相角裕量高达85.4365o。所以系统的闭环响应是较理想的,闭环响应图如图23.

     

     

    5 时间延迟系统的频域响应

     

    (1) 时间延迟系统的传递函数模型

     

    带有延迟环节e-Ts的系统不具有有理函数的标准形式,在MATLAB中,建立这类系统的模型。要由一个属性设置函数set()来实现。该函数的调用格式为:

    set(H, ′属性名′, ′属性值′)       (68) 

    其中H为图形元素的句柄(handle)。在MATLAB中,当对图形元素作进一步操作时,只需对该句柄进行操作即可。例如以下调用格式

    h=plot(x,y)

    G=tf(num,den)

    Plot()函数将返回一个句柄h,tf()函数返回一个句柄G,要想改变句柄h所对应曲线的颜色,则可以调用下面命令:

    Set(h,color,[1,0,0]);

    即对"color"参数进行赋值,将曲线变成红色(由[1,0,0]决定)

    同样,要想对G句柄所对应模型的延迟时间'Td'进行修改,则可调用下面命令

    Set(G, ′Td′,T)

    其中T为延迟时间。由此修改后,模型G就已具有时间延迟特性。

    (2) 时间延迟系统的频域响应

    含有一个延迟环节的系统,其开环频域响应为

    可见,该系统的幅频特性不变,只加大了相位滞后。

    例24 考虑系统的开环模型为:

    当T=1时,我们可以由下面的MATLAB命令绘出系统的奈氏图,如图24所示,此系统对应的时域响应图为25。

    >> G=tf(1,[1, 1]);

    T=[1];

    w=[0, logspace(-3, 1, 100), logspace(1,2,200)];

    set(G,'Td', T); % 延迟1秒。

    nyquist(G,w)

    grid

    figure % 建立一个新的绘图窗口

    step(G)

    4 频域法串联校正的MATLAB方法

    利用MATLAB可以方便的画出Bode图并求出幅值裕量和相角裕量。将MATLAB应用到经典理论的校正方法中,可以方便的校验系统校正前后的性能指标。通过反复试探不同校正参数对应的不同性能指标,能够设计出最佳的校正装置。

    例25 给定系统如图26 所示,试设计一个串联校正装置,使系统满足幅值裕量大于10分贝,相位裕量≥45°

    解:为了满足上述要求,我们试探地采用超前校正装置Gc(s),使系统变为图27的结构。

    我们可以首先用下面地MATLAB语句得出原系统的幅值裕量与相位裕量。

    >> G=tf(100, [0.04, 1, 0]);

    [Gw, Pw, Wcg, Wcp]=margin(G);

    在命令窗口中显示如下结果

    w = Pw =

    Inf 28.0243

     

    Wcg = Wcp =

    Inf 46.9701

     

    可以看出,这个系统有无穷大的幅值裕量,并且其相位裕量幅值穿越频率Wcp=47rad/sec。

    引入一个串联超前校正装置:

    我们可以通过下面的MATLAB语句得出校正前后系统的Bode图如图28,校正前后系统的阶跃响应图如图29。其中、分别为校正前系统的幅值穿越频率、相角裕量、调节时间,分别为校正后系统的幅值穿越频率、相角裕量、调节时间。

    >> G1=tf(100,[0.04,1,0]); % 校正前模型

    G2=tf(100*[0.025,1],conv([0.04,1,0],[0.01,1])) % 校正后模型

    % 画伯德图,校正前用实线,校正后用短划线。

    bode(G1)

    hold

    bode(G2, ′--′)

    % 画时域响应图,校正前用实线,校正后用短划线。

    figure

    G1_c=feedback(G1,1)

    G2_c=feedback(G2,1)

    step(G1_c)

    hold

    step(G2_c, ′--′)

    可以看出,在这样的控制器下,校正后系统的相位裕量由28°增加到48°,调节时间由0.28s减少到0.08s。系统的性能有了明显的提高,满足了设计要求。

     

    5 自动控制理论模拟实验

    《自动控制理论》是一门理论性和实践性很强的专业基础课,前面我们通过计算机仿真,可以方便地研究系统性能,验证理论的正确性,加深对理论知识的理解。本节我们再通过电子模拟实验,学习和掌握系统模拟电路的构成和测试技术,进一步培养学生的实际动手能力和分析、研究问题的能力。

    在控制理论课程中,大部分院校目前拥有的实验设备是电子模拟学习机。这种专为教学实验制造的电子模拟学习机,体积较小,使用方便,实验箱中备有多个运算放大器构成的独立单元,再加上常用的电阻、电容等器件,通过手工连线、可以构成多种特性的被控对象和控制器。

    在基础训练阶段,实验手段采用模拟方法,除了灵活方便之外,还具有以下两个优点:

     

    电子模拟装置可建立较准确的数学模型,从而可以避免实际系统中常碰到的各种复杂因素,使初学者能够根据所学理论知识循序渐进地完成各项实验。

     

     

    在工程实践中,电子模拟方法有一定的实用价值,也是实验室常用的一种实验方法。

     

     当然,对于将来从事实际工作的学生来说,仅仅掌握模拟实验方法还是不够的,应在此基础上进行一些以实际系统为主要设备的实验训练。

     

     

    常用的实验设备和仪器

    以自控理论电子模拟学习机为核心的一组基本实验设备和仪器,共同完成对各种实验对象的模拟和测试任务,传统的测试手段下,构成基本实验必备仪器有以下几种:

     

    电子模拟学习机。

     

    超低频双踪示波器。

     

    超低频信号发生器。

     

    万用表。

    按照被测系统的数学模型,在电子模拟学习机上用基本运放单元模拟出相应的电路模型,然后模拟实验测试。

    随着计算机软、硬件的快速发展,人们越来越多地利用计算机实现的虚拟仪器代替传统仪器。目前,大多数实验室都是用计算机来实现信号的产生、测量与显示、系统的控制及数据处理,使实验过程更加方便,功能更强大

    A/D、D/A卡起模拟信号与数字信号的转换作用,还可产生不同的输入信号(阶跃、三角、正弦等),供实验时选用。使用时用RS232串口电缆将A/D、D/A卡与计算机连接起来。如果配备打印机,则可在实验的同时将实验结果打印输出。由于计算机可以方便地输入数据、观察数据,初学者可以在屏幕的提示下进行实验过程,使学习变的更加轻松。

     

    自控理论的基本实验

     

     

    实验一.  典型环节及阶跃响应测试

     

    实验的基本原理

     

    控制系统的模拟实验是采用复合网络法来模拟各种典型环节,即利用运算放大器和RC组成的不同输入网络和反馈网络组合,模拟出各种典型环节,然后按照给定系统的结构图将这些模拟环节连接起来,便得到了相应的模拟系统。然后将输入信号加到模拟系统的输入端,使系统产生动态响应。这时,可利用计算机或示波器等测试仪器,测量系统的输出,便可观测到系统的动态响应过程,并进行性能指标的测量。若改变系统的某一参数,还可进一步分析研究参数对系统性能的影响。

    在以下的实验过程中,为了更好地检验实验结果,避免过多地出现错误操作,我们将每一环节的正确结果,通过Simulink仿真软件绘出正确的图形,以便于读者检验实验结果的正确性。

     

    时域性能指标测量方法

     

    (1)最大超调量

    利用示波器或计算机显示器上测到的输出波形,读出响应最大值和稳态值所具有的刻度值,代入下式算出超调量:

       (60)

    (2)峰值时间

    根据示波器或显示器上输出的波形最大值,找出这一点在水平方向上所具有的刻度值,即可换算出或读出峰值时间

    (3)调节时间

    同样,读出水平方向上对应输出从零到进入5%或2%误差带时所占的刻度值,即可得到调节时间

     

    实验内容

    (1)比例环节

    模拟线路如图32

    由于输入信号r(t)是从运算放大器的反相输入端输入,所以输出信号和输入信号在相位上正好相反,传递函数中出现负号。为了观测方便,可以从输入端输入负阶跃信号。也可以在输出端连接一个反相器,如图33。

    ,将模拟学习机上手动阶跃信号(或信号发生器置于"手动阶跃")引入环节输入端,观测输出波形,并作记录。(为便于比较,应将输入信号与输出信号同时送入双踪示波器或计算机,两路信号同时在一个坐标系下显示。绘制曲线时,也用这种形式)。

    图34为Simulink 的仿真模块。为便于观察,阶跃信号输入时间设置为1s(系统默认值),后面的各个例题也都适当调整输入时间。增益(Gain)模块的增益放大倍数设为2。另外,也可以用鼠标双击各模块,设置适合其它参数。

    (2)积分环节

    模拟线路如图35 所示。

    ,按上述同样方法观测阶跃响应波形。用Simulink仿真的环节模块图如图36 (a)。由于积分环节附带的增益比较大(积分时间常数T=0.1),Scope(示波器)绘出图形的辐值显示范围并不是很理想。我们可以在Scope的显示图中点击鼠标右键,选Axes properties菜单,在弹出的对话框中设置Y-max属性为100,则输出结果如图36 (b)所示。

    (3)微分环节

    模拟线路图如图37。

    微分时间常数T可通过改变来选取。令,按上述同样步骤进行模拟和测试,观察微分环节的阶跃响应波形。用Simulink仿真的模块图为图38(a),在Scope绘出的图形中调整横纵坐标,得出的时域响应图如图38(b)所示。

     

    (4)惯性环节

    模拟线路如图39。

    (5)振荡环节

    实验二   系统频率特性测量

     

    利用简单仪器测量频率特性,测量精度是较差的,但物理意义明显,波形直观是其特点。本实验通过"李沙育图形"法进行频率特性测试,可以使学生通过实验观测到物理系统的频率响应,并根据测量值算出频率特性的幅值和相角,通过实验可以掌握测试频率特性的基本原理和方法。

     

     

    原理

     

    一个稳定的线性系统,在正弦信号的作用下,它的稳态输出将是一个与输入信号同频率的正弦信号,但其振幅和相位却随输入信号的频率不同而变化,测取不同频率下系统的输出、输入信号的振幅比及相位差,即可求得这个系统的幅频特性和相频特性。

    不断的改变的频率,就可以获得一系列形状不同的李沙育图形。由此求出各个频率所对应的相位差和幅值比,就可获得系统的频率特性。

    幅值比由测量数据按式(69)直接求出;而相位差的具体求法如下:

    显然上式仅当时成立,"李沙育图形"在四个象限的形状如图45 所示,注意箭头方向。

    实际的控制系统一般为相位滞后系统,即频率特性的相频是负的角度,相频特性滞后角按"李沙育图形"法,应按下式确定:

    第四象限:

    (72)  

    (逆时针)

    第三象限:

    (73)

    (逆时针)

    第二象限:

    (74)

    (顺时针)

    第一象限:

    (75)

    (顺时针)

    2 实验内容

     

    (1)给出三阶系统模拟电路如图46 所示

    对应的系统结构图如图47 所示。

    则开环传递函数为:

    接好线路,并将有关测试仪器按图48连接。

    将超低频正弦输入信号输入系统,调节输入信号幅度使被测对象在避免饱和的情况下,输出幅度尽可能大,以便于测量。然后调节示波器Y轴增益(量程范围),使在所取信号幅度下,图像达到满刻度。

    (3)在示波器上测量此时输入信号幅值(用表示),并记录在表3中,此后在输出幅度能有效测出时,一般不再改变输入信号的幅度。

    按表中给定的测点依次改变输入信号频率,测试并记录于表3中。

    为了提高读数精度,对示波器的X,Y轴增益可随时调节,以获得较好的"李沙育图形"。注意在X轴与Y轴增益不一致时,"李沙育图形"的形状可能会有所变化。读数后按相应的增益正确折算出值。另外,在转折频率附近以及穿越频率附近应多测几点。

    3. 实验报告

     

    (1)按被测对象的传递函数,画出模拟电路图

    (2)整理表3中的实验数据,在半对数坐标纸上作出被测系统的对数幅频特性和相频特性。

    (3)采用MATLAB语言,画出被测对象的Bode图,与上图进行比较,特别验证在测试点处的结果是否一致。

    (4)讨论"李沙育图形"法测试频率特性的优缺点,有效频率范围及测试精度。

     

    附:(1)用以下MATLAB命令绘制的开环系统伯德图见图49。

    >> G=tf(10,[conv([0,1,1],[0.001,0.1,1])]);

    Bode(G)

    grid

                                                                                                                                                                                                      图49  开环系统伯德图

    (2)采用以下MATLAB命令绘出的"李沙育图形"见图50

    >> G=tf(10,[conv([0.1,1],[0.001,0.1,1])]);

    %画频率为8的图。

    t=0:0.01:2*pi;

    u=sin(8*t);

    y=lsim(G,u,t);

    plot(u,y)

    %画频率为60的图。

    t=0:0.1:2*pi; % 设置新的时间间隔。

    figure

    u=sin(60*t);

    y=lsim(G,u,t);

    plot(u,y)

    其中,MATLAB函数lsim()是求任意输入下的响应,调用格式与step()函数基本一致,只是输入变量中必须包含任意输入u,向量u表示系统输入在各个时刻的值。

    如果想求取,可输入如下程序

    >> i=length(u);

    while(u(i)>0&u(i)<0)

    i=i-1;

    end

    y0=abs(y(i))

    ym=max(y)

    对频率为8时给定的u和y,可得如下结果:

    y0 = ym =

    8.9149 9.2467

                                                                                                                                                                                   图51(c)Simulink绘出的"李沙育图形"

    (3)应用Simulink仿真工具输出的响应曲线及画出的"李沙育图形"如图51所示。

    在图51(a)所示的编辑窗口中,点击Simulation|Simulation parameters菜单,将Simulation time设为:Start time设为0.0s,Stop time 设为3.0s。双击Sine Wave控件,将其Frequency设为8,Amplitude设为0.5,双击XY Graph控件,将x-min,x-max,y-min, y-max, sample time(采样时间间隔)分别设为-0.5,0.5,-4,4,-1。输出响应波形为图51(b),XY Graph绘出的"李沙育图形"为51(c).

     

    展开全文
  • 带有系统对象和副本功能的载波频率偏移恢复(基于 PLL)。 很容易阅读,方程式可以从 Matlab 文档中找到。
  • 该模块通过为每种算法手动编码matlab函数来展示图像处理的实践 没有内置功能的卷积图像 使用内核 对于内核H_1 对于内核H_2 获取彩色图像的R,G,B,H,S,I,Y,Cb,Cr通道 原始图片 提取图像通道 没有内置功能的...
  • 什么是采样定理(3) 信号的恢复(4) Matlab的Sa函数取样仿真1. 采样信号Sa函数的说明2. 进行参数的说明及相关计算3. 结果的展示4. matlab 代码 (1) 采样的说明 1. 为什么要取样 我们要使用计算机去处理信号。信号都...
     
    

    (1) 采样的说明

    1. 为什么要取样

    • 我们要使用计算机去处理信号。信号都是连续的,在任意一个非空区间内都有无限个值,但是计算机的内存是一个有限值,只能完成有限的数据存储和运算,所以要进行采样和量化等操作,把信号离散成有限个点就可以使用计算机处理了。当信号在计算机中处理完,按照一定的规则恢复成连续的状态就可以了。
    • 注意采样定理和后面 DFT(discrete Fourier transform) 之间的联系。

    2. 什么是取样

    • 取样就是利用取样脉冲序列从连续信号中 抽取离散的样本值
      • 从时域上看 f s ( t ) = f ( t ) × s ( t ) f_s(t) = f(t) \times s(t) fs(t)=f(t)×s(t)
      • 从频域上看 F s ( j ω ) = 1 2 π F ( j ω ) ∗ S ( j ω ) F_s(j\omega) = \displaystyle\frac{1}{2\pi}F(j\omega) * S(j\omega) Fs(jω)=2π1F(jω)S(jω)
    • 冲激取样(理想取样)的例子
      • 可以看到在时域上是通过乘积完成对应离散点的选取,在频域上完成的是信号频谱的周期延拓。

    (2) 采样定理

    1. 为什么要有奈奎斯特频率

    • 首先要明白一件事,使用采样点恢复出原来的信号需要的是进行一个低通滤波,把频域上的低频波形滤出来就可以了。
    • 从上面的图可以看出来,取样在频域中相当于进行了频谱的周期延拓,所以就会出现一个问题,平移距离不够会引起频域波形的重叠,当发生重叠之后就无法完成滤波了,即无法完成信号的恢复了。因此需要对平移的距离有一个限制,也就是采样定理中的奈奎斯特频率。

    2. 什么是采样定理

    • 一个频谱在区间 ( − ω m , ω m ) (-\omega_m,\omega_m) (ωm,ωm) 以外为 0 的带限信号 f ( t ) f(t) f(t),可唯一的由其在均匀间隔 T s [ T s < 2 π / ω m ] T_s [T_s < 2\pi/\omega_m] Ts[Ts<2π/ωm] 上的样值点 f ( n T s ) f(nT_s) f(nTs) 确定。
      • 注意必须是带限信号。像冲激函数这样的就无法取样,因为在频域上的无限意味着在时域信号的存在时间无限趋于 0。
      • 取样频率不能太低,必须 f s > 2 f m f_s > 2f_m fs>2fm 。最低取样频率 f s = 2 f m f_s = 2f_m fs=2fm称为奈奎斯特频率

    (3) 信号的恢复

    • 参量的说明
      • 低通滤波器的截止角频率: ω c \omega_c ωc,从图上明显可以看出需要有 ω m < ω c < ω s − ω m \omega_m<\omega_c<\omega_s-\omega_m ωm<ωc<ωsωm,为方便取 ω c = 0.5 ω s \omega_c = 0.5\omega_s ωc=0.5ωs
      • 采样角频率: ω s \omega_s ωs,注意根据采样定理 ω s > 2 ω m \omega_s > 2\omega_m ωs>2ωm
      • 带限信号的最大角频率: ω m \omega_m ωm
    • 信号恢复的过程是信号采样过程的逆过程。实际上在进行频域乘积滤波的过程中,时域进行了卷积的平移,平移到不同位置的函数叠加就恢复出原始信号。

    (4) Matlab的Sa函数取样仿真

    1. 采样信号Sa函数的说明

    • Matlab 中自带的函数是 sinc 函数,其形式是 s i n ( π t ) π t \displaystyle\frac{sin(\pi t)}{\pi t} πtsin(πt),我们要在仿真中使用的是 Sa 函数,其形式是 s i n ( t ) t \displaystyle\frac{sin(t)}{t} tsin(t),因此 sa = sinc(t/pi)
    • 代码:
      %% 打印出来sa函数
      t = -20:0.001:20;
      L = length(t);
      x = sinc(t / pi);
      plot(t,x,'LineWidth',3);
      xlabel('t');ylabel('Amplitude'); title('Sa(t)')
      
    • 结果:

    2. 进行参数的说明及相关计算

    • 参数说明
      • s a ( t ) sa(t) sa(t) 的傅里叶变换结果是 π g 2 ( ω ) \pi g_2(\omega) πg2(ω),就是一个门宽为 2 的门函数。因此可以知道 ω m = 1 \omega_m = 1 ωm=1
      • 根据奈奎斯特采样定律,这里选取 ω s = 2 ω m \omega_s = 2\omega_m ωs=2ωm ω s = 1.5 ω m \omega_s=1.5\omega_m ωs=1.5ωm ω s = 4 ω m \omega_s=4\omega_m ωs=4ωm。分别模拟临界采样,欠采样和过采样三种情况。相应的选取信号还原时低通滤波器的截止频率 ω c = 0.5 ω s \omega_c = 0.5\omega_s ωc=0.5ωs
    • 这里选取时域的正半轴取样点一共 N 个,下面使用 ∞ \infin 推公式,但是最后要用 N N N
    • 信号取样
      • 冲激取样函数: δ T s ( t ) = ∑ n = − ∞ ∞ δ ( t − n T s ) \delta_{T_s}(t)=\displaystyle\sum_{n=-\infin}^{\infin}\delta(t-nT_s) δTs(t)=n=δ(tnTs)
      • 通过采样的定义可知 f s ( t ) = f ( t ) × s a ( t ) f_s(t) = f(t) \times sa(t) fs(t)=f(t)×sa(t),在matlab中只需要 fs = sinc(t/pi)
    • 信号恢复
      • 采样后的信号在时域上的表达式为 f s ( t ) = f ( t ) ∑ n = − ∞ ∞ δ ( t − n T s ) = ∑ n = − ∞ ∞ δ ( t − n T s ) f ( n T s ) f_s(t)=f(t)\displaystyle\sum_{n=-\infin}^{\infin}\delta(t-nT_s)=\displaystyle\sum_{n=-\infin}^{\infin}\delta(t-nT_s)f(nT_s) fs(t)=f(t)n=δ(tnTs)=n=δ(tnTs)f(nTs)
      • 假设采样后的信号在频域上的表达式为 F s ( j ω ) F_s(j\omega) Fs(jω),并选取低通滤波器
        H ( ω ) = { T s , ∣ ω ∣ ≤ ω c 0 , ∣ ω ∣ > ω c H(\omega)=\begin{cases} T_s ,&|\omega|\leq \omega_c\\ 0, & |\omega|> \omega_c \end{cases} H(ω)={Ts,0,ωωcω>ωc
        可以算出 H ( ω ) H(\omega) H(ω) 在时域上的表达式 h ( t ) = T s ω c π s a ( ω c t ) h(t)=T_s\displaystyle\frac{\omega_c}{\pi}sa(\omega_ct) h(t)=Tsπωcsa(ωct)之所以选取 H ( ω ) H(\omega) H(ω)的放大倍数为 T s T_s Ts 是因为此时 h ( t ) h(t) h(t) 的系数是 1(因为 ω c = 0.5 ω s \omega_c = 0.5\omega_s ωc=0.5ωs)。
      • 根据前面的讨论,让取样后的信号通过低通滤波器相当于频域相乘即 F ( j ω ) = F s ( j ω ) × H ( ω ) F(j\omega) = F_s(j\omega)\times H(\omega) F(jω)=Fs(jω)×H(ω)。同时根据时域和频域的关系, f ( t ) = f s ( t ) ∗ h ( t ) f(t) = f_s(t) * h(t) f(t)=fs(t)h(t)。带入前面的结果可以得到 f ( t ) = T s ω c π ∑ n = − ∞ ∞ f ( n T s ) s a ( ω c ( t − n T s ) ) f(t)=T_s\displaystyle\frac{\omega_c}{\pi}\displaystyle\sum_{n=-\infin}^{\infin}f(nT_s)sa(\omega_c(t-nT_s)) f(t)=Tsπωcn=f(nTs)sa(ωc(tnTs))

    3. 结果的展示

    • 临界取样
    • 过采样(实际上这里有一点不太明白,为什么过采样恢复后信号的误差会比临界采样的大??
    • 欠采样

    4. matlab 代码

    %% matlab 完成Sa信号的采样和恢复
    %% 取样(临界取样)
    % 取样
    figure(1);
    wm = 1; %信号的最大频率
    ws = 2 * wm; %信号的采样频率(根据奈奎斯特频率)
    wc = 0.5 * ws;%滤波器的截止频率
    Ts = 2*pi/ws;%采样间隔
    N = 10;%时域采样点数
    n = -N:N;
    nTs = n * Ts;%采样数据的采样时间
    fs = sinc(nTs/pi);%完成采样
    subplot(311);
    stem(nTs/pi,fs,'LineWidth',3);
    xlabel("nTs");
    ylabel("f(nTs)");
    title("sa(t)的临界取样信号");
    % 还原
    Dt = 0.005;
    t = -15:Dt:15;
    fa = Ts*wc/pi * fs * sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));
    subplot(312);
    plot(t,fa,'LineWidth',3);
    xlabel("t");
    ylabel("f(t)");
    title("由临界取样信号重构sa(t)");
    % 展示误差
    error = abs(fa-sinc(t/pi));
    subplot(313);
    plot(t,error,'LineWidth',3);
    xlabel("t");
    ylabel("error(t)");
    title("重构信号与原信号的误差error(t)");
    %% 取样(过取样)
    % 取样
    figure(2);
    wm = 1; %信号的最大频率
    ws = 4 * wm; %信号的采样频率(根据奈奎斯特频率)
    wc = 0.5 * ws;%滤波器的截止频率
    Ts = 2*pi/ws;%采样间隔
    N = 20;%时域采样点数
    n = -N:N;
    nTs = n * Ts;%采样数据的采样时间
    fs = sinc(nTs/pi);%完成采样
    subplot(311);
    stem(nTs/pi,fs,'LineWidth',3);
    xlabel("nTs");
    ylabel("f(nTs)");
    title("sa(t)的过取样信号");
    % 还原
    Dt = 0.005;
    t = -15:Dt:15;
    fa = fs*Ts*wc/pi * sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));
    subplot(312);
    plot(t,fa,'LineWidth',3);
    xlabel("t");
    ylabel("f(t)");
    title("由过取样信号重构sa(t)");
    % 展示误差
    error = abs(fa-sinc(t/pi));
    subplot(313);
    plot(t,error,'LineWidth',3);
    xlabel("t");
    ylabel("error(t)");
    title("重构信号与原信号的误差error(t)");
    %% 取样(欠取样)
    % 取样
    figure(3);
    wm = 1; %信号的最大频率
    ws = 1.5 * wm; %信号的采样频率(根据奈奎斯特频率)
    wc = 0.5 * ws;%滤波器的截止频率
    Ts = 2*pi/ws;%采样间隔
    N = 7;%时域采样点数
    n = -N:N;
    nTs = n * Ts;%采样数据的采样时间
    fs = sinc(nTs/pi);%完成采样
    subplot(311);
    stem(nTs/pi,fs,'LineWidth',3);
    xlabel("nTs");
    ylabel("f(nTs)");
    title("sa(t)的欠取样信号");
    % 还原
    Dt = 0.005;
    t = -15:Dt:15;
    fa = fs*Ts*wc/pi * sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));
    subplot(312);
    plot(t,fa,'LineWidth',3);
    xlabel("t");
    ylabel("f(t)");
    title("由欠取样信号重构sa(t)");
    % 展示误差
    error = abs(fa-sinc(t/pi));
    subplot(313);
    plot(t,error,'LineWidth',3);
    xlabel("t");
    ylabel("error(t)");
    title("重构信号与原信号的误差error(t)");
    
    展开全文
  • matlab卡方分发函数代码数字记录仪 该项目有助于实施 Henry Lam 教授的论文“通过基于经验分歧的分布稳健优化恢复最佳统计保证”。 代码是用MATLAB编写的。 主要函数是 multifunction.m,它处理不同的情况: KaFlag ...
  • 6.2模糊推理结构FIS6.2.1不使用数据聚类方法从数据生成FIS结构函数genfis1格式fismat=genfis1(data)fismat=genfis1(data,numMFs,inmftype,outmftype)说明genfis1为anfis训练生成一个Sugeno型作为初始条件的FIS结构...

    6.2 模糊推理结构FIS

    6.2.1 不使用数据聚类方法从数据生成FIS结构

    函数 genfis1

    格式 fismat = genfis1(data)

    fismat = genfis1(data,numMFs,inmftype, outmftype)

    说明 genfis1为anfis训练生成一个Sugeno型作为初始条件的FIS结构(初始隶属函数)。genfis1(data,numMFs,inmftype, outmftype)使用对数据的网格分割方法,从训练数据集生成一个FIS结构。Data是训练数据矩阵,除最后一列表示单一输出数据外,它的其它各列表示输入数据。NumMFs是一个向量,它的坐标指定与每一输入相关的隶属函数的数量。如果你想使用每个输入相关的相同数量的隶属函数,那么只须使numMFs成为一个数就足够了。Inmftype是一个字符串数组,它的每行指定与每个输入相关的隶属函数类型。outmftype是一个字符串数组,它的指定与每个输出相关的隶属函数类型

    例6-19

    >>data = [rand(10,1) 10*rand(10,1)-5 rand(10,1)];

    >>numMFs = [3 7];

    >>mfType = str2mat('pimf','trimf');

    >>fismat = genfis1(data,numMFs,mfType);

    >> [x,mf] = plotmf(fismat,'input',1);

    >>subplot(2,1,1), plot(x,mf);

    >>xlabel('input 1 (pimf)');

    >>[x,mf] = plotmf(fismat,'input',2);

    >>subplot(2,1,2), plot(x,mf);

    >>xlabel('input 2 (trimf)');

    结果为图6-21。

    a4c26d1e5885305701be709a3d33442f.png

    图6-21

    6.2.2 使用减法聚类方法从数椐生成FIS结构

    函数 genfis2

    格式 fismat = genfis2(Xin,Xout,radii)

    fismat = genfis2(Xin,Xout,radii,xBounds)

    fismat = genfis2(Xin,Xout,radii,xBounds,options)

    说明 Xin是一个矩阵,它的每一行包含一个数据点的输入值;Xout是一个矩阵,它的每一行包含一个数据点的输出值;randi是一个向量,它指定一个聚类中心在一个数据维上作用的范围,这里假定数据位于一个单位超立方体内:xBounds是一个2×N可选矩阵,它用于指定如何将Xin和Xout中的数据映射到一个超立方体内,这里是数据的维数(行数); options是一个可选向量,它指定的值用于覆盖算法参数的缺省值。

    例6-20

    fismat = genfis2(Xin,Xout,0.5)

    这是使用此函数所需的最小变量数。这里对所有数据维指定0.5的作用范围。

    fismat = genfis2(Xin,Xout,[0.5 0.25 0.3])

    这里假定组合的维数是3。假设Xin有两维、Xout有一维,那么,0.5和0.25是Xin数据维中每一维的作用范围,0.3是Xout数据维的作用范围。

    fismat = genfis2(Xin,Xout,0.5,[-10 -5 0; 10 5 20])

    这里指定了如何将Xin和Xout中的数据规范化为[0 1]区间中的值来进行处理。假设Xin有两维、Xout有一维,那么Xin第一列中的数据是从[-10 +10]比例变换后的值,Xin第二列中的数据是从[-5 +5]比例变换后的值,Xout中的数据是从[0 20]比例变换后的值。

    6.2.3 生成一个FIS输出曲面

    函数 gensurf

    格式 gensurf(fis) %使用前两个输入和第一个输出来生成给定模糊推理系统(fis)的输出曲面

    gensurf(fis,inputs,output) %使用分别由向量input和标量output给定的输入(一个或两个)和输出(只允许一个)来生成一个图形。

    gensurf(fis,inputs,output,grids) %指定X(第一、水平)和Y(第二、垂直)方向的网格数。如果是二元向量,X和Y方向上的网格可以独立设置。

    gensurf(fis,inputs,output,grids,refinput) %用于多于两个的输入,refinput向量的长度与输入相同:

    ·将对应于要显示的输入的refinput项,设置为NaN;

    ·对其它输入的固定值设置为双精度实标量。

    [x,y,z]=gensurf(…) %返回定义输出曲面的变量并且删除自动绘图。

    例6-21

    >>a = readfis('tipper');

    >>gensurf(a)

    结果为图6-22。

    a4c26d1e5885305701be709a3d33442f.png

    图6-22

    6.2.4 将mamdan型FIS转换为Sugeno FIS

    函数 mam2sug

    格式 sug_fis=mam2sug(mam_fis)

    说明 该函数将一个mamdani型FIS结构(不必是单输出)mam_fis转化为一个sugeno型结构sug_fis。返回的sugeno型系统具有常值输出隶属度函数。这些常值由原来mamdani型系统的后件的隶属度函数的面积中心法来确定。前件仍保持不变。

    6.2.5 完成模糊推理计算

    函数 evalfis

    格式 output= evalfis(input,fismat)

    output= evalfis(input,fismat, numPts)

    [output, IRR, ORR, ARR]= evalfis(input,fismat)

    [output, IRR, ORR, ARR]= evalfis(input,fismat, numPts)

    说明 input:指定输入值的一个数或一个矩阵,如果输入是一个M×N矩阵,其中N是输入变量数,那么evalfis使用 input的每一行作为一个输入向量,并且为变量output返回M×L矩阵,该矩阵每一行是一个向量并且L是输出变量数;

    fismat:要计算的一个FIS结构;

    numPts:一个可选变量,它表示在输入或输出范围内的采样点数,在这些点上计算隶属函数,如果 不使用此变量,就使用101点的缺省值。

    Evalfis的值域如下:

    Output:大小为ML的输出矩阵,这里M表示前面指定的输入值的数量,L表示FIS的输出变量数。

    evalfis的可选值域变量只有当input是一个行向量时才计算这些可选值域变量是:

    IRR:通过隶属函数计算的输入变量的结果,这是一个大小为numRulesN的矩阵,这里numRules是规则条数,N是输入变量数。

    ORR:通过隶属函数计算的输出变量的结果,这是一个大小为numPtsnumRulesL的矩阵,这里numRules是规则条数,L是输出变量数,此矩阵的第一组numRules列,对应于第一个输出,第二组numRules 对应于第二个输出,依次类推。

    ARR:对每个输出,在输出值域中,numPts处采样合成值的numPtsL矩阵,当只有一个值域变量调用时,该函数使用由结构fismat指定的模糊推理系统,由标量或矩阵inout指定的输入值计算输出向量output。

    例6-22

    >>fismat = readfis('tipper');

    >>out = evalfis([2 1; 4 9],fismat)

    结果为

    out =

    7.0169

    19.6810

    6.2.6 模糊c均值聚类

    函数 fcm

    格式 [center,U,obj_fcn] = fcm(data,cluster_n)

    说明 对给定的数据集应用模糊c均值聚类方法进行聚类

    data:要聚类的数据集,每行是一个采样数据点;

    cluster_n:聚类中心的个数(大于1)

    center:迭代后得到的聚类中心的矩阵,这里每行给出聚类中心的坐标;

    U:得到的所有点对聚类中心的模糊分类矩阵或隶属度函数矩阵;

    Obj_fcn:迭代过程中,目标函数的值;

    fcm(data,cluster_n,options)使用可选的变量options控制聚类参数。包括停止准则,和/或设置迭代信息显示:

    options(1):分类矩阵U的指数,缺省值是2.0;

    options(2):最大迭代次数,缺省值是100;

    options(3):最小改进量,即迭代停止的误差准则,缺省值是1e-5;

    option(4):迭代过程中显示信息,缺省值是1。

    如果任意一项为NaN,这些选项就使用缺省值;当达到最大迭代次数时,或目标函数两次连续迭代的改进量小于指定的最小改进量,即满足停止误差准则时,聚类过程结束。

    例6-23

    >>data = rand(100, 2);

    >>[center,U,obj_fcn] = fcm(data, 2);

    >>plot(data(:,1), data(:,2),'o');

    >>maxU = max(U);

    >>index1 = find(U(1,:) == maxU);

    >>index2 = find(U(2, :) == maxU);

    >>line(data(index1,1), data(index1, 2), 'linestyle', 'none', 'marker', '*', 'color', 'g');

    >>line(data(index2,1), data(index2, 2), 'linestyle', 'none', 'marker', '*', 'color', 'r');

    结果为图6-23。

    a4c26d1e5885305701be709a3d33442f.png

    6.2.7 模糊均值和减法聚类

    函数 findcluster

    格式 findcluster

    findcluster('file.dat')

    说明 findcluster产生一个GUI上的Method下的下拉式标签,可以实现模糊C均值(fcm)或模糊减法聚类(subtractiv),使用Load Data按钮输入数据,刚进入GUI时,对每种方法的选项都设置为缺省值。

    此工具使用多维数据集,但只显示这些维数中的两维。使用X-axis和Y-axis下的下拉式标签选择你想观察的数据维。例如你有一个五维数据集,按照出现在数据集中的顺序,此工具将数据标记为data_1,data_2,data_3,data_4,data_5, Start将完成聚类,Save Centre将保存聚类中心。

    当使用数据集file.data时,findcluster(file.dat)自动装入数据集,并且只绘制数据集中的前两维。产生GUI后,你仍可以选择要聚类数据的那两维。

    例6-24

    >>findcluster('clusterdemo.dat')

    结果为图6-24。

    6.2.8 绘制一个FIS

    函数 plotfis

    格式 plotfis(fismat)

    说明 此函数显示由fismat指定的一个FIS的高层方框图,输入和它们的隶属函数出现在结构特征图的左边,同时输出和它们的隶属函数出现在结构特征图的右边。

    例6-25

    >>a = readfis('tipper');

    >>plotfis(a)

    结果为图6-25。

    a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

    图6-24图6-25

    6.2.9 绘制给定变量的所有隶属的曲线

    函数 plotmf

    格式 plotmf(fismat,varType,varIndex)

    说明 此函数绘制与给定变量相关的称为fismat的FIS中的所有隶属函数曲线,变量的类型和索引分别由varType ('input' 或'output')和varIndex给出。此函数也可以与MATLAB函数subplot一起使用。

    例6-26

    >>a = readfis('tipper');

    >>plotmf(a,'input',1)

    结果为图6-26。

    a4c26d1e5885305701be709a3d33442f.png

    图6-26

    6.2.10 从磁盘装入一个FIS

    函数 readfis

    格式 fismat = readfis('filename')

    说明 从磁盘上的一个.fis文件(由filename命名)读出一个模糊推理系统,并将产生的FIS装入当前的工作空间中。Fismat = readfis不带输入变量,即没有指定文件名时,使用uigetfile命令打开一个对话框,提示用户指定文件的名称和目录位置。

    例6-27

    >>fismat = readfis('tipper');

    >>getfis(fismat)

    返回结果

    getfis(fismat)

    Name = tipper

    Type = mamdani

    NumInputs = 2

    InLabels =

    service

    food

    NumOutputs = 1

    OutLabels =

    tip

    NumRules = 3

    AndMethod = min

    OrMethod = max

    ImpMethod = min

    AggMethod = max

    DefuzzMethod = centroid

    ans =

    tipper

    6.2.11 从FIS中删除某一隶属函数

    函数 rmmf

    格式 fis = rmmf(fis,'varType',varIndex,'mf',mfIndex)

    说明 从与工作空间FIS结构fis相关的模糊推理系统中删除变量类型为varType,索引为varIndex的隶属函数mfIndex。

    字符串vartype必须是'input'或'output'。

    varIndex是表示变量索引的一个整数,此索引表示列出变量的顺序;

    变量'mf '是表示隶属函数的一个字符串;

    mfIndex是表示隶属函数索引的一个整数,此索引表示列出隶属函数的顺序。

    例6-28

    >>a = newfis('mysys');

    >>a = addvar(a,'input','temperature',[0 100]);

    >>a = addmf(a,'input',1,'cold','trimf',[0 30 60]);

    >>getfis(a,'input',1)

    返回结果

    Name = temperature

    NumMFs = 1

    MFLabels =

    cold

    Range = [0 100]

    ans =

    [ ]

    >>b = rmmf(a,'input',1,'mf',1);

    >>getfis(b,'input',1)

    返回

    Name = temperature

    NumMFs = 0

    MFLabels =

    Range = [0 100]

    ans =

    [ ]

    6.2.12 从FIS中删除变量

    函数 rmvar

    格式 [fis2,errorStr] = rmvar(fis,'varType',varIndex)

    fis2 = rmvar(fis,'varType',varIndex)

    说明 fis2 = rmvar(fis,'varType',varIndex),)从与工作空间FIS结构fis相关的模糊推理系统中删除索引为varIndex的语言变量mfIndex,字符串vartype必须是'input'或'output'。

    varIndex是表示变量索引的一个整数,此索引表示列出变量的顺序。

    [fis2,errorStr] = rmvar(fis,'varType',varIndex) 将任何错误信息返回到字符串errorStr。

    此命令自动更新规则列表以保证列表尺寸与当前变量数保持一致,在删除语言变量之前,你必须从FIS删除任何包含要删除变量的规则,你无法删除在规则列表中正在使用的模糊变量。

    例6-29

    >>a = newfis('mysys');

    >>a = addvar(a,'input','temperature',[0 100]);

    >>getfis(a)

    返回:

    Name = mysys

    Type = mamdani

    NumInputs = 1

    InLabels =

    temperature

    NumOutputs = 0

    OutLabels =

    NumRules = 0

    AndMethod = min

    OrMethod = max

    ImpMethod = min

    AggMethod = max

    DefuzzMethod = centroid

    ans =

    mysys

    >>b = rmvar(a,'input',1);

    >>getfis(b)

    返回:

    Name = mysys

    Type = mamdani

    NumInputs = 0

    InLabels =

    NumOutputs = 0

    OutLabels =

    NumRules = 0

    AndMethod = min

    OrMethod = max

    ImpMethod = min

    AggMethod = max

    DefuzzMethod = centroid

    ans =

    mysys

    6.2.13 设置模糊系统属性

    函数 setfis

    格式 a = setfis(a,'fispropname','newfisprop')

    a = setfis(a,'vartype',varindex,'varpropname','newvarprop')

    a = setfis(a,'vartype',varindex,'mf',mfindex, 'mfpropname','newmfprop');

    说明 可以使用三个、五个或七个输入变量调用setfis命令,使用几个输入变量取决于是否设置整个结构的一个属性,是否设置属于该结构的一个特定变量,还是是否设置属于这些变量之一的一个特定隶属函数。这些变量是:

    a:工作空间中FIS的一个变量名称,

    vartype:表示变量类型的一个字符串:input或output;

    varindex:输入或输出变量的索引;

    mf:调用setfis时,七个变量中的第四个变量所用的字符串,用语指明此变量是一个隶属函数;

    mfindex:属于所选变量的隶属函数的索引;

    fispropname:表示你要设置FIS域属性的一个字符串:name,type,andmethod, ormethod, impmethod,aggmethod,defuzzmethod;

    newfisprop:你要设置的FIS的属性或方法名称的一个字符串;

    varpropname:你要设置的变量域名称的一个字符串:name或range;

    newvarprop:你要设置的变量名称的一个字符串(对name),或变量范围的一个数组(对range),mfpropname—你要设置的隶属函数名称的一个字符串:name,type或params;

    newmfprop:你要设置的隶属函数名称或类型域的一个字符串(对name或type)或者是参数范围的一个数组(对params)。

    例6-30 使用三个变量调用:

    >>a = readfis('tipper');

    >>a2 = setfis(a, 'name', 'eating');

    >>getfis(a2, 'name');

    结果为:

    out =

    eating

    如果使用五个变量,setfis将更新两个变量属性:

    >>a2 = setfis(a,'input',1,'name','help');

    >>getfis(a2,'input',1,'name')

    结果为:

    ans =

    help

    如果使用七个变量,setfis将更新七个隶属函数的任意属性:

    >>a2 = setfis(a,'input',1,'mf',2,'name','wretched');

    >>getfis(a2,'input',1,'mf',2,'name')

    结果为:

    ans =

    wretched

    6.2.14 以分行形式显示FIS结构的所有属性

    函数 showfis

    格式 showfis(fismat)

    说明 以分行方式显示MATLAB工作空间FIS变量fismat,允许你查看结构的每个域的意义和内容。

    例6-31

    >>a = readfis('tipper');

    >>showfis(a)

    返回:

    1. Name tipper

    2. Type mamdani

    3. Inputs/Outputs [2 1]

    4. NumInputMFs [3 2]

    5. NumOutputMFs 3

    6. NumRules 3

    7. AndMethod min

    8. OrMethod max

    9. ImpMethod min

    10. AggMethod max

    11. DefuzzMethod centroid

    12. InLabels service

    13. food

    14. OutLabels tip

    15. InRange [0 10]

    16. [0 10]

    17. OutRange [0 30]

    18. InMFLabels poor

    19. good

    20. excellent

    21. rancid

    22. delicious

    23. OutMFLabels cheap

    24. average

    25. generous

    26. InMFTypes gaussmf

    27. gaussmf

    28. gaussmf

    29. trapmf

    30. trapmf

    31. OutMFTypes trimf

    32. trimf

    33. trimf

    34. InMFParams [1.5 0 0 0]

    35. [1.5 5 0 0]

    36. [1.5 10 0 0]

    37. [0 0 1 3]

    38. [7 9 10 10]

    39. OutMFParams [0 5 10 0]

    40. [10 15 20 0]

    41. [20 25 30 0]

    42. Rule Antecedent [1 1]

    43. [2 0]

    44. [3 2]

    42. Rule Consequent 1

    43. 2

    44. 3

    42. Rule Weigth 1

    43. 1

    44. 1

    42. Rule Connection 2

    43. 1

    44. 2

    6.2.15 完成模糊运算

    函数 fuzarith

    格式 C = fuzarith(X, A, B, operator)

    说明 使用区间算法,C = fuzarith(X, A, B, operator)返回一个模糊集C作为结果,该算法使用由字符串operator表示的函数,并在采样凸模糊集A和B上完成二进制运算;元素A和B由采样值域变量X的凸函数产生;

    A,B和X是相同维数的向量;

    operator是下列串之一:'sum', 'sub', 'prod', and 'div';

    该函数返回的模糊集C是一个与X具有相同长度的列向量

    例6-32

    >>point_n = 101;% this determines MF's resolution

    >>min_x = -20; max_x = 20;% universe is [min_x, max_x]

    >>x = linspace(min_x, max_x, point_n)';

    >>A = trapmf(x, [-10 -2 1 3]);% trapezoidal fuzzy set A

    >>B = gaussmf(x, [2 5]);% Gaussian fuzzy set B

    >>C1 = fuzarith(x, A, B, 'sum');

    >>subplot(2,1,1);

    >>plot(x, A, 'b--', x, B, 'm:', x, C1, 'c');

    >>title('fuzzy addition A+B');

    >>C2 = fuzarith(x, A, B, 'sub');

    >>subplot(2,1,2);

    >>plot(x, A, 'b--', x, B, 'm:', x, C2, 'c');

    >>title('fuzzy subtraction A-B');

    >>C3 = fuzarith(x, A, B, 'prod');

    结果为图6-27。

    a4c26d1e5885305701be709a3d33442f.png

    图6-27

    6.2.16 解析模糊规则

    函数 parsrule

    格式 fis2 = parsrule(fis,txtRuleList)

    fis2 = parsrule(fis,txtRuleList,ruleFormat)

    fis2 = parsrule(fis,txtRuleList,ruleFormat,lang)

    说明 此函数为MATLAB工作空间FIS变量fis解析定义规则(txtRuleList)的文本,并且返回添加了相应规则列表的一个FIS结构。如果原始输入FIS结构fis有任意初始规则,他们将由新结构fis2替换。本函数支持三种不同的规则格式(由ruleFormat指定'verbose' (语言型)、'symbolic' (符号型)、'indexed' (索引型)。缺省格式是'verbose' (语言型)。当使用可选语言变量lang时,规则以语言型格式进行解析,并采用语言变量lang中指定的关键字。语言必须是'english'、'francais'或'deutsch'。英语关键字是if、then、is、AND、OR和NOT。

    例6-33

    >>a = readfis('tipper');

    >>ruleTxt = 'if service is poor then tip is generous';

    >>a2 = parsrule(a,ruleTxt,'verbose');

    >>showrule(a2)

    结果为

    ans =

    1. If (service is poor) then (tip is generous) (1)

    6.2.17 规则编辑器和语法编辑器

    函数 ruleedit

    格式 ruleedit('a')

    ruleedit(a)

    说明 当使用ruleedit('a')调用规则编辑器时,可用于修改存储在文件a.fis中的一个FIS结构的规则。它也可用于检查模糊推理系统使用的规则。为使用编辑器创建规则,你必须首先用FIS编辑器定义要使用的所有输入输出变量,你可以使用列表框和检查框选择输入、输出变量,连接操作和权重来创建新规则。如图所示,用ruleedit('tank')打开规则编辑器并装入tank.fis中存储的所有规则。

    a4c26d1e5885305701be709a3d33442f.png

    图6-28

    菜单项:在规则编辑器GUI上,有一个菜单棒允许你打开相关的GUI工具、打开和保存系统等。File菜单与FIS编辑器上的File菜单功能相同。

    ·Edit菜单项包括:

    Undo 用于恢复最近的改变;

    ·View菜单项包括:

    Edit FIS properties… 调用FIS编辑器;

    Edit membership functions… 调用隶属度函数编辑器;

    Edit rules… 调用规则编辑器;

    View surface… 调用曲面观察器。

    ·Options 菜单项包括:

    Language 用于选择语言:English、Deutsch和Francais;

    Format 用于选择格式

    ·Verbose 使用单词“if”、“then”、“AND”、“OR”等创建实际语句。

    ·Symbolic 用某些符号代替Verbose模式中使用的单词。例如:“if A AND

    B then C”成为“A&B=>C”。

    ·indexed 表示规则如何在FIS结构中存储。

    6.2.18 规则观察器和模糊推理框图

    函数 ruleview

    格式 ruleview('a')

    说明 使用ruleview('a') 调用规则观察器时,将绘制在存储文件a.fis中的一个FIS的模糊推理框图。它用于观察从开始到结束整个蕴含过程。你可以移动对应输入的指示线,然后观察系统重新调节并计算新的输出。如图6-29:ruleview('tank' )

    a4c26d1e5885305701be709a3d33442f.png

    图6-29

    菜单项:在规则编辑器GUI上,有一个菜单棒允许你打开相关的GUI工具、打开和保存系统,等等。File菜单与FIS编辑器上的File菜单功能相同。

    ·View菜单项包括:

    Edit FIS properties… 调用FIS编辑器;

    Edit membership functions… 调用隶属度函数编辑器;

    Edit rules… 调用规则编辑器;

    View surface… 调用曲面观察器。

    ·Options 菜单项包括:

    Rules display format 用于选择显示规则的格式。如果单击模糊推理方框图左边的规则序号,与该序号相关的规则出现在规则观察器底部的状态棒中。

    6.2.19 保存FIS到磁盘上

    函数 writefis

    格式 writefis(fismat)

    writefis(fismat,'filename')

    writefis(fismat,'filename','dialog')

    说明 writefis将一个MATLAB工作空间FIS结构fismat用一个.fis文件形式保存到磁盘上;

    writefis(fismat)产生一个对话框让用户输入文件的名称和存放文件的目录;

    writefis(fismat,'filename')将对应于FIS结构fismat的一个.fis文件写到一个称为filename.fis的磁盘文件中,不使用对话框该文件被保存在当前目录中;

    writefis(fismat,'filename','dialog')创建一个带有提供的缺省名为filename.fis的对话框;

    若扩展名不存在,则只为filename添加.fis扩展名。

    例6-34

    >>a = newfis('tipper');

    >>a = addvar(a,'input','service',[0 10]);

    >>a = addmf(a,'input',1,'poor','gaussmf',[1.5 0]);

    >>a = addmf(a,'input',1,'good','gaussmf',[1.5 5]);

    >>a = addmf(a,'input',1,'excellent','gaussmf',[1.5 10]);

    >>writefis(a,'my_file')

    结果为 ans =

    my_file

    6.2.20 显示FIS的规则

    函数 showrule

    格式 showrule(fis)

    showrule(fis,indexList)

    showrule(fis,indexList,format)

    showrule(fis,indexList,format,Lang)

    说明 此命令用于显示与给定系统相关的规则。

    fis是必须提供的变量,这是一个FIS结构在MATLAB工作空间中的变量名;

    indexList是你要显示的规则向量(可选项);

    format是一个表示返回规则格式的字符串(可选项),showrule可以用三种不同格式的任意一种返回规则:'verbose' (缺省模式,此处English是缺省语言),'symbolic'和'indexed',它们用于隶属度函数的索引引用;

    若要使用第四个参数Lang,则Lang必须是verbose(语言)型的,并且下面这种调用showrule(fis,indexList,format,Lang)使用Lang给定的语言显示规则,它们必须是'english','francais'或'deutsch'。

    例6-35

    >>a = readfis('tipper');

    >>showrule(a,1)

    ans =

    1. If (service is poor) or (food is rancid) then (tip is cheap) (1)

    >>showrule(a,2)

    ans =

    2. If (service is good) then (tip is average) (1)

    >>showrule(a,[3 1],'symbolic')

    ans =

    3. (service==excellent) | (food==delicious) => (tip=generous) (1)

    1. (service==poor) | (food==rancid) => (tip=cheap) (1)

    >>showrule(a,1:3,'indexed')

    ans =

    1 1, 1 (1) : 2

    2 0, 2 (1) : 1

    3 2, 3 (1) : 2

    6.2.21 显示FIS结构的所有属性

    函数 showfis

    格式 showfis(fismat)

    说明 以分行方式显示MATLAB工作空间FIS变量fismat,允许你查看结构的每个域的意义和内容。

    例6-36

    >>a = readfis('tipper');

    >>showfis(a)

    结果为

    1. Name tipper

    2. Type mamdani

    3. Inputs/Outputs [2 1]

    4. NumInputMFs [3 2]

    5. NumOutputMFs 3

    6. NumRules 3

    7. AndMethod min

    8. OrMethod max

    9. ImpMethod min

    10. AggMethod max

    11. DefuzzMethod centroid

    12. InLabels service

    13. food

    14. OutLabels tip

    15. InRange [0 10]

    16. [0 10]

    17. OutRange [0 30]

    18. InMFLabels poor

    19. good

    20. excellent

    21. rancid

    22. delicious

    23. OutMFLabels cheap

    24. average

    25. generous

    26. InMFTypes gaussmf

    27. gaussmf

    28. gaussmf

    29. trapmf

    30. trapmf

    31. OutMFTypes trimf

    32. trimf

    33. trimf

    34. InMFParams [1.5 0 0 0]

    35. [1.5 5 0 0]

    36. [1.5 10 0 0]

    37. [0 0 1 3]

    38. [7 9 10 10]

    39. OutMFParams [0 5 10 0]

    40. [10 15 20 0]

    41. [20 25 30 0]

    42. Rule Antecedent [1 1]

    43. [2 0]

    44. [3 2]

    42. Rule Consequent 1

    43. 2

    44. 3

    42. Rule Weigth 1

    43. 1

    44. 1

    42. Rule Connection 2

    43. 1

    44. 2matlab

    展开全文
  • Matlab 提供了一些基本的低级工具来评估这种形式的混合系统,还有一些重型工具箱,例如http://www.dii.unisi.it/hybrid/toolbox/ 。 此处提供的代码介于这两个级别之间,并充当简单到中等复杂性混合系统的轻量级...
  • Matlab函数参考

    千次阅读 2012-10-19 13:36:45
    一、一般函数命令 十一、稀疏矩阵 二、运算符号与特殊字符 十二、二维图形 三、程序语言设计 十三、三维图形 四、基本矩阵和矩阵操作 十四、特殊图形 五、基本数学函数 十五、图形句柄 ...

    http://www.ilovematlab.cn/thread-13621-2-1.html

    分类总表

    一、一般函数命令十一、稀疏矩阵
    二、运算符号与特殊字符十二、二维图形
    三、程序语言设计十三、三维图形
    四、基本矩阵和矩阵操作十四、特殊图形
    五、基本数学函数十五、图形句柄
    六、特殊函数十六、位函数
    七、矩阵函数与数值代数十七、字符串函数
    八、数据分析和付里叶变换十八、文件输入输出
    九、插值与多项式十九、日期和时间函数
    十、泛函和常微分方程求解二十、数据类型和结构

    一、一般函数命令(General

    1 .常用信息(General information
    help
    联机帮助命令,在MATLAB 命令窗口显示帮助主题(在help 后加函数或命令的特殊字符,可得到具体命令或函数的使用信息)。
    helpwin
    联机帮助命令,在MATLAB 帮助窗口显示函数命令分类表,用鼠标双击某一行,可得某一类所有命令的清单。再用鼠标双击具体命令可得详细帮助。
    helpdesk
    超文本帮助
    demo
    运行MATLAB 的演示程序
    ver
    MATLAB 及其工具箱的版本信息
    whatsnew
    显示手册中未给出的新特性
    Readme
    readme 文件(用于What’snew ),介绍当前版本的MATLAB 的新功能


    2 .工作空间管理(Managing the workspace.
    who
    显示内存中全部工作变量(变量列表)
    whos
    显示工作变量的具体信息(数组维数)显示生与内存的大小
    workspace
    显示工作区的浏览器,图形界面的工作区管理
    clear
    从内存中清除变量和函数.
    pack
    整理工作空间的内存,内存中的变量存入磁盘,再用内存中的连续空间载回这些变量
    load
    从磁盘上将变量(数据)调入工作空间内存
    save
    将工作空间的变量(数据)存盘
    quit
    退出MATLAB (与命令exit 相同)把Matlab占用的内存全部交还系统

    3 .管理命令和函数
    what
    显示当前工作目录下的有关文件
    type
    “type filename 可显示文件名为 filename.m M 文件
    edit
    打开程序编辑器,编写或修改M 文件
    open
    以扩充方式打开文件
    lookfor
    搜索带关键词的M 文件
    which
    确定函数和文件的位置
    pcode
    生成伪代码文件(P 文件)
    inmem
    内存中函数列表
    mex
    编译MEX 函数


    4 .管理和搜索路径
    path
    设置/ 显示MATLAB 路径
    addpath
    添加路径
    rmpath
    消除已设置的路径
    pathtool
    修改路径.


    5 .命令窗口控制(Controlling the command window
    echo
    显示文件中的MATLAB 命令
    more
    命令窗口的分页控制
    diary
    日志命令(保存MATLAB 命令窗口中的文本)
    format
    设置输出格式

    6 .操作系统命令(Operating system commands
    cd
    改变当前工作目录
    copyfile
    拷贝文件
    pwd
    显示当前工作目录的路径
    dir
    工作目录下文件列表
    delete
    删除文件
    getenv
    得到环境变量
    mkdir
    创建目录
    !
    执行操作系统命令 ( 参考 PUNCT).
    dos
    执行 DOS 命令并返回结果
    unix
    执行 UNIX 命令并返回结果
    vms
    执行VMS DCL 命令并返回结果
    web
    打开页面浏览器
    computer
    显示计算机类型和操作系统


    7 .调试M 文件(Debugging M-files
    debug
    列出所有调试命令
    dbstop
    设置跟踪调试断点
    dbclear
    清除跟踪调试断点.
    dbcont
    跟踪调试恢复执行.
    dbdown
    改变局部工作空间内容
    dbstack
    列出函数调用关系.
    dbstatus
    列出所有断点情况.
    dbstep
    跟踪调试单步执行
    dbtype
    列出带有命令行标号.M 文件
    dbup
    改变局部工作空间内容t.
    dbquit
    退出调试
    dbmex
    调试MEX 文件(仅在UNIX 下)



    二、运算符号与特殊字符(OPS


    1、算术运算符号(Arithmetic operators

    +
    矩阵加法。A+B 要求A B 是同型矩阵(A B 其中之一是数除外)
    -
    矩阵减法。A - B 要求A B 是同型矩阵(A B 其中之一是数除外)
    *
    矩阵乘法。A*B 要求A 的列数与B 的行数相等(其中之一是数除外)
    .*
    数组乘法。
    ^
    矩阵方幂运算。
    .^
    数组方幂运算。
    \
    矩阵左除运算,X A\B 是方程 A*X B 解。
    /
    矩阵右除运算,X B/A
    是方程 X*A B 的解。
    .\
    数组左除运算
    ./
    数组右除运算
    kron
    Kronecker 张量积运算

    2 .关系运算符号(Relational operators
    = =

    相等关系
    ~ =

    不等关系
    <

    小于关系
    >

    大于关系
    < =

    小于或大于关系
    > =

    大于或等于关系


    3 .逻辑运算符号(Logical operators
    &
    逻辑运算(and
    |
    逻辑运算(or
    ~
    逻辑运算(not
    any
    当向量X 中有非零元素时any(X) 的值为 1 ,否则为 0
    all
    当向量X 的元素全不为零时all(X) 的值为 1 ,否则为 0

     

    、程序语言设计(lang
    1.控制流

    if
    if 语句(条件执行语句)开始
    else
    IF 语句条件
    elseif
    IF 语句条件
    end
    结束控制语句快命令
    for
    循环语句
    while
    循环语句
    break
    终断循环执行
    switch
    分支表达式.
    case
    分支的情形
    otherwise
    默认的分支情形
    try
    开始一个Try 代码块
    catch
    开始一个catch 代码块.
    return
    返回主调函数的命令


    2.执行函数

    eval
    执行MATLAB 语句构成的字符串
    evalc
    和eval基本相同,除了任何要写入命令窗口的将被捕获然后返回到一个字符数组
    feval
    执行字符串指定的文件
    evalin
    在指定工作区中执行表达式
    builtin
    执行被重载的方法的内建版本.
    assignin
    在指定工作区内赋值
    run
    运行


    3.命令、函数、变量

    script
    MATLAB 脚本
    M 文件.
    function
    新函数
    global
    定义全局变量
    persistent
    定义永久变量
    mfilename
    显示当前M 文件名
    lists
    从数组或结构中分离出多个值
    exist
    检查变量或文件是否已经定义
    isglobal
    判断是否是全局变量
    mlock
    阻止清除M 文件
    munlock
    允许清除M 文件
    mislocked
    如果M 文件不能清除返回真
    precedence
    matlab 里的操作优先级


    4.自变量处理

    nargchk
    不定式
    nargin
    函数中实际输入参数个数检验
    nargout
    函数中实际输出参数个数检验
    varargin
    输入参数列表的变量长度
    varargout
    输出参数列表的变量长度
    inputname
    输入参数名.


    5.信息显示

    error
    显示错误信息并中断函数
    warning
    显示警告信息
    lasterr
    查询上一条错误信息
    lastwarn
    查询上一条警告信息.
    errortrap
    在测试中忽略错误
    disp
    显示矩阵或文本
    display
    显示数组的重载函数
    fprintf
    有格式的向文件写入数据
    参见C
    sprintf
    按照C 语言格式书写字符串


    6.交互输入

    input
    用户输入提示符
    keyboard
    启动键盘管理程序
    pause
    暂停等待用户回答
    uimenu
    创建用户界面菜单.
    uicontrol
    - 建立用户界面控制的函数



    四、基本矩阵和矩阵操作(ELMAT
    1.基本矩阵

    zeros
    “0” 数组
    ones
    “1” 数组
    eye
    单位矩阵
    repmat
    复制排列矩阵repmat(m,n,p) 产生n*p 阶元素为m 的矩阵,repmat(m,n) 产生n 阶方阵
    rand
    均匀分布随机数
    randn
    正态分布随机数
    linspace
    LINSPACE(x1, x2) 产生界于x1 x2 之间的100 个等步长数据点。
    LINSPACE(x1, x2, N) 产生界于x1 x2 之间的N 个等步长数据点。
    logspace
    LOGSPACE(d1, d2) 产生界于10d1 10 d2 之间的50 个对数等步长的数据点。如果 d2 pi ,则数据点为10 d1 之间的数据点。 LOGSPACE(d1, d2, N) 产生 N 个数据点。
    meshgrid
    产生用于三维绘图的 X Y 数组。

    2.基本数据信息

    size
    求矩阵的维数
    length
    求向量维数
    disp
    显示矩阵或文本
    isempty
    判断空矩阵
    isequal
    判断数据相等
    isnumeric
    判断数值数组
    islogical
    判断逻辑数组
    logical
    转换数值为逻辑值



    3.矩阵操作

    reshape
    矩阵的行列重置命令
    diag
    生成对角矩阵命令
    blkdiag
    生成块对角矩阵命令
    tril
    选取矩阵的下三角部分
    triu
    选取矩阵的上三角部分
    fliplr
    将矩阵数据左、右翻转
    flipud
    将矩阵数据上、下翻转
    flipdim
    按指定维数翻转矩阵
    rot90
    将矩阵数据右旋90
    find
    寻找非零元素坐标
    end
    数组最末指标
    sub2ind
    从多个下标获取索引
    ind2sub
    从线性索引获取多个下标.

    4、特殊变量和常数

    ans
    最常用的答案变量,
    eps
    浮点数相对精度
    realmax
    最大正浮点数
    realmin
    最小正浮点数
    pi
    数学常数π≈ 3.1415926535897....
    i, j
    单位虚数
    例如计算n/0(n≠0)
    inf
    无穷大
    NaN
    不定数。例如0/0 inf/inf
    isnan
    判定不定数 为数NaN取1,否则为0
    isinf
    判定无穷大元素
    isfinite
    判定有限大元素
    flops
    浮点操作计数,
    why
    简短回答

     

    5、特殊矩阵

    特殊矩阵
    compan
    多项式的伴随矩阵
    gallery
    Higham 测试矩阵
    hadamard
    哈达马矩阵
    hankel
    汉克矩阵
    hilb
    希尔伯特矩阵
    invhilb
    逆希尔特矩阵
    magic
    幻方矩阵
    pascal
    Pascal 矩阵
    rosser
    经典对称特征值测试矩阵
    toeplitz
    Toeplitz 矩阵
    vander
    范德蒙矩阵
    wilkinson
    Wilkinson's 特征值测试矩阵


    、基本数学函数(ELF
    1.三角函数(Trigonometric.
    sin
    正弦函数
    asin
    反正弦函数
    cos
    余弦函数
    acos
    反余弦函数
    tan
    正切函数
    atan
    反正切函数
    atan2
    四个象限内反正切
    cot
    余切函数
    acot
    反余切函数
    sec
    正割函数
    asec
    反正割函数
    csc
    余割函数
    acsc
    反余割函数
    sinh
    双曲正弦函数
    asinh
    反双曲正弦函数
    cosh
    双曲余弦函数
    acosh
    反双曲余弦函数
    tanh
    双曲正切函数
    atanh
    反双曲正切函数
    sech
    双曲正割函数
    asech
    反双曲正割函数
    csch
    双曲余割函数
    acsch
    反双曲余割函数
    coth
    双曲余切函数
    acoth
    反双曲余切函数
    2.指数函数( Exponential.
    exp

    指数函数
    log

    自然对数函数(以e 为底)
    log10

    常用对数函数( 10 为底)
    log2

    2 为底对数.
    pow2

    2 为底的幂函数
    sqrt

    平方根函数
    nextpow2

    找出下一个2 的指数
      3.复数函数Complex.
    abs
    求模(绝对值)
    angle
    相角
    complex
    根据实部和虚部构造复数
    conj
    求复数共轭
    imag
    求虚部
    real
    求实部
    isreal
    判断实数

    4.舍入孙函数和剩余函数
    fix
    向零方向舍入
    floor
    向负无穷大方向舍入
    ceil
    向正无穷大方程组舍入
    round
    四舍五入函数
    mod
    求余函数,mod(X Y) 的符号与Y 相同
    rem
    求余函数,rem(X Y) 的符号与X 相同
    sign
    符号函数

     

    六、特殊函数(specfun
    1.特殊数学函数
    airy
    Airy 函数
    besselj
    第一类Bessel 函数
    bessely
    第二类Bessel 函数
    besselh
    第三类Bessel 函数 (Hankel 函数).
    besseli
    改进的第一类 Bessel 函数
    besselk
    改进的第二类 Bessel 函数
    beta
    Beta 函数
    betainc
    不完全 beta 函数
    betaln
    beta 函数的对数
    ellipj
    Jacobi 椭圆函数
    ellipke
    完全椭圆积分
    erf
    误差函数
    erfc
    余误差函数
    erfcx
    补充余误差函数
    erfinv
    反误差函数
    expint
    指数积分函数
    gamma
    Gamma 函数
    gammainc
    不完全 gamma 函数
    gammaln
    gamma 函数的对数
    legendre
    联合Legendre 函数
    cross
    向量的叉积

    2.数论函数.
    factor
    自然数的质因数分解。例如,factor(12) 的结果为:2 2 3
    isprime
    判断质数。例如,isprime(4) 的结果为:0 isprime(3) 结果为:1
    primes
    产生质数表。
    gcd
    最大公约数
    lcm
    最小公倍数
    rat
    实数的有理数(连分数)逼近
    rats
    数据的有理数形式输出
    perms
    列出向量元素的全排列
    nchoosek
    N 个元素中选取K 个的组合数
    factorial
    阶乘函数,factorial(N) 计算N!

    3.坐标变换
    cart2sph
    转换直角坐标为球坐标
    cart2pol
    转换直角坐标为极坐标
    pol2cart
    转换极坐标为直角坐标
    sph2cart
    转换球坐标为直角坐标
    hsv2rgb
    转换饱合色值颜色为红、绿、蓝
    rgb2hsv
    转换红、绿、蓝为饱合色值

    、矩阵函数与数值代数(MATFUN
    1.矩阵分析

    norm
    矩阵或向量的范数
    normest
    矩阵的2- 范数估计
    rank
    矩阵的秩
    det
    求行列式
    trace
    矩阵的迹(对角元之和)
    null
    零空间
    orth
    正交化
    rref
    化矩阵为最简行阶梯型
    subspace
    两个子空间的夹角

    线性方程组
    and
    用于线性方程组求解
    inv
    求矩阵的逆命令
    cond
    求矩阵的条件数
    condest
    1- 范数意义的条件数估计
    chol
    矩阵的乔斯基分解命令
    cholinc
    不完全乔斯基分解
    Lu
    基于消元法的矩阵LU 分解
    luinc
    不完全LU 分解
    Qr
    矩阵的正交、三角分解
    lsqnonneg
    非负约束下的线性最小二乘
    pinv
    矩阵伪逆
    lscov
    已知协方差的最小二乘法

        特征值和奇异值
    Eig
    求矩阵特征值和特征向量
    svd
    奇异值分解
    gsvd
    一般的奇异值分解
    eigs
    求稀疏矩阵的少数特征值
    svds
    求稀疏矩阵的少数奇异值
    poly
    特征多项式
    polyeig
    多项式特征值问题
    condeig
    关于特征值的条件数
    hess
    Hessenberg 型式
    Qz
    广义特征值的QZ 分解
    schur
    Schur 分解

         矩阵函数
    expm
    矩阵指数
    logm
    矩阵对数
    sqrtm
    矩阵的平方根
    funm
    一般的矩阵函数计算

    分解功能函数
    qrdelete
    QR 分解中删除列
    qrinsert
    QR 分解中插入列
    rsf2csf
    实对角块变为复对角块
    cdf2rdf
    复对角块变为实对角块
    balance
    用于改善特征值精度的对角变换
    planerot
    Given's 平面旋转变换
    cholupdate
    Cholesky 分解把矩阵分解为上三角矩阵和其转置的乘积
    qrupdate
    rank 1 update to QR factorization.

     

    八、数据分析和付里叶变换(datafun
        1.基本运算

    max
    求向量的最大分量
    min
    求向量的最小分量
    mean
    求向量的平均值
    median
    求向量的中值
    std
    标准差
    var
    方差Variance.
    sort
    按递增排序
    sortrows
    将矩阵各行按递增排序
    sum
    向量元素求和
    prod
    向量元素求积
    hist
    绘直方图命令
    histc
    计算直方图数据
    trapz
    梯形法求数值积分
    cumsum
    向量元素累加
    cumprod
    向量元素累乘
    cumtrapz
    梯形法累积数值积分

    2 .有限差分
    diff
    差分和近似导数
    gradient
    近似梯度
    del2
    离散Laplac 算子

    3 .相关关系
    corrcoef
    相关系数向量间相关性的归一化表示
    cov
    协方差矩阵
    subspace
    子空间夹角

    4 .滤波和卷积
    filter
    一维数字滤波
    filter2
    二维数字滤波
    conv
    卷积和多项式乘法
    conv2
    二维卷积
    convn
    N 维卷积
    deconv
    因式分解与多项式乘法
    detrend
    去除线性部分
    5 .付里叶变换
    fft
    离散付里叶变换
    fft2
    二维离散付里叶变换
    fftn
    N- 维离散付里叶变换
    ifft
    离散付里叶逆变换
    ifft2
    二维离散付里叶逆变换
    ifftn
    N- 维离散付里叶逆变换
    fftshift
    取消谱中心零位,移频
    ifftshift
    fftshift 相反的

    九、插值与多项式(polyfun
       1 .数据插值
    interp1
    一维插值
    interp1q
    快速一维插值
    interpft
    FFT 方法作一维插值
    interp2
    二维插值
    interp3
    三维插值
    interpn
    N 维插值
    griddata
    数据网格化与曲面拟合


    2 .样条插值
    spline
    三次样条插值
    ppval
    计算分段多项式值


    3.几何分析

    delaunay


     

    Delaunay三角剖分.


     

    dsearch


     

    搜索Delaunay 三角剖分近似点


     

    tsearch


     

    搜索相似三角形Closest triangle search.


     

    convhull


     

    曲面外壳.


     

    voronoi


     

    Voronoi .


     

    inpolygon


     

    判断点是否在多边形区域内


     

    rectint


     

    判断矩形是否相交.


     

    polyarea


     

    计算多边形面积


     



    4.多项式函数.

    roots


     

    求多项式零点。


     

    poly


     

    由零点构造多项式


     

    polyval


     

    计算多项式的值.


     

    polyvalm


     

    计算矩阵多项式的值


     

    residue


     

    多项式的部分分式展开


     

    polyfit


     

    数据的多项式拟合命令


     

    polyder


     

    多项式微分(求导数)命令


     

    conv


     

    卷积(多项式乘法)


     

    deconv


     

    多项式除法


     


    十、泛函和常微分方程求解(funfun
       1.求函数极小值点和函数零点

    Fminbnd

    -由一有范围限制的变量找出函数的最小值

    Fminsearch

    - 由几个变量找出函数的最小值

    Fzero

    求一元(非线性)函数的零点(单变量求根)


    2.数值积分

    quad

    低阶方法(simpson公式)计算数值积分值

    quad8

    高阶方法计算数值积分值

    dblquad

    计算二元函数(重积分)数值积分值。



    3.函数绘图

    ezplot

    简单函数绘图命令

    fplot

    函数绘图命令


    4.内嵌函数对象Inline function object.

    inline

    构造内嵌函数命令

    argnames

    显示内嵌函数的自变量名

    formula

    显示内嵌函数的表达式

    char

    将内嵌函数转换为字符串数组


    5.常微分方程求解

    (不能确定是否是刚性常微分方程时,首先用命令 ODE45 ,然后用命令ODE15S.)

    ode45

    微分方程高阶数值解法,基于显式龙格.库达(4,5)法,采用单步算法来计算

    ode23

    微分方程低阶数值解法,这是一个比ode45低阶的方法,基于显式龙格库达(2,3)法

    ode113

    用于更高阶或大的标量计算。采用多步法。

    ode23t

    -用于解决难度适中的问题.

    ode15s


    ode23相同,但要求的精度更高。采用数值差分方法。为多步法

    ode23s

    - 用于解决难度较大的微分方程组。对于系统中存在常量矩阵的情况也有用。采用2阶改进的rosenbrock方法。采用单步法

    ode23tb

    -用于解决难度较大的问题,对于系统中存在常量矩阵的情况也有用.

    odefile

    - ODE file syntax.


    常微分方程数据输出函数

    odeplot

    - 画出解的图形.

    odephas2

    - 画出2D的平面相位图.

    odephas3

    -画出3D的平面相位图.

    odeprint

    - 显示中间结果


    十一、稀疏矩阵(sparfun
    1.基本稀疏矩阵

    speye

    稀疏单位矩阵

    sprand

    均匀分布的稀疏随机矩阵

    sprandn

    正态分布的稀疏随机矩阵

    sprandsym

    对称稀疏随机矩阵

    spdiags

    对角形式(带状)稀疏矩阵

    2.满阵和稀疏矩阵的转换

    sparse

    从常规矩阵转换稀疏矩阵

    full

    由稀疏矩阵转换常规矩阵

    find

    查找非零元素的下标

    spconvert

    由稀疏矩阵外部格式进行转换

    3.稀疏矩阵的操作

    nnz

    非零元素个数

    nonzeros

    求非零元素

    nzmax

    允许的非零元素存储空间

    spones

    1取代稀疏矩阵中的非零元素

    spalloc

    给非零元素定位存储空间

    issparse

    若矩阵为稀疏则为真

    spfun

    应用于非零矩阵,只对矩阵的非零元素进行运算

    spy

    绘制稀疏矩阵结构


    十二、二维图形(graph2d
    1.基本二维绘图命令

    plot

    X-Y坐标的折线绘图

    loglog

    对数-对数坐标图

    semilogx

    半对数(X坐标)图

    semilogy

    半对数(Y坐标)图

    polar

    极坐标绘绘图

    plotyy

    左、右各有Y标签的二维图


    2.坐标及图形窗口控制

    axis

    控制坐标轴比例及外观

    zoom

    图形缩放开关命令

    grid

    为图形加网格线

    box

    箱状坐标轴

    hold

    保持当前图形

    axes

    在任意位置产生坐标轴

    subplot

    分割图形窗,分块绘图


    3.图形注释

    plotedit

    编辑图形注释开关

    legend

    图形标签

    title

    图形标题

    xlabel

    X-轴加标志

    ylabel

    Y-轴加标志

    texlabel

    由字符串产生TEX格式

    text

    文本注释

    gtext

    用鼠标定位文本注释


    4.硬拷贝和打印

    print

    打印图形、打印SIMULINK 系统,或保存图形为M-文件

    printopt

    打印机默认值

    orient

    设置打印纸


    十三、三维图形(graph3d
    1.基本三维绘图命令

    plot3

    三维曲线绘图

    mesh

    三维曲面(网)图

    surf

    三维曲面(色)图

    fill3

    填充三维多边形

    2.颜色控制

    colormap

    颜色表- Color look-up table.

    caxis

    - 伪颜色坐标轴设定

    shading

    -阴影模式

    hidden

    网格图隐含线设置开关

    brighten

    - 使图形色调变亮

    colordef

    - 设置颜色默认值.

    graymon

    - 将图形窗口设置成灰度默认值

    3.坐标轴控制

    axis

    手动地设置 x,y 坐标轴范围

    zoom

    2-D plot.在二为平面上放大缩小图像

    grid

    加网格线,可选值为 'off' 'on'

    subplot

    同时画出数个小图形于同一个窗口之中

    xlim

    x轴上下限,以向量 [xm,xM] 形式给出

    ylim

    y轴上下限,以向量 [ym,xM] 形式给出

    zlim

    z轴上下限,以向量 [ym,xM] 形式给出

    4.图形注释

    title

    加图名,图形标题.

    xlabel

    x轴加说明

    ylabel

    y轴加说明

    zlabel

    z轴加说明


    十四、特殊图形(specgraph

    area

    -填充的曲线图.

    bar

    - 绘制竖直条形图

    barh

    -水平条形图.

    bar3

    -
    3维竖直条形图.

    bar3h

    -水平3维条形图.

    comet

    -动态显示轨迹

    errorbar

    - 误差条形图绘制

    ezplot

    *简单函数绘图命令,二维曲线图.
    有默认自变量区间

    ezpolar

    极坐标作图

    feather

    -羽状图形绘制

    fill

    -填充2-D多边形.

    fplot

    -给定函数绘图

    hist

    直方图绘制

    pareto

    排列图表

    pie

    饼图.

    pie3

    3-D饼图

    plotmatrix

    画矩阵散点图. 如果 X是一个p×m矩阵 Yp×n矩阵,plotmatrix(X,Y)将产生n×m矩阵

    ribbon

    -3D带状显示2D曲线.

    scatter

    用离散的点画图.

    Stem

    离散序列柄状图形绘制

    stairs

    -阶梯图形绘制

     

    十五、 图形句柄

    Figure

    创建图对象

    Uicontrol

    用户界面控制

    Uimenu

    用户界面菜单

    Axes

    创建轴对象

    Line

    画线line(x,y,z)绘制向量x,y,z确定的直线。

    Patch

    填充多边形patch(x,y,z,c) x,y,z定义多边形,c指定颜色

    Image

    显示图像

    Surface

    绘制三维曲面

    Text

    标注文本 text(x,y,’string’) x,y指定字符串的标注位置

    Gcf

    返回当前图形窗口的句柄

    Gca

    返回当前轴的句柄

    Gco

    返回当前对象的句柄

    Delete

    删出句柄对应的对象


    十六、位函数(bitwise functions

    Bitand

    位和

    Bitcmp

    补码

    Bitor

    位或

    Bitmax

    机器的最大符点整数

    Bitset

    给位赋值

    Bitshift

    位移

    Bitget

    获取位

    Bitxor

    位异或



    十七、字符串函数

    Deblank

    去掉字符串末尾的空格

    Findstr

    查找字符串

    Lower

    转换为小写

    Strcmp

    字符串比较

    Strjust

    给出字符串最终结果

    Strcat

    字符串组合

    Strmatch

    查找符合要求的行

    Strncmp

    比较字符串的前n个字符

    Strrep

    字符串查找和替换

    Strtok

    查找某个字符最先出现的位置

    Strvcat

    字符串的竖向组合

    upper

    把字符串转换为大写

    Char

    声称字符数组

    Int2str

    把证书转换为字符串

    Mat2str

    把矩阵转换为字符串

    Num2str

    把数值转换为字符串

    Sprintf

    格式输出字符串

    Sscanf

    格式读入字符串

    Str2num

    字符串转换为数值

    Bin2dec

    把二进制转换为十进制

    Dec2bin

    把十进制转换为二进制

    Dec2hex

    把二进制转换为16进制

    Hex2dec

    16进制转换为十进制

    Hex2num

    16进制转换为双精度

     

    十八、文件输入/输出

    fopen 文件打开
    fclose 文件关闭
    fread 读二进制文件
    fwrite 写二进制文件
    fscanf 从文件中读取格式的数据
    fprintf 写格式的数据
    fgetl 从文件中读行,不返回行结束符
    fgets 从文件中读行,返回行结束符
    sprintf 把格式数据写入字符串
    sscanf 格式读入字符串
    Feof 检验是否为文件结尾
    fseek 设置文件定位器
    ftell 获取文件定位器
    Frewind 返回到文件的开头
    Tempdir 获取临时文件目录
    Tempname 获取临时文件名

    十九、日期和时间函数
    Now 当前日期和时间(数字序列格式)
    Date 当前日期字符串格式
    Clock 当前日期和时间向量格式
    Datenum 转换成数字序列格式
    Datestr 转换成字符串序列格式
    Datevec 转换成向量格式
    Calendar 当月日历表
    Weekday 星期几
    Eomday 指定年和月,给出该月的天数
    Datetick 当以日期为横轴画图时,横轴的标识
    Cputime cpu记时
    Tic,toc 秒表记时开始和结束
    Etime 计算两个时刻的时间差


    二十、数据类型和结构
    Double 双精度数值类型,是最常用的类型
    Char 字符数组,每个字符占16
    Sparse 双精度稀疏矩阵,只存储矩阵中的非零元素
    Cell 细胞数组,数组中的每个元素可为不同类型,不同维数
    Struct 结构数组相当于数据库的纪录,把相关的数据列在一起,成为属性。
    Uint8 8位型无符号整数,最大可表示255,不能进行数学运算
    Isa Isa(变量名,数据类型) 察看变量的数据类型。返回01

    展开全文
  • matlab中inv的函数代码泰勒·简历 通过共形映射恢复泰勒级数的数值工具。 目前仅是初步的MATLAB实验,包括使用Schwarz-Christoffel工具箱处理常规多边形区域的版本。 作者:亚历克斯·巴内特(Alex Barnett)。 19/...
  • 系统加入扰动后偏离了原来的状态,当把干扰去掉后,系统如果能恢复到原来的状态,则说明系统稳定。 二、系统稳定性判断 脉冲信号可以视为典型的扰动信号,假设,系统的脉冲响应为k(t),若 lim⁡t→+∞k(t)=0 \lim_{t...
  • 常用信息(General information)help联机帮助命令,在MATLAB命令窗口显示帮助主题(在help后加函数或命令的特殊字符,可得到具体命令或函数的使用信息)。helpwin联机帮助命令,在MATLAB帮助窗口显示函数命令分类表,用...
  • 地震波观测系统MATLAB仿真报告 本文关键词:地震波,观测,仿真,报告,系统地震波观测系统MATLAB仿真报告 本文简介:地震波观测系统MATLAB仿真课程名称数字信号处理实验项目题目6地震波观测系统MATLAB仿真...
  • 基于图像退化原理建立了线性复原系统,即退化模型,PSF 函数与图像数据卷积模拟出运动模糊的退化图像。由于在模糊图像复原问题中,PSF函数的求解至关重要,因此利用倒频谱估计出模糊图像的模糊方向和模糊范围的像素...
  • 文章目录一,常用命令二,运算符号与特殊字符三,程序语言设计四,...联机帮助命令,在 MATLAB帮助窗口显示函数命令分类表 helpdesk 超文本帮助 demo 运行 MATLAB演示程序 ver MATLAB及其工具箱的版本信息 wha
  • 该博客为《Ubuntu 相关》系列博客的第三篇,该系列博客主要对Ubuntu安装各种软件或者库进行一个纪记录,方便重装系统后快速恢复工作。 这是进项目组以来接受的第一个任务,以此记录实现过程。 此篇紧接上篇实现c++...
  • MATLAB函数做评估

    千次阅读 2014-07-31 10:02:57
    1.使用profile profile,Longman 给出的解释是:a short description that gives importantdetails ...MATLAB中内置了一个叫做profile的工具,来协助评估程序,也就是对程序运行过程的一个shortdescription吧。主要命令
  • matlab 函数零散记录

    千次阅读 2013-09-18 15:05:57
     这里用到的eval函数的功能强大,可以将字符串的内容当做matlab命令来执行(Execute string containing MATLAB expression) rand是0-1的 均匀分布 ,randn是均值为0 方差 为1的 正态分布 clock取系统时间...
  • Matlab中pause函数的使用

    千次阅读 2020-05-22 16:14:00
    pause函数的作用是暂时停止执行MATLAB。 2.语法 pause pause(n) pause(state) oldState = pause(state) (1)pause暂时停止执行 MATLAB并等待用户按下任意键。pause函数还会暂时停止执行 Simulink模型,但...
  • 地震波观测系统MATLAB仿真课程名称 数字信号处理实验项目 题目6 地震波观测系统MATLAB仿真指导教师 赵双琦学 院 光电信息与通信工程 _专 业 电子信息工程班级/学号学生姓名课设时间 2011-12- 28至2012-1-509级...
  • matlab矩阵求和函数代码书呆子 基于稀疏性的神经事件重建和检测 version 0.1 - 这是 NERDS 的第一个存储库(2014 年 11 月 13 日发布) 相关刊物 戴尔,EL; 斯图德,C.; 罗宾逊,JT; Baraniuk, RG,“从嘈杂和...
  • Matlab中textscan函数用法

    千次阅读 2020-12-24 17:32:38
    textscan函数从文本文件或字符串读取格式化数据。 语法 C = textscan(fileID,formatSpec) C = textscan(fileID,formatSpec,N) C = textscan(chr,formatSpec) C = textscan(chr,formatSpec,N) C = textscan(__...
  • MATLAB通信工具箱中有SLMULINK仿真模块和MATLAB函数,形成一个运算函数和仿真模块的集合体,用来进行通信领域的研究、开发、系统设计和仿真。通信工具箱中的模块可供直接使用,并允许修改,使用起来十分方便,因而...
  • matlab图像的恢复

    2021-06-16 17:28:26
    图像的恢复实验目的实验环境相关知识1.imhist2. imnoise3. getrect4. imcrop5. std2 计算图像的标准差6.信噪比的计算方法:图像的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,近似估计图像的...
  • Matlab函数可将二维数据最小二乘拟合到一个圆上。 版本1.3、4-6-16 下载资料库: 返回拟合圆的标量半径R X和Y是直线坐标系中位置数据的一维数组。 X和Y必须具有相同的长度,并且必须至少包含三个非共线的点,以便...
  • Matlab中S-函数的编写

    万次阅读 多人点赞 2017-03-01 12:11:13
    S-函数使Simulink的功能大大扩充,除Mmatlab外,用户还可以用其他语言(C/C++/FORTRAN/Ada)编写实现算法,很强大的同时也对使用者提出了较高的要求。下面是编写S-函数的整个流程: 0 基础知识 (1)Simulink...
  • 加载函数代码到matlab 神经盲运动去模糊 版权所有(C)2016,Ayan Chakrabarti 这是本文所述算法的参考实现: Ayan Chakrabarti ,,过程。 欧洲计算机视觉会议(ECCV)2016的报告。 此实现仅可用于非商业研究用途。...
  • matlab2014函数代码针对不同的学术目的,我们开发了两个演示程序,并在 Github 中共享代码和数据集。 网址是 https://github.com/njuptml/tm-imc。 我们的代码是在window10和matlab2014环境下生成的。 我们的代码有...
  • 1 设计思想 1.1选题主要任务 扩频通信具有很强的抗干扰能力和安全性,最早出现于军事的...利用Matlab工具箱中的Simulink通信仿真模块和Matlab函数进行跳频扩频通信系统进行分析和仿真,在对比存在噪声干扰的情况下,
  • matlab常用函数,命令

    千次阅读 2019-11-28 12:48:55
    执行操作系统命令 1.4窗口控制命令 函数名 功能描述 函数名 功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面 format 设置输出格式 1.5启动与退出命令 函数名 功能描述 函数名 功能描述 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,702
精华内容 1,480
关键字:

恢复系统函数matlab

matlab 订阅