资源描述
附录二 MATLAB语言及其在控制领域中的应用
1 MATLAB语言基础
1.1 使用MATLAB的窗口环境
MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,自1984年由美国 MathWorks 公司推向市场以来,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。
在欧美各高等院校,MATLAB已经成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等课程的基本教学工具,成为大学生、硕士生以及博士生必须掌握的基本技能。
1.1.1 MATLAB语言的显著特点
(1)具有强大的矩阵运算能力
Matrix Laboratory(矩阵实验室),使得矩阵运算非常简单。
(2)是一种演算式语言
MATLAB的基本数据单元是不需要指定维数,也不需要说明数据类型的矩阵(向量和标量为矩阵的特例),且数学表达式和运算规则与通常习惯相同。顾MATLAB语言编程简单,使用方便。
1.1.2 MATLAB命令窗口
(1)启动MATLAB命令窗口
安装好MATLAB之后,双击MATLAB图标,就可进入命令窗口,此时系统处于准备接受命令的状态,可在命令窗口中直接输入命令语句。
MATLAB语句形式:>>变量=表达式
通过等于符号将表达式的值赋予变量。回车后该语句被执行,窗口自动显示语句执行结果。如希望结果不显示,在语句后加一分号“;”。此时结果虽没显示,但它依然被赋值并在MATLAB工作空间中分配了内存。
(2)命令行编辑器
方向键和控制键可以编辑修改已输入的命令
↑:回调上一行命令
↓:回调下一行命令
1.1.3 变量和数值显示格式
(1)变量
(a)变量的命名
变量的名字必须以字母开头(不能超过19个字符),之后可以是任意字母、数字或下划线;变量名称区分字母的大小写;变量中不能包含有标点符号。
(b)变量操作
在命令窗口中,同时存储着输入的命令和创建的所有变量值,它们可以在任何需要的时候被调用。如要察看变量a的值,只需要在命令窗口中输入变量的名称即可。
(c)一些特殊的变量
●ans:结果的缺省变量名
●i、j:虚数单位 ●nargin:函数的输入变量个数
●pi: 圆周率 ●nargout:函数的输出变量个数
●inf:无穷大 ●realmin:最小正实数
●nan:不定量 ●realmax:最大正实数
●eps:计算机的最小数 ●flops:浮点运算数
(2)数值显示格式
任何MATLAB的语句的执行结果都可以在屏幕上显示,同时赋值给指定的变量,没有指定变量时,赋值给一个特殊的变量ans,数据的显示格式由format命令控制。
format只是影响结果的显示,不影响其计算与存储;MATLAB总是以双字长浮点数(双精度)来执行所有的运算。
如果结果为整数,则显示没有小数;如果结果不是整数,则输出形式有:
●format (short):短格式(5位定点数) 99.1253
●format long: 长格式(15位定点数) 99.12345678900000
●format short e:短格式e方式 9.9123e+001
●format long e: 长格式e方式 9.912345678900000e+001
●format bank: 2位十进制 99.12
●format hex: 十六进制格式
1.1.4 简单的数学运算
(1)常用的数学运算符
+,-,*(乘),/(左除),\(右除),^(幂)
在运算式中,MATLAB通常不需要考虑空格;多条命令可以放在一行中,它们之间需要用分号隔开;逗号显示结果,而分号则禁止结果显示。
(2)常用数学函数
abs,sin,cos,tan,asin,acos,atan,sqrt,exp,imag,real,sign,log,log10,conj(共扼复数)等。
1.1.5 MATLAB的工作空间
(1)MATLAB的工作空间包含了一组可以在命令窗口中调整(调用)的参数
●who:显示当前工作空间中所有变量的简单列表
●whos:列出变量的大小、数据格式等详细信息
●clear:清除工作空间中所有的变量
●clear 变量名:清除指定的变量
(2)保存和载入workspace
(a)save filename variables
将变量列表variables所列出的变量保存到磁盘文件filename中。
Variables所表示的变量列表中,不能用逗号,不同的变量之间只能用空格来分隔。
未列出variables时,表示将当前工作空间中所有变量都保持到磁盘文件中。
缺省磁盘文件扩展名为“.mat”,可使用“-”定义不同的存储格式(ASCII、V4等)。
(b)load filename variables
将以前用save命令保存的变量variables从磁盘文件中调入MATLAB工作空间。
用load 命令调入的变量,其名称为用save命令保存时的名称,取值也一样。
Variables所表示的变量列表中,不能用逗号,不同变量之间只能用空格来分隔。
未列出variables时,表示将磁盘文件中的所有变量都调入工作空间。
(3)退出工作空间
Quit 或 exit
1.1.6 使用帮助
(1)help命令,在命令窗口中显示
MATLBA的所有函数都是以逻辑群组方式进行组织的,而MATLAB的目录结构就是以这些群组方式来编排的。
●help matfun:矩阵函数-数值线性代数
●help general:通用命令
●help graphics:通用图形函数
●help elfun:基本的数学函数
●help elmat:基本矩阵和矩阵操作
●help datafun:数据分析和傅立叶变换函数
●help ops:操作符和特殊字符
●help polyfun:多项式和内插函数
●help lang:语言结构和调试
●help strfun:字符串函数
●help control:控制系统工具箱函数
(2)helpwin:帮助窗口
(3)helpdesk:帮助桌面,浏览器模式
(4)lookfor命令:返回包含指定关键词的那些项
(5)demo:打开示例窗口
1.2 MATLAB矩阵运算及多项式处理
1.2.1 矩阵的输入
(1)命令窗口中输入
矩阵的生成不但可使用纯数字(含复数),也可使用变量(或说采用一个表达式)。矩阵的元素直接排列在方括号内,行与行之间用分号隔开,每行内的元素使用空格或逗号隔开。大的矩阵可以用分行输入,回车键代表分号。
>>a=1; b=2; c=3; >>y=[2,4, 5
>>x=[5 b c; a*b a+c c/b] 3 6 8]
x= y=
5.000 2.000 3.000 2 4 5
2.000 4.000 1.500 3 6 8
(2)语句生成
(a)用线性等间距生成向量矩阵(start:step:end)
(b)a=linspace(n1,n2,n)
在线性空间上,行矢量的值从n1到n2,数据个数为n,缺省n为100。
(c)a=logspace(n1,n2,n)
对数空间上,行矢量的值从10n1到10n2,数据个数为n,缺省n为50。该指令为建立对数频域轴坐标提供了方便。
>>a=1:2:10 >>a=linspace(1,10,10) >>a=logspace(1,3,3)
a= a= a=
1 3 5 7 9 1 2 3 4 5 6 7 8 9 10 10 100 1000
(d)一些常用的特殊矩阵
●单位矩阵:eye(m,n); eye(m)
●零矩阵:zeros(m,n); zeros(m)
●一矩阵:ones(m,n); ones(m)
●对角矩阵:对角元素向量V=[a1,a2,…,an],A=diag(V)
●随机矩阵:rand(m,n)产生m×n的均匀分布的随机矩阵
>>eye(2,3) >>zeros(2,3)
ans= ans=
1 0 0 0 0 0
0 1 0 0 0 0
>>ones(2,3) >>V=[5 7 2]; A=diag(V)
ans= A=
1 1 1 5 0 0
1 1 1 0 7 0
0 0 2
1.2.2 矩阵的运算
(1)转置
对于实矩阵用(’)符号或(.’)求转置结果是一样的;然而对于含复数的矩阵,则(’)将同时对复数进行共轭处理,而 (.’)则只是将其排列形式进行转置。
>>b=[1+2i 2-7i]' >>b=[1+2i 2-7i].'
b = b =
1.0000 - 2.0000i 1.0000 + 2.0000i
2.0000 + 7.0000i 2.0000 - 7.0000i
(2)四则运算与幂运算
+ ;- ;* ;\;/ ;^;.* ;.\ ;./;.^
如:a=[1 2;3 4];b=[ 3 5; 5 9];
则a+b=[4 7; 8 13] a-b=[-2 -3; -2 -5]
a*b=[13 23; 29 51] a/b=[-0.50 0.50; 3.50 –1.50]
a\b=[-1 -1;2 3] a^3=[37 54; 81 118]
a.*b=[3 10; 15 36] a./b=[0.33 0.40; 0.60 0.44]
a.\b=[3.00 2.50; 1.67 2.25] a.^3= [1 8; 27 64]
注意:
(a)只有维数相同的矩阵才能进行加减运算。
(b)只有当两个矩阵中前一个矩阵的列数和后一个矩阵的行数相同时,才可以进行乘法运算。a\b运算等效于求a*x=b的解;而a/b等效于求x*b=a的解。只有方阵才可求幂。
(c)点运算是两个维数相同矩阵对应元素之间的运算,有的教材也定义为数组运算。
(3)逆矩阵与行列式计算
●求逆:inv(A);●求行列式:det(A)。要求矩阵必须为方阵。
>>a=[1 2 3; 4 5 6; 2 3 5];
>>b=inv(a) >>det(a)
b = ans =
-2.3333 0.3333 1.0000 -3
2.6667 0.3333 -2.0000
-0.6667 -0.3333 1.0000
1.2.3 矩阵的操作
(1)矩阵下标
MATLAB通过矩阵下标,可以对矩阵进行插入子块、提取子块和重排子块的操作。
●A(m,n):提取第m行,第n列元素
●A(:,n):提取第n列元素
●A(m,:):提取第m行元素
●A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到第n2列的所有元素(提取子块)。
●A(:):得到一个长列矢量,该矢量的元素按矩阵的列进行排列。
矩阵扩展:如果在原矩阵中一个不存在的地址位置上设定一个数(赋值),则该矩阵会自动扩展行列数,并在该位置上添加这个数,而且在其他没有指定的位置补零。
消除子块:如果将矩阵的子块赋值为空矩阵[ ],则相当于消除了相应的矩阵子块。
(2)矩阵的大小
●[m,n]=size(A,x):返回矩阵的行列数m与n,当x=1,则只返回行数m,当x=2,则只返回列数n。
●length(A)=max(size(A)):返回行数或列数的最大值。
●rank(A):求矩阵的秩。
如:a=[1 2 3;3 4 5];
>>[m,n]=size(a) >>length(a)
m = ans =
2 3
n =
3
>>max(size(a)) >>rank(a)
ans = ans =
3 2
1.2.4 多项式处理
(1)多项式的建立与表示方法
在MATLAB中,多项式使用降幂系数的行向量表示,如:多项式表示为:p=[1 -12 0 25 116],使用函数roots可以求出多项式等于0的根,根用列向量表示。若已知多项式等于0的根,函数poly可以求出相应多项式。
如:p=[1 -12 0 25 116];
>>r=roots(p) >>p=poly(r)
r = p =
11.7473 1 -12 -0 25 116
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
(2)多项式的运算
●相乘conv:conv指令可以嵌套使用,如conv(conv(a,b),c)。
●相除deconv
●求多项式的微分多项式polyder
●求多项式函数值polyval(p,n):将值n代入多项式求解
如:a=[1 2 3]; b=[1 2];
>>c=conv(a,b) >>[q,r]=deconv(c,b)
c= q=1 2 3 %商多项式
1 4 7 6 r=0 0 0 %余多项式
>>polyder(a) >>polyval(a,2) %
ans= ans=
2 2 11
1.3 绘图简介
MATLAB提供了丰富的绘图功能。help graph2d可得到所有画二维图形的命令;help graph3d可得到所有画三维图形的命令。下面介绍常用的二维图形命令。
(1)基本绘图命令(plot)
●plot(x1,y1,option1,x2,y2,option2,…)
x1,y1给出的数据分别为x,y轴坐标值,option1为选项参数,以逐点连折线的方式绘制1个二维图形;同时类似地绘制第二个二维图形,……等。
这是plot命令的完全格式,在实际应用中可以根据需要进行简化。比如:
●plot(x,y);plot(x,y,option)
选项参数option定义了图形曲线的颜色、线型及标示符号,它由一对单引号括起来。
例 %plot绘图命令的使用
close all %关闭打开了的所有图形窗口
clc %清屏命令
clear %清除工作空间中所有变量
t=[0:pi/20:8*pi];%定义时间范围
y=sin(t);plot(t,y,'b-.*')
r表示线的颜色为红色,此外有y(黄色),g(绿色),b(蓝色),w(白色),k(黑色),m (紫色),c(青色);
-.表示线型为点划线,此外有-(实线),:(虚线),--(破折线);
*表示标示符号为星号,此外有+(正号),o(圆形字母),x(交叉字母),square(方形),.(点)。
例 clc,clear,t=[0:pi/20:9*pi]; y1=sin(t); y2=cos(t); plot(t,y1,t,y2)
(2)选择图形显示窗口(figure)
●figure(1);figure(2);…;figure(n):打开不同的图形显示窗口,以便绘制不同的图形。
(3)添加栅格(grid)
●grid on:在所画出的图形坐标中加入栅格。
●grid off:除去图形坐标中的栅格。
例 close all,clc,clear
t=[0:pi/20:9*pi];
figure(1) %选择图形显示窗口
plot(t,sin(t),'r:*')
grid on %在所画出的图形坐标中添加栅格,注意用在plot之后
grid off %删除栅格
figure(2),plot(t,cos(t))
grid on
grid off %删除栅格
(4)保持图形显示窗口(hold)
●hold on:把当前图形保持在屏幕上不变,同时允许在这个坐标内绘制另一图形。
●hold off:使新图覆盖旧的图形。
例 close all,clc,clear
t=[0:pi/20:9*pi];
hold on %允许在同一坐标系下绘制不同的图形
plot(t,sin(t),'r:*'),plot(t,cos(t)),plot(t,-cos(t),'k')
grid on %在所画出的图形坐标中添加栅格,注意用在plot之后
hold off %覆盖旧图
plot(t,-sin(t))
(5)设定坐标轴的范围
●axis([xmin xmax ymin ymax])
例 %绘制单位圆
clear,close all,clc
t=[0:0.01:2*pi]; x=sin(t);y=cos(t);plot(x,y)
axis([-1.5 1.5 -1.5 1.5]) %限定x轴和y轴的显示范围
grid on
axis('equal') %将x坐标轴和y坐标轴的单位刻度大小调整为一样
(6)文字标示
●text(x,y,‘字符串’)
在图形窗口的指定坐标位置(x,y)处,标示单引号括起来的字符串。
●gtext(‘字符串’)
利用鼠标在图形的某一位置标示字符串。
●title(‘字符串’)
在所画图形的最上端显示说明该图形标题的字符串。
●xlabel(‘字符串’),ylabel(‘字符串’)
设置x,y坐标轴的名称。
注意:输入特殊的文字需要用反斜杠(\)开头。
(7)区分图形显示窗口中不同的线
●legend(‘字符串1’,‘字符串2’,…,‘字符串n’)
在屏幕上开启一个小视窗,然后依据绘图命令的先后次序,用对应的字符串区分图形上的线。
例 %图形文字标示命令的使用
clear,close all,clc
t=[0:pi/20:5*pi];plot(t,sin(t),'r:*'),axis([0 5*pi -1.5 1.5 ])
xlabel('t(deg)'),ylabel('magnitude') %给x轴和y轴命名
title('sine wave from zero to 5\pi') %给图形加标题
text(pi/2,sin(pi/2),'\bullet\leftarrow The sin(t) at t=2')
%在指定位置创建说明性文字
%输入特定的字符\pi,\alpha,\beta,\leftarrow,\rightarrow,\bullet(点号)
hold on,plot(t,cos(t)),legend('sin(t)','cos(t)')%区分图形上不同的曲线
gtext('文字标示命令举例') %用鼠标在特定位置输入文字
hold off
(8)分割图形显示窗口
●subplot(mnk):分割图形显示窗口
m:上下分割个数,n:左右分割个数,k:子图编号
例 %图形分割命令的使用
clear,close all,clc,t=[0:pi/20:5*pi];figure(1)
subplot(321),plot(t,sin(t)),axis([0 16 -1.5 1.5])
xlabel('t(deg)'),ylabel('magnitude'),grid on,title('sin(t)')
subplot(322),plot(t,-sin(t)),axis([0 16 -1.5 1.5])
xlabel('t(deg)'),ylabel('magnitude'),grid on,title('-sin(t)')
subplot(323),plot(t,cos(t)),axis([0 16 -1.5 1.5])
xlabel('t(deg)'),ylabel('magnitude'),grid on,title('cos(t)')
subplot(324),plot(t,-cos(t)),axis([0 16 -1.5 1.5])
xlabel('t(deg)'),ylabel('magnitude'),grid on,title('-cos(t)')
subplot(325),subplot(326)
(9)绘制半对数坐标图形
●semilogx:绘制以x轴为对数坐标(以10为底),y轴为线性坐标的半对数坐标图形。
●semilogy:绘制以y轴为对数坐标(以10为底),x轴为线性坐标的半对数坐标图形。
例 %半对数坐标图形与线性坐标图形的比较
clear,close,clc,x=0:0.1:1;y=10.^x;
subplot(211),semilogy(x,y)
title('semilogarithmic scales gragh'),grid on
subplot(212),plot(x,y)
title('linear scales graph'),grid on
补充说明:对于图形的属性编辑同样可以通过在图形窗口上直接进行,但图形窗口关闭之后编辑结果不会保存。
1.4 程序设计入门
1.4.1 MATLBA程序的基本设计原则
(1)%后面的内容是程序的注解,要善于运用注解使程序更具可读性。
(2)养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其他变量对程序运行的影响。但注意在子程序中不要用clear。
(3)参数值要集中放在程序的开始部分,以便维护。要充分利用MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。
(4)input指令可以用来输入一些临时的数据;而对于大量参数,则通过建立一个存储参数的子程序,在主程序中用子程序的名称来调用。
(5)程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作。
(6)充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执行),并利用其他工具箱或图形用户界面(GUI)的设计技巧,将设计结果集成到一起。
(7)设置好MATLAB的工作路径,以便程序运行。
(8)MATLAB程序的基本组成结构
%说明
清除命令:清除workspace中的变量和图形(clear,close)
定义变量:包括全局变量的声明及参数值的设定
逐行执行命令:指MATLAB提供的运算指令或工具箱提供的专用命令
… … …
控制循环
逐行执行命令 循环:包含for,if then,switch,while等语句
… … …
end
绘图命令:将运算结果绘制出来
当然更复杂程序还需要调用子程序,或与simulink以及其他应用程序结合起来。
1.4.2 M文件的编辑及MATLAB工作路径的设置
进入MATLAB的Editor/Debugger窗口来编辑程序
在编辑环境中,文字的不同颜色显示表明文字的不同属性:绿色:注解;黑色:程序主体;红色:属性值的设定;蓝色:控制流程。
在运行程序之前,必须设置好MATLAB的工作路径,使得所要运行的程序及运行程序所需要的其他文件处在当前目录之下,只有这样,才可以使程序得以正常运行。否则可能导致无法读取某些系统文件或数据,从而程序无法执行。
通过cd指令在命令窗口中可以更改、显示当前工作路径。
通过路径浏览器(path browser)也可以进行设置。
1.4.3 MATLAB的程序类型
MATLAB的程序类型有三种,一种是在命令窗口下执行的脚本M文件;另外一种是可以存取的M文件,也即程序文件;最后一种是函数(function)文件。
(1)脚本M文件
在命令窗口中输入并执行,所用的变量要在工作空间中获取,不需要输入输出参数的调用,退出MATLAB后就释放。
(2)程序文件
以.m格式进行存取,包含一连串的MATLAB指令和必要的注解。需要在工作空间中创建并获取变量,也就是说处理的数据为命令窗口中的数据,没有输入参数,也不会返回参数。
程序运行时只需在工作空间中键入其名称即可。
(3)函数文件
与在命令窗口中输入命令一样,函数接受输入参数,然后执行并输出结果。用help命令可以显示它的注释说明。
具有标准的基本结构:
(a)函数定义行(关键字function)
function[out1,out2,..]=filename(in1,in2,..)
输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保留变量给出。
(b)第一行帮助行,即H1行
以(%)开头,作为lookfor指令搜索的行。
(c)函数体说明及有关注解
以(%)开头,用以说明函数的作用及有关内容。如果不希望显示某段信息,可在它的前面加空行。
(d)函数体语句
函数体内,除在function语句中直接引用的返回和输入变量以外,所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量。
1.4.4 声明子程序(函数程序)变量
(1)子程序与主程序之间的数据通过参数进行传递,子程序应用主程序传递来的参数进行计算后,将结果返回主程序。
例 %主程序exp1.m %子程序sumhe.m
a=input('please input value of a='); function result=sumhe(a,b)
b=input('please input value of b='); result=sum(a:b);
c=sumhe(a,b)
在此例中,主程序exp1.m设定了两个参数a和b来调用子程序sumhe.m(为一个函数文件),所以执行主程序时,子程序就会调用主程序传递过来的a和b值进行计算,再将结果返回主程序。
(2)如果一个函数内的变量没有特别声明,那么这个变量只在函数内部使用,即为局部变量。如果两个或多个函数共用一个变量(或者说在子程序中也要用到主程序中的变量,注意不是参数),那么可以用global来将它声明为全局变量。
全局变量的使用可以减少参数传递,合理利用全局变量可以提高程序执行的效率。
例 %主程序exp2.m %子程序prods.m
global a %声明变量a为全局变量 function result=prods(x)
x=1:100; global a
a=3; result=a*sum(x); %声明了与主程序
c=prods(x) %一样的全局变量a,以便在子程序中
%可以使用主程序中定义的变量
1.4.5 字符串命令
字符串要用单引号并用括号括在里面。如:
>>disp(‘text string’) %disp字符串显示命令
text string
单引号里边的字符串可作为矢量或矩阵的元素。使用disp命令或输入变量名就可以显示它们表示的字符串。如:
>>a=['this is a';'text string']
??? All rows in the bracketed expression must have the same number of columns.(元素1含9个字符,包括空格;元素2含有11个字符;因此只要在元素1中加入2个空格即可解决问题)
>>aa=['this is a ';'text string'] >>disp(aa)
aa = this is a
this is a text string
text string
1.4.6 常用的编程命令
●pause:停止m文件的执行直至有键按下。pause(n)将使程序暂停n秒。
●echo on/off:控制是否在屏幕上显示程序内容。
●keyboard:停止程序执行,把控制权交给键盘。输入return并回车后继续程序执行
●x=input(‘prompt’):把输入字符串作为提示符,等待使用者输入响应后赋值到x。
1.4.7 关系与逻辑运算符
MATLAB的运算符有三种类型:算术运算符、关系运算符、逻辑运算符。它们的处理顺序依次为算术运算符、关系运算符、逻辑运算符。前面已经介绍了算术运算符,这里着重介绍后两种运算符。
(1)关系运算符
如:A=[1 2 -1 -5]; B=[0 2 3 1];
< 小于 A<B ans=[0 0 1 1] A<1 ans=[0 0 1 1]
> 大于 A>B ans=[1 0 0 0] A>1 ans=[0 1 0 0]
<= 小于等于 A<=B ans=[0 1 1 1]
>= 大于等于 A>=B ans=[1 1 0 0]
== 等于 A=B ans=[0 1 0 0] A=1 ans=[1 0 0 0]
~= 不等于 A~=B ans=[1 0 1 1] A~=1 ans=[0 1 1 1]
(2)逻辑运算符
注意:在处理逻辑运算时,运算元只有两个值即0和1,所以如果指定的数为0,MATLAB认为其为0,而任何数不等于0,则认为是1。
如:A=[5 -4 0 -0.5];B=[0 1 0 9];
& 与 A&B=[0 1 0 1] A&1=[1 1 0 1]
| 或 A|B=[1 1 0 1] A|1=[1 1 1 1]
~ 非 ~A=[0 0 1 0] ~1=0
1.4.8 程序流程控制
(1)for循环语句
for 循环变量=起始值:步长:终止值
循环体
end
步长缺省值为1,可以在正实数或负实数范围内任意指定。对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。循环结构可以嵌套使用。书写格式不必太过于拘泥,在Editor编辑器中会自动进行处理。
(2)while循环语句
while 表达式
循环体
end
若表达式为真,则执行循环体的内容,执行后再判断表达式是否为真,若不为真,则跳出循环体,向下继续执行。
While循环和for循环的区别在于,while循环结构的循环体被执行的次数不是确定的,而for结构中循环体的执行次数是确定的。
(3)if,else,elseif语句
(a)if 逻辑表达式
执行语句
end
当逻辑表达式的值为真时,执行该结构中的执行语句,执行完之后继续向下进行;若为假,则跳过结构中的内容,向下执行。
(b)if 逻辑表达式
执行语句1
else
执行语句2
end
如果逻辑表达式的值为真,则执行语句1,然后跳过语句2,向下执行;如果为假,则执行语句2,然后向下执行。
(c)if 逻辑表达式1
执行语句1
elseif 逻辑表达式2
执行语句2
…
end
如果逻辑表达式1的值为真,则执行语句1;如果为假,则判断逻辑表达式2,如果为真,则执行语句2,否则向下执行。
(4)switch语句
switch 表达式(%可以是标量或字符串)
case 值1
语句1
case 值2
语句2
…
otherwise
语句3
end
表达式的值和哪种情况(case)的值相同,就执行哪种情况中的语句,如果都不同,则执行otherwise中的语句。格式中也可以不包括otherwise,这时如果表达式的值与列出的各种情况都不相同,则继续向下执行。
2 控制系统的数学描述与分析
2.1 控制系统的数学模型
在线性系统理论中,一般常用的数学模型形式有:传递函数模型(系统的外部模型)、状态方程模型(系统的内部模型)、零极点增益模型和部分分式模型等。这些模型之间都有着内在的联系,可以相互进行转换。
2.1.1 连续系统的传递函数模型
连续系统的传递函数如下:
对线性定常系统,式中s的系数均为常数,且a1不等于零,这时系统在MATLAB中可以方便地由分子和分母系数构成的两个向量唯一地确定出来:
num=[b1,b2,…,bm,bm+1];den=[a1,a2,…,an,an+1] (注意:
展开阅读全文