You are on page 1of 71

《控制系统仿真与CAD》

实验指导书

徐少川

2006 年 10 月
前言
控制系统仿真实验指导书中总共共十个实
验,希望同学课前认真预习,独立完成实验。

I
目 录
实验一 MATLAB环境的熟悉与基本运算 .....................................................1

实验二 基本符号运算的使用...........................................................................8

实验三 MATLAB语言的程序设计 ...............................................................14

实验四 MATLAB的图形绘制 .......................................................................18

实验五 采用SIMULINK的系统仿真 ............................................................23

实验六 S 函数的建立与应用 ........................................................................31

实验七 控制系统的频域与时域分析.............................................................39

实验八 控制系统PID校正器设计法..............................................................43

实验九 控制系统工具箱的使用.....................................................................45

实验十 图形用户界面设计.............................................................................48

附 录 ..............................................................................................................55

II
实验一 MATLAB 环境的熟悉与基本运算
一、实验目的:

1. 熟悉 MATLAB 开发环境
2.掌握矩阵、变量、表达式的各种基本运算
二、实验基本知识:

1.熟悉 MATLAB 环境:


MATLAB 桌面和命令窗口、命令历史窗口、帮助信息浏览器、工作空
间浏览器、文件和搜索路径浏览器。
2.掌握 MATLAB 常用命令
clc 清除命令窗口中内容
clear 清除工作空间中变量
help 对所选函数的功能、调用格式及相关函数给出说明
lookfor 查找具有某种功能的函数但却不知道该函数的准确名称
3.MATLAB 变量与运算符
变量命名规则如下:
(1) 变量名可以由英语字母、数字和下划线组成
(2) 变量名应以英文字母开头
(3) 长度不大于 31 个
(4) 区分大小写
MATLAB 中设置了一些特殊的变量与常量,列于下表。

表 1 MATLAB 的特殊变量与常量
变量名 功能说明 变量名 功能说明
ANS 默认变量名,以应 realmin 最小的正实数
答最近一次操作运
算结果
i或j 虚数单位 INF(inf) 无穷大
pi 圆周率 NAN(nan) 不定值(0/0)
eps 浮点数的相对误差 nargin 函数实际输入参数个数
realmax 最大的正实数 nargout 函数实际输出参数个数

MATLAB 运算符,通过下面几个表来说明 MATLAB 的各种常用运算符

1
表 2 MATLAB 算术运算符
操作符 功能说明 操作符 功能说明
+ 加 \ 矩阵左除
- 减 .\ 数组左除
* 矩阵乘 / 矩阵右除
.* 数组乘 ./ 数组右除
^ 矩阵乘方 ' 矩阵转置
.^ 数组乘方 .' 数组转置

表 3 MATLAB 关系运算符
操作符 功能说明
== 等于
~= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

表 4 MATLAB 逻辑运算符
逻辑运算符 逻辑运算 说明
& And 逻辑与
| Or 逻辑或
~ Not 逻辑非
Xor 逻辑异或

表 5 MATLAB 特殊运算
符号 功能说明示例 符号 功能说明示例
: 1:1:4;1:2:11 .
; 分隔行 ..
, 分隔列 …
() % 注释
[] 构成向量、矩阵 ! 调用操作系统
命令
{} 构成单元数组 = 用于赋值

2
4.MATLAB 的一维、二维数组的寻访
表 6 子数组访问与赋值常用的相关指令格式
指令格式 指令功能
A(r,c) 数组 A 中 r 指定行、c 指定列之元素组成的子数组
A(r,:) 数组 A 中 r 指定行对应的所有列之元素组成的子数组
A(:,c) 数组 A 中 c 指定列对应的所有行之元素组成的子数组
A(:) 数组 A 中各列元素首尾相连组成的“一维长列”子数组
A(i) "一维长列"子数组中的第 i 个元素
A(r,c)=Sa 数组 A 中 r 指定行、c 指定列之元素组成的子数组的赋值
A(:)=D(:) 数组全元素赋值,保持 A 的行宽、列长不变,A、D 两组元素总合应相同

5.MATLAB 的基本运算

表 7 两种运算指令形式和实质内涵的异同表
数组运算 矩阵运算
指令 含义 指令 含义
A.' 非共轭转置 A' 共轭转置
A=s 把标量 s 赋给 A 的每个元素
s+B 标量 s 分别与 B 元素之和
s-B,B-s 标量 s 分别与 B 元素之差
s.*A 标量 s 分别与 A 元素之积 s*A 标量 s 分别与 A 每个元
素之积
s./B,B.\s 标量 s 分别被 B 的元素除 S*inv(B) B 阵的逆乘 s
A.^n A 的每个元素自乘 n 次 A^n A 阵为方阵,自乘 n 次
A.^p 对 A 各元素分别求非整数幂 A^p 方阵 A 的非整数乘方
A+B 对应元素相加 A+B 矩阵相加
A-B 对应元素相减 A-B 矩阵相减
A.*B 对应元素相乘 A*B 内维相同矩阵相乘
A./B A 的元素别 B 的对应元素除 A/B A 右除 B
B.\A 与上相同 B\A A 左除 B
exp(A) 以自然数 e 为底,分别以 A 的元素为 expm(A) A 的矩阵指数函数
指数,求幂
log(A) 对 A 的各元素求对数 logm(A) A 的矩阵对数函数
sqrt(A) 对 A 的各元素求平方根 sqrtm(A) A 的矩阵平方根函数

3
6.MATLAB 的常用函数
表 8 标准数组生成函数
指令 含义 指令 含义
diag 产生对角形数组(对高维不适用) rand 产生均匀分布随机数组
eye 产生单位数组(对高维不适用) randn 产生正态分布随机数组
magic 产生魔方数组(对高维不适用) zeros 产生全 0 数组
ones 产生全 1 数组 size() 返回指定矩阵的行数和列数

表 9 数组操作函数
指令 含义
diag 提取对角线元素,或生成对角阵
flipud 以数组“水平中线”为对称轴,交换上下对称位置上的数组元素
fliplr 以数组“垂直中线”为对称轴,交换左右对称位置上的数组元素
reshape 在总元素数不变的前提下,改变数组的“行数、列数”
rot90 矩阵逆时针旋转 90 度
det 方阵的行列式值
rank 矩阵的秩

三、实验内容
1、 新建一个文件夹(自己的名字命名,在机器的最后一个盘符)
2、 启动 MATLAB6.5,将该文件夹添加到 MATLAB 路径管理器中。
方法如下:

4
3、 保存,关闭对话框
4、 学习使用 help 命令,例如在命令窗口输入 help eye,然后根据帮
助说明,学习使用指令 eye(其它不会用的指令,依照此方法类推)
5、 学习使用 clc、clear,观察 command window、command history 和
workspace 等窗口的变化结果。
6、 初步程序的编写练习,新建 M-file,保存(自己设定文件名,例如
exerc1、exerc2、 exerc3……),学习使用 MATLAB 的基本运算符、
数组寻访指令、标准数组生成函数和数组操作函数。
注意:每一次 M-file 的修改后,都要存盘。

练习 A:
(1) help rand,然后随机生成一个 2×6 的数组,观察 command
window、command history 和 workspace 等窗口的变化结

(2) 学习使用 clc、clear,了解其功能和作用
(3) 输入一个 2 维数值数组,体会标点符号的作用(空格和逗
号的作用)。
(4) 一维数组的创建和寻访,创建一个一维数组(1×8)X,
查询 X 数组的第 2 个元素,查询 X 数组的第 3 个元素到
第 6 个元素,查询 X 数组的第 5 个元素到最后一个元素,
查询 X 数组的第 3、2、1 个元素,查询 X 数组中≤5 元
素,将 X 数组的第 2 个元素重新赋值为 111,实例 expm1。
(5) 二维数组的创建和寻访,创建一个二维数组(4×8)A,

5
查询数组 A 第 2 行、第 3 列的元素,查询数组 A 第 2 行
的所有元素,查询数组 A 第 6 列的所有元素,查询数组 A
按列拉长形成新的数组 B(1×32),查询数组 A 按行拉长
形成新的数组 C(1×32),以全元素赋值的方式对数组 A
赋值。实例 expm2。
(6) 两种运算指令形式和实质内涵的比较。设有 3 个二维数组
A2×4,B2×4,C2×2,写出所有由 2 个数组参与的合法的数
组运算和矩阵指令
(7) 学习使用表 8 列的常用函数(通过 help 方法)
(8) 学习使用表 9 数组操作函数
(9) 学习字符串的创建,a='This is an example.'
串数组的大小 size(a)
串数组的元素标识 a14=a(1:4) ra=a(end:-1:1)
对字符串 ASCLL 码的数组操作
w=find(a>='a'&a<='z');
ascii_a(w)=ascii_a(w)-32;%英文大小写字母 ASCLL 值差 32
(小-32=大)
char(ascii_a)

练习 B
(10) 用 reshape 指令生成下列矩阵,并取出方框内的数组元素

(11) 用 两 种 方 法 曲 阴 影 部 分 元 素 , 并 构 成 一 个 数 组
[2,8,14,20,4,6]。

6
(12) 利用 diag(),ones()生成下如下矩阵,

5 0 −2 0 0 0 0 0
0 4 0 −2 0 0 0 0
0 0 3 0 −2 0 0 0
0 0 0 2 0 −2 0 0
3 0 0 0 1 0 −2 0
0 4 0 0 0 0 0 −2
0 0 5 0 0 0 −1 0
0 0 0 6 0 0 0 −2

7
实验二 基本符号运算的使用
符号计算的特点:一,运算以推理解析的方式进行,因此不受计算误
差积累问题困扰;二,符号计算,或给出完全正确的封闭解,或给出任意
精度的数值解(当封闭解不存在时);三,符号计算指令的调用比较简单;
四,计算所需时间较长。在MATLAB中,符号计算虽以数值计算的补充身
份出现,但涉及符号计算的指令使用、运算符操作、计算结果可视化、程
序编制以及在线帮助系统都是十分完整、便捷的

一、实验目的
1、熟悉符号对象和符号表达式
2、掌握符号表达式和符号函数的操作
3、学习利用符号代数方程的求解

二、实验基本知识
1、基本运算指令
符号对象的生成和使用,syms
命令 1 合并同类项
函数 collect
格式 R = collect(S) %对于多项式 S 中的每一函数,collect(S)按缺
省变量 x 的次数合并系数。
R = collect(S,v) %对指定的变量 v 计算,操作同上。
命令 2 符号表达式的展开
函数 expand
格式 R = expand(S) %对符号表达式 S 中每个因式的乘积进行展开
计算。该命令通常用于计算多项式函数、三角函数、指数
函数与对数函数等表达式的展开式。
命令 3 符号因式分解
函数 factor
格式 factor(X) %参量 x 可以是正整数、符号表达式阵列或符号整
数阵列。若 X 为一正整数,则 factor(X)返回 X 的质
数分解式。若 x 为多项式或整数矩阵,则 factor(X)
分解矩阵的每一元素。若整数阵列中有一元素位数
超过 16 位,用户必须用命令 sym 生成该元素。
命令 4 符号表达式的分子与分母
函数 numden
格式 [N,D] = numden(A)

8
说明 将符号或数值矩阵 A 中的每一元素转换成整系数多项式的有理
式形式,其中分子与分母是相对互素的。输出的参量 N 为分子的符号矩阵,
输出的参量 D 为分母的符号矩阵。
命令 5 搜索符号表达式的最简形式
函数 simple
格式 r = simple(S) %该命令试图找出符号表达式 S 的代数上的简
单形式,显示任意的能使表达式 S 长度变短的
表达式,且返回其中最短的一个。若 S 为一矩
阵,则结果为整个矩阵的最短形式,而非是每
一个元素的最简形式。若没有输出参量 r,则
该命令将显示所有可能使用的算法与表达式,
同时返回最短的一个。
[r,how] = simple(S) %没有显示中间的化简结果,但返回能找
到的最短的一个。输出参量 r 为一符号,
how 为一字符串,用于表示算法。
命令 6 符号表达式的化简
函数 simplify
格式 R = simplify(S)
说明 使用 Maple 软件中的化简规则, 将化简符号矩阵 S 中每一元素。
命令 7 从一符号表达式中或矩阵中找出符号变量
函数 findsym
格式 r = findsym(S) %以字母表的顺序返回表达式 S 中的所有符
号变量(注:符号变量为由字母(除了 i 与 j)与数字构成
的、字母打头的字符串) 。若 S 中没有任何的符号变量,
则 findsym 返回一空字符串。
r = findsym(S,n) %返回字母表中接近 x 的 n 个符号变量

命令 8 函数的反函数
函数 finverse
格式 g = finverse(f) %返回函数 f 的反函数。其中 f 为单值的一元
数学函数,如 f=f(x)。若 f 的反函数存在, 设为 g,则有 g[f(x)]
= x。
g = finverse(f,u) %若符号函数 f 中有几个符号变量时,对指定
的符号自变量 v 计算其反函数。若其反函数存在,设为 g,
则有 g[f(v)] = v。

命令 9 嵌套形式的多项式的表达式

9
函数 horner
格式 R = horner(P) %若 P 为一符号多项式的矩阵,该命令将矩阵
的每一元素转换成嵌套形式的表达式 R。

2、函数计算器的使用
函数 funtool
格式 funtool %该命令将生成三个图形窗口,Figure No.1 用于显示
函数 f 的图形,Figure No.2 用于显示函数 g 的图形,
Figure No.3 为一可视化的、可操作与显示一元函数
的计算器界面。在该界面上由许多按钮,可以显示
两个由用户输入的函数的计算结果:加、乘、微分
等。funtool 还有一函数存储器,允许用户将函数存
入,以便后面调用。在开始时,funtool 显示两个函
数 f(x) = x 与 g(x) = 1 在区间[-2*pi, 2*pi]上的图形。
Funtool 同时在下面显示一控制面板,允许用户对函
数 f、g 进行保存、更正、重新输入、联合与转换等
操作。
输入命令 funtool 后,生成的界面如下:

图 2-1 函数工具 funtool 界面

图 2-2 函数 f 的图形 图 2-3 函数 g 的图形


说明 文本输入框区域:控制面板的上面几行,可以输入文本;

10
f = :显示代表函数 f 的符号表达式,可在该行输入其他有效的表达式
来定义 f,再按回车键即可在 Figure No.1 中画出图形;
g = :显示代表函数 g 的符号表达式,可在该行输入其他有效的表达
式来定义 g,再按回车键即可在 Figure No.2 中画出 g 图形;
x = :显示用于画函数 f 与 g 的区间。可在该行输入其他的不同区间,
再按回车键即可改变 Figure No.1 与 Figure No.2 中的区间;
a = :显示一用于改变函数 f 的常量因子(见下面的操作按钮)。可在该
行输入不同的常数。
控制按钮区域:该区域有一些按钮,按下它们将对函数 f 转换成不同
的形式与执行不同的操作。
df/dx:函数 f 的导数;
int f:函数 f 的积分(没有常数的一个原函数),当函数 f 的原函数不能
用初等函数表示时,操作可能失败;
simple f:化简函数 f(若有可能);
num f:函数 f 的分子;
den f:函数 f 的分母;
1/f:函数 f 的倒数;
finv:函数 f 的反函数,若函数 f 的反函数不存在,操作可能失败;
f+a:用 f(x)+a 代替函数 f(x);
f-a:用 f(x)-a 代替函数 f(x);
f*a:用 f(x)+a 代替函数 f(x);
f/a:用 f(x)/a 代替函数 f(x);
f^a:用 f(x)^a 代替函数 f(x);
f(x+a):用 f(x+a)代替函数 f(x);
f(x*a):用 f(x-a)代替函数 f(x);
f+g:用 f(x)+g(x)代替函数 f(x);
f-g:用 f(x)-g(x)代替函数 f(x);
f*g:用 f(x)*g(x)代替函数 f(x);
f/g:用 f(x)/g(x)代替函数 f(x);
g=f:用函数 f(x)代替函数 g(x);
swap:函数 f(x)与 g(x)互换;
Insert:将函数 f(x)保存到函数内存列表中的最后;
Cycle:用内存函数列表中的第二项代替函数 f(x);
Delete:从内存函数列表中删除函数 f(x);
Reset:重新设置计算器为初始状态;
Help:显示在线的关于计算器的帮助;
Demo:运行该计算器的演示程序;

11
Close:关闭计算器的三个窗口。

三、实验内容
1、在命令窗口输入下列指令验证符号运算指令
例 2-1
>>syms x y;
>>R1 = collect((exp(x)+x)*(x+2))
>>R2 = collect((x+y)*(x^2+y^2+1), y)
>>R3 = collect([(x+1)*(y+1),x+y])

例 2-2
>>syms x y a b c t
>>E1 = expand((x-2)*(x-4)*(y-t))
>>E2 = expand(cos(x+y))
>>E3 = expand(exp((a+b)^3))
>>E4 = expand(log(a*b/sqrt(c)))
>>E5 = expand([sin(2*t), cos(2*t)])
例 2-3
>>syms a b x y
>>F1 = factor(x^4-y^4)
>>F2 = factor([a^2-b^2, x^3+y^3])
>>F3 = factor(sym('12345678901234567890'))
例 2-4
>>syms x y a b c d;
>>[n1,d1] = numden(sym(sin(4/5)))
>>[n2,d2] = numden(x/y + y/x)
>>A = [a, 1/b;1/c d];
>>[n3,d3] = numden(A)
例 2-5
>>syms x
>>R1 = simple(cos(x)^4+sin(x)^4)
>>R2 = simple(2*cos(x)^2-sin(x)^2)
>>R3 = simple(cos(x)^2-sin(x)^2)
>>R4 = simple(cos(x)+(-sin(x)^2)^(1/2))
>>R5 = simple(cos(x)+i*sin(x))
>>R6 = simple( (x+1)*x*(x-1))
>>R7 = simple(x^3+3*x^2+3*x+1)
>> [R8,how] = simple(cos(3*acos(x)))
例 2-6
>>syms x a b c
>>R1 = simplify(sin(x)^4 + cos(x)^4)
>>R2 = simplify(exp(c*log(sqrt(a+b))))
>>S = [(x^2+5*x+6)/(x+2),sqrt(16)];
>>R3 = simplify(S)
例 2-7
>>syms a x y z t alpha beta

12
>>1 = findsym(sin(pi*t*alpha+beta))
>>S2 = findsym(x+i*y-j*z+eps-nan)
>>S3 = findsym(a+y,pi)
例 2-8
>>syms x p q u v;
>>V1 = finverse(1/((x^2+p)*(x^2+q)))
>>V2 = finverse(exp(u-2*v),u)
例 2-9
>>syms x y
>>H1 = horner(2*x^4-6*x^3+9*x^2-6*x-4)
>>H2 = horner([x^2+x*y;y^3-2*y])
2、学习使用函数计算器

13
实验三 MATLAB 语言的程序设计
一、实验目的:

1、 熟悉 MATLAB 程序编辑与设计环境
2、 掌握各种编程语句语法规则及程序设计方法
3、 函数文件的编写和设计
4、 了解和熟悉跨空间变量传递和赋值

二、实验基本知识:

1、 程序流程控制语句
for 循环结构
语法:for i=初值:增量:终值
语句 1
……
语句 n
end
说明:1.i=初值:终值,则增量为 1。
2.初值、增量、终值可正可负,可以是整数,也可以是小数,只须
符合数学逻辑。
while 循环结构
语法:while 逻辑表达式
循环体语句
end
说明:1、whiIe 结构依据逻辑表达式的值判断是否执行循环体语勾。若表
达式的值为真,执行循环体语句一次、在反复执行时,每次都要
进行判断。若表达式的值为假,则程序执行 end 之后的语句。
2、为了避免因逻辑上的失误,而陷入死循环,建议在循环体语句的
适当位置加 break 语句、以便程序能正常执行。
(执行循环体的次
数不确定;每一次执行循环体后,一定会改变 while 后面所跟关
系式的值。)
3、while 循环也可以嵌套、其结构如下:
while 逻辑表达式 1
循环体语句 1
while 逻辑表达式 2

14
循环体语句 2
end
循环体语句 3
end
if-else-end 分支结构
if 表达式 1
语句 1
else if 表达式 2(可选)
语句 2
else(可选)
语句 3
end
end
说明:1.if 结构是一个条件分支语句,若满足表达式的条件,则往下执行;
若不满足,则跳出 if 结构。
2.else if 表达式 2 与 else 为可选项,这两条语句可依据具体情况取
舍。
3.注意:每一个 if 都对应一个 end,即有几个 if,记就应有几个 end。
switch-case 结构
语法:switch 表达式
case 常量表达式 1
语句组 1
case 常量表达式 2
语句组 2
……
otherwise
语句组 n
end
说明:1.switch 后面的表达式可以是任何类型,如数字、字符串等。
2.当表达式的值与 case 后面常量表达式的值相等时,就执行这个
case 后面的语句组如果所有的常量表达式的值都与这个表达式的值不相等
时,则执行 otherwise 后的执行语句。
程序流程控制指令
break、return、pause
2、 函数文件的结构和编写方法
函数只能在函数体内对变量进行操作,也就是只能访问函数本身工作
空间中的变量。

15
M 函数文件的结构
(1) 函数定义行(function)
(2) H1 行(函数帮助文本的第一行)
(3) 函数帮助文本
(4) 函数体
(5) 注释
函数文件编写后,保存时,其文件名必须与函数名相同。注意:函数
名不要与 MATLAB 自身的函数命令相同。

三、实验内容:
练习 A
1、 熟悉 MATLAB 程序编辑与设计环境

2、 用 for 循环语句实现求 1~100 的和


3、 用 for 循环语句实现编写一个求 n 阶乘的函数文件

4、 找到一个 n!> 10100 的值(利用上题的 n 阶乘函数文件)(两种方法)


5、 编写一个乘法表( 9 × 9 )
练习 B
思考题

6、 判断 y 向量的元素属于 3n 、 3n + 1 或 3n + 2 ,设 y = [3,5,7,9,11,16] 。

(使用 rem 函数来求数组中元素的余数)

16
7、 已知一维数组 A = [2,4,5,8,10] 、 B = [4,9,6,7,4] ,用 for 循环语句实

n
现 ∑AB
i =1
i n − i +1 。求和函数可用 sum()

8、 (1)编写求解一维数组平均值的函数文件。
(2)编写求解二维数组平均值的函数文件。
9、 编写验证魔方矩阵的函数文件,输出要求如下:
(1) 如果输入矩阵的维数小于 3,输出显示’error’
(2) 如果输入矩阵的不是方阵,输出显示’the size of matrix X must
be N-by-N matrix’
(3) 显示行、列和及其对角线求和后的值,并判断其和是否相同,
若不同,显示‘No’,相同显示‘Yes’。

17
实验四 MATLAB 的图形绘制
一、实验目的:

1、学习 MATLAB 图形绘制的基本方法;


2、熟悉和了解 MATLAB 图形绘制程序编辑的基本指令;
3、熟悉掌握利用 MATLAB 图形编辑窗口编辑和修改图形界面,并添加图
形的各种标注;
4、掌握 plot、subplot 的指令格式和语法。

二、实验基本知识:

1、 plot(x,y)------绘制由 x,y 所确定的曲线;


2、 多组变量绘图:plot(x1, y1, 选项 1, x2, y2, 选项 2, ……);
3、 双 Y 轴绘图:plotyy()函数;
4、 图形窗口的分割;
5、 图形编辑窗口的使用。

18
三、实验内容
练习 A
【1】二维曲线绘图基本指令演示。本例运作后,再试验 plot(t), plot(Y),
plot(Y,t) ,以观察产生图形的不同。
t=(0:pi/50:2*pi)';
k=0.4:0.1:1;
Y=cos(t)*k;
plot(t,Y)

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7

plot 指令基本操作演示

19
【2】用图形表示连续调制波形 y = sin(t ) sin(9t ) 及其包络线。

t=(0:pi/100:pi)';
y1=sin(t)*[1,-1];
y2=sin(t).*sin(9*t);
t3=pi*(0:9)/9;
y3=sin(t3).*sin(9*t3);plot(t,y1,'r:',t,y2,'b',t3,y3,'bo')
axis([0,pi,-1,1])

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 0.5 1 1.5 2 2.5 3

【3】通过绘制二阶系统阶跃响应,综合演示图形标识。本例比较综合,涉
及的指令较广。请耐心读、实际做、再看例后说明,定会有匪浅收益。
clf;t=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t);
tt=t(find(abs(y-1)>0.05));ts=max(tt);
plot(t,y,'r-','LineWidth',3)
axis([-inf,6*pi,0.6,inf])
set(gca,'Xtick',[2*pi,4*pi,6*pi],'Ytick',[0.95,1,1.05,max(y)])
grid on
title('\it y = 1 - e^{ -\alphat}cos{\omegat}')
text(13.5,1.2,'\fontsize{12}{\alpha}=0.3')
text(13.5,1.1,'\fontsize{12}{\omega}=0.7')
hold on;plot(ts,0.95,'bo','MarkerSize',10);hold off
cell_string{1}='\fontsize{12}\uparrow';
cell_string{2}='\fontsize{16} \fontname{隶书}镇定时间';
cell_string{3}='\fontsize{6} ';
cell_string{4}=['\fontsize{14}\rmt_{s} = ' num2str(ts)];
text(ts,0.85,cell_string)
xlabel('\fontsize{14} \bft \rightarrow')

20
ylabel('\fontsize{14} \bfy \rightarrow')
y = 1 - e -α tcos ω t
1.2843

α =0.3

ω=0.7
1.05
1
y→

0.95

镇定时间
t s = 9.6133

6.2832 12.5664 18.8496


t→
二阶阶跃响应图的标识

【4】通过图形编辑窗口对上图设计和修改

【5】观察各种轴控制指令的影响。演示采用长轴为 3.25,短轴为 1.15 的


椭圆。注意:采用多子图(图 6.2-4)表现时,图形形状不仅受“控制指令”
影响,而且受整个图面“宽高比”及“子图数目”的影响。
t=0:2*pi/99:2*pi;
x=1.15*cos(t);y=3.25*sin(t);
subplot(2,3,1),plot(x,y),axis normal,grid on,
title('Normal and Grid on')
subplot(2,3,2),plot(x,y),axis equal,grid on,title('Equal')
subplot(2,3,3),plot(x,y),axis square,grid on,title('Square')
subplot(2,3,4),plot(x,y),axis image,box off,title('Image and Box off')
subplot(2,3,5),plot(x,y),axis image fill,box off
title('Image and Fill')
subplot(2,3,6),plot(x,y),axis tight,box off,title('Tight')

21
Normal and Grid on Equal Square
4 4
2 2
2

0 0 0

-2 -2
-2
-4 -4
-2 0 2 -2 0 2 -2 0 2
Image and Box off Image and Fill Tight
1
2 2
0.5
0 0 0
-0.5
-2 -2
-1
-1 0 1 -1 0 1 -1 0 1

各种轴控制指令的不同影响

22
实验五 采用 SIMULINK 的系统仿真
一、实验目的:

1、熟悉 SIMULINK 工作环境及特点


2、掌握线性系统仿真常用基本模块的用法
3、掌握 SIMULINK 的建模与仿真方法
4、子系统的创建和封装设计

二、实验基本知识:

1.了解 SIMULINK 模块库中各子模块基本功能

23
2. SIMULINK 的建模与仿真方法

24
(1)打开模块库,找出相应的模块。鼠标左键点击相应模块,拖拽到模型
窗口中即可。

(2)创建子系统:当模型大而复杂时,可创建子系统。

(3)设置仿真控制参数。

三、实验内容

练习 A
1.SIMULINK 仿真实际应用
(1) 双环调速的电流环系统的方框图模型为:
图中参数设为
Ks=44;Ts=0.00167;Ta=0.017;R=1;Tm=0.075;Ce=0.1925;Kt=0.01178;
T1=0.049;T2=0.088,
(1)在 Simulink 集成环境下建立模型,在给定信号作用点处输入单位给定阶
跃响应信号,0.3 秒后在扰动信号点输入单位阶跃响应信号。并绘制相应的
响应曲线
(2)计算仿真结果的超调量、上升时间、调节时间、稳态误差。

(3)设计 PID 调节器替代图中的比例积分调节器,调节 K P ,Ti ,Td 用使系

统满足超调量 15%,上升时间 0.3s,调节时间 0.4s 的要求。


(4)要求对加入的 PID 控制器封装成一个模块使用

25
26
封装步骤 1 创建子系统

封装步骤 2 封装子系统

封装步骤 3
设置参数

27
封装步骤 4 修改和设计模块图标

28
练习 B
2.封装触发系统
轿车沿直线山坡路向前行驶。要求设计一个简单的比例放大器,使轿
车能以指定的速度运动。本练习体现:(A)仿真系统的创建。(B)非线
性模块的使用。(C)任意函数模块的应用。(D)体现“自下而上”的建模
方式。
模型如下:

要求:
(1)简单封装子系统如图所示

(2)精封装子系统,设置对话窗口
(1) 最大发动力Fmax(Max Thrust),最大制动力Fmin(Max
Brake),路面起伏系数Kh,阵风强度系数Kw。
(2) 设计子系统模块的Icon,参考设计如下:

29
(3)使得汽车速度受两种不同的控制器操纵。具体要求是: (A) 当汽车
• •
实际速度与期望速度的误差绝对值 v err = x c − x a < 2 ,且 verr < 1 时,将

切换为PI 比例-积分控制器;(B)一旦PI 控制器被使用,只要仍满足

verr < 5 ,那么PI 将继续起控制作用;(C)除以上情况外,则都使用简

单的P 比例控制器。单比例控制时 k p = 50 ,PI时, k p = 25 , k i = 10 。

参考设计如下:

(4)绘制出车速的变化曲线和控制器的变化曲线

30
实验六 S 函数的建立与应用
一、 实验目的
在实际建模过程中,常常会遇到非常复杂的模型,这些模型直接用
Simulink 创建显得非常复杂或者是不可能的,S 函数却可以很容易地解决
这个问题。用 MATLAB 语言来描述具体的过程,构成 S 函数模块,然后
在 Simulink 模型中通过 S 函数模块直接调用。通过该实验完成以下目的
1、 熟悉 S 函数
2、 学习 S 函数的调用
3、 理解 S 函数工作原理
4、 利用 M 文件编写 S 函数

二、 实验基本知识
M 文件的 S 函数由以下形式的 MATLAB 函数组成:
[sys,X0,str,ts]=f(t,x,u,flag,91,p2,…)
其中 f 是 S 函数的文件名,t 是当前时间,x 是 S 函数相应的状态向量,
u 是模块的输入,flag 是所要执行的任务,p1,p2,… 都是模块的参数。在
模型仿真的过程中,Simulink 不断地调用函数 f,通过 flag 来完成说明所
要完成的任务。每次 S 函数执行任务,都将以特定结构返回结果。
表一
仿真阶段 S 函数过程 Flag 值
模块初始化 mdlInitializeSizes 0
计算下一个采样点 mdlGetTimeNextVarHit 4
计算模块输出 mdlOutput 3
更新模块离散状态 mdlUpdate 2
计算模块导数 mdlDerivatives 1
结束仿真 mdlTerminate 9
Simulink 为编写 S 函数提供了各种模板文件,其中定义了 S 函数完整
的框架结构,用户可以根据自己的需要加以修剪。推荐在编辑 M 文件 S
函 数 时 , 使 用 S 函 数 模 板 文 件 sfunmpl.m , 在 文 件 夹
matlabroot/toolbox/Simulink/中,在这个文件中包含了一个主函数和若干子
函数,每一个子函数都对应一个 flag。
用户在 MATLAB 命令窗口输入如下命令:
》edit sfuntmpl

31
Flag=0
mdInitializeConditions
mdlInitializeSizes
mdlInitializeSampleTimes

Flag=4
mdIGetTimeNextVarHit

Flag=3
mdIOutPut

Flag=2
mdIUpdate

Flag=3
mdIOutput

Flag=1
mdIDerivatives

Flag=9
mdITerminate

M 文件 S 函数流程
为了描述方便,在此给出简略的模板文件,并配置了中文说明,。
Function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
%SFUNTMPL 是 M-文件函数模板
%通过剪裁,用户可以生成自己的 S 函数,不过一定要重新命名
%利用 S 函数可以生成连续、离散混合系统等,实现任何模块的功能
%M-文件 S 函数的语法为:
%[SYS,X0,STR,TS]=SFUNC(T,X,U,FLAG,P1,….,Pn)
%拥护切勿改动输出参数的顺序、名称、和数目
%输入参数的数目不能小于 1,这四个参数的名称和排列顺序不能改

%用户可以根据自己的要求添加额外的参数,位置依次为第 5,6,7,
8,9 等。
%S 函数的 flag 参数是一个标记变量,具有 6 个不同值,分别为 0,1,
2,3,4,9
%flag 的 6 个值分别指向 6 个不同的子函数
%flag 所指向的子函数也成为回调方法(Callback Methods)
switch flaf,

32
%初始化,调用“模块初始化”子函数%
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
%连续状态变量计算,调用“计算模块导数”子函数%
case 1,
sys=mdlDerivatives (t,x,u);
%更新,调用“更新模块输出”子函数%
case 2,
sys=mdlUpdata(t,x,u);
%输出,调用“计算模块输出”子函数%
case 3,
sys=mdlOutputs(t,x,u);
%技术下一时刻采样点调用“计算下一个采样时点”子函数%
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
%结束就,调用“结束仿真”子函数%
case 9,
sys=mdlTerminate(t,x,u);
%其他的 flag%
otherwise
error([‘Unhandled flag=’,num2str(flag)]);
end
%end sfuntmpl
%===================================================
%”模块初始化”子函数
%返回大小、初始条件和样本
Function [sys,x0,str,ts]=mdlInitializeSizes
%调用 simsizes 函数,返回规范格式的 sizes 构架
%这条指令不要修改
sizes=simsizes;
%模块的连续状态个数,0 是默认值
%用户可以根据自己的要求进行修改
sizes.NumContStates=0;
%模块的离散状态个数,0 是默认值
%用户可以根据自己的要求进行修改
sizes.NumDiscStates=0;
%模块的输出个数,0 是默认值

33
%用户可以根据自己的要求进行修改
sizes.NumOutputs=0;
%模块的输出个数,0 是默认值
%用户可以根据自己的要求进行修改
sizes.numInputs=0;
%模块中包含的直通前向馈路个数,1 是默认值
%用户可以根据自己的要求进行修改
sizes.DirFeedthrough=1;
%模块中采样时间的个数,1 是默认值,至少需要一个样本时间
%用户可以根据自己的要求进行修改
sizes.NumSampleTimes=1;
%初始化后的构架 sizes 经 simsizes 函数处理后向 sys 赋值
%这条指令不要修改
sys=simsizes(sizes);
%给模块初始值变量赋值,[ ]是默认值
%用户可以根据自己的要求进行修改
x0=[ ];
%系统保留变量
%切勿改动,保持为空
str=[ ];
%“二元对”描述采样时间及偏移量。[0 0]是默认值
%[0 0]适用于连续系统
%[-1 0]则表示该模块采样时间继承其前的模块采样时间设置
ts=[0 0 ];
%===================================================
function sys=mdlDerivatives (t,x,u)
%此处填写计算导数向量的指令
%[ ]是模块的默认值
%用户必须把算得的离散状态向量赋给 sys
sys=[ ];
%===================================================
function sys=mdlUpdate (t,x,u)
%此处填写计算离散状态向量的指令
%[ ]是模块的默认值
%用户必须把算得的离散状态向量赋给 sys
function sys= mdlOutputs(t,x,u)
%此处填写计算模块输出向量的指令

34
%[ ]是模块的默认值
%用户必须把算得的离散状态向量赋给 sys
sys=[ ];
%===================================================
function sys=mdlGetTimeOfNextVarHit(t,x,u)
%该子函数仅在“采样时间”情况下使用
%sampleTime=1 是模板默认设置,表示在当前时间 1 秒后再调用本模

%%用户可以根据自己的要求进行修改
sampleTime=1;
%将计算得到的下一采样时刻赋给 sys
%切勿改动
%sys=t= sampleTime;
%===================================================
function sys=mdlTerminate(t,x,u)
%模板默认设置,一般情况不要改动
sys=[ ];
说明:
模块文件输入的参数含义如下:
t-当前时刻,是采用绝对计量的时间值,是从仿真开始模型运行时间
的计量值。
x-模块的状态向量,包括连续状态向量和离散状态向量。
u-模块的输入向量。
flag-执行不同操作的标记变量。
在 Simulink 仿真过程中,各步骤的不同功能之间的转换,是通过 flag
标记来实现的,flag 取不同值时所代表的功能如表 2 所示。
表2
Flag 值 功能
0 模块初始化
1 计算模块导数
2 更新模块离散状态
3 计算模块输出
4 计算下一个采样点
9 结束仿真
模块文件中的 case 不一定都是必要的,有的情况下,可以进行裁剪,
例当模块不采用变采样时,case4 和相应的子函数 mdlGetimeOfNextVarHit
就可以删除。

35
用户对 S 函数模板进行裁剪,不能修改输入和输出参数的名称、顺序,
不过可以增加输入参数的数量。

三、 实验内容
使用 S 函数实现增益,使得 y=2*u.步骤如下:
(1) 对 M 文件 S 函数的主函数进行修改,增加新的函数.
Function [sys,x0,str,ts]=mtimestwo (t,x,u,flag)
(2) 修改初始化.
sizes=simsizes;
sizes.NumContstates =0;
sizes.NumDiscstates =0;
sizes.NumOutputs =-1; % dynamically sized
sizes.NumInputs =-1; % dynamically sized
sizes.DirFeedthrough =1; % has direct feedthrough
sizes.NumSampletimes =1
(3) mdlOutputs 子函数的定义也做相应的修改,将增益作为参数输入.
function sys=mdlOutputs(t,x,u)
sys =2*u;
(4) 建立模型如图所示,保存文件名为 model1.mdl.

模型 model1 仿真图
(5) S-Functions 模块的参数设置如图所示.

36
(6) Sine Wave 模块中将 Frequency 设置为 2.
完整程序代码如下:
function [sys,x0,str,ts]=sfun11to02(t,x,u,flag)
%TIMESTWO S-Funtions whose output is two times its input.
% This M-file illustrates how to construct an M-file S-functions that
% computes an output value based upon its input. The output of this
% S-Functions is two times the input value:
% y=2*u;
switch flag,
% Initialization %
% Initialize the states, sample times, and state ordering strings.
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
% Outputs %
% Return the outputs of the S-Functions block.
case 3
Sys=mdlOutputs(t,x,u);
% Unhandled flags %
case {1,2,4,9}
Sys=[ ] ;
% Unexpected flags (error handling) %
%Return an error message for unhandled flag values.
otherwise
error ([‘Unhandled flag =’,num2str (flag)]);
end
% end timestwo
%=======================================================
% mdlInitializeSizes
% Return the sizes, initial conditions,and sample times for the S-Functions.
function [sys,x0,str,ts]=mdlInitializeSizes()
sizes =simsizes;
sizes.NumContstates =0;
sizes.NumDiscstates =0;
sizes.NumOutputs =-1; % dynamically sized
sizes.NumInputs =-1; % dynamically sized
sizes.DirFeedthrough =1; % has direct feedthrough
sizes.NumSampletimes =1

37
sys =simsizes (sizes);
str =[ ];
x0 =[ ];
ts =[-1 0]; % inherited sample time
% end mdlInitializeSizes
%=======================================================
% mdlOutputs
% Return the output vector for the S-Functions
function sys =mdlOutput (t,x,u)
sys =u*2;
% end mdlOutputs

38
实验七 控制系统的频域与时域分析
一、实验目的:

1、掌握控制系统数学模型的基本描述方法和相互转化
2、了解控制系统的稳定性分析方法
3、掌握控制系统频域与时域分析基本方法

二、实验基本知识:

1. 系统数学模型的几种表示方法
方案一
函数转换表
函数描述方式 传递函数模型 零极点模型 状态空间模型
传递函数模型 Sys=tf(num,den) Sys_zpk=zpk(sys) Sys_ss=ss(sys)

零极点模型 sys_tf=tf(sys) sys=zpk(z ,p ,k) Sys_ss=ss(sys)

状态空间模型 sys_ss=tf(sys) sys_ss=zpk(sys) sys=ss(a,b,c,d)

方案二
[z ,p ,k]=tf2zp(num , den);
[num , den ]=zp2tf(z ,p ,k)
[num , den]=ss2tf(A ,B ,C ,D , iu ) %iu—表示输入的序号(对多输入系统)
[z, p ,k]=ss2zp(A ,B ,C ,D , iu ) %[z ,p ,k]— 表示对第 iu 个输入信号的
传递函数的零极点。
[A , B ,C ,D]= tf2ss (num , den)
[A , B ,C ,D]=zp2ss(z ,p ,k)

2、在 MATLAB 工具箱中,提供了子系统的连接处理函数:


1) series()函数:系统串联实现

格式:sys=series( sys1 , sys 2 )

[A,B,C,D]=series(A 1 ,B 1 ,C 1 ,D 1 , A 2 ,B 2 ,C 2 ,D 2 )

39
2) parallel()函数:系统并联实现。

格式:sys=parallel( sys1 , sys 2 )

3) feedback()函数:系统反馈连接

格式:sys=feedback( sys1 , sys 2 )

sys=feedback( sys1 , sys 2 ,sign)

sign—定义反馈形式:正反馈,sign=+1;负反馈,sign=-1
3.控制系统根轨迹绘制
1 rlocfind():计算给定根的根轨迹增益
格式:①[k,poles]=rlocfind(sys)
②[k,poles]= rlocfind(sys,p)
① 在 LTI 对象的根轨迹图中显示出十字光标,当用户选择其中一点
时,其相应的增益由 k 记录,与增益相关的所有极点记录 poles
中。若要使用该函数,必须首先在当前窗口上绘制系统的根轨迹。
② 定义要得到增益的根矢量 P,即事先给出极点。除了显示出该根
对应的增益以外,还显示出该增益对应的其它根。
2 rlocus() 函数:功能为求系统根轨迹。
格式:rlocus(sys)--- 计算 SISO 开环 LTI 对象的根轨迹,增益自动
选取。
rlocus(sys,k)---显式设置增益。
[r,k]= rlocus(sys)--- 返回系统的增益 k(向量)和闭环极点 r
(向量),即对应于增益的闭环极点为 r(i)。
4.控制系统频域分析基本方法
(1)Bode 图:bode()函数
(2)Nyquist 图:nyquist()函数
(3)稳定裕度计算:margin( )函数
综合应用:
A=[0 1 –1;-6 –11 6;-6 –11 5];
B=[0 0 1];
C=[1 0 0];
D=0;
ω =logspace(-1,1);
[m,p]=bode(A,B,C,D,1, ω )

40
subplot(211),semilogx( ω ,20*log10(m));
subplot(212),semilogx( ω ,p);
[X,Y]=nyquist(A,B,C,D,1, ω );
plot(X,Y)

[ Gm , Pm , ω cg , ω CP ]=margin(A,B,C,D)

5.线性系统时间响应分析
step( )函数---求系统阶跃响应
impulse( )函数:求取系统的脉冲响应
lsim( )函数:求系统的任意输入下的仿真

三、实验内容
练习 A:
1、
表示下列传递函数模型,并转化成其他的数学模型

4( s + 2)( s 2 + 6 s + 6 ) 2
(1) G ( s ) =
s( s + 1) 3 ( s 3 + 3s 2 + 2 s + 5)
4s − 2
(2) G ( s ) =
s + 2s + 5
3

1
(3) G ( s ) =
(2s + 1)( s + 2)

⎡•⎤ ⎡0 1 ⎤ ⎡ x1 ⎤ ⎡0⎤
⎢ x•1 ⎥ = ⎢ ⎥ ⎢ ⎥ + ⎢ ⎥u
⎢ x ⎥ ⎣− 1 − 2⎦ ⎣ x 2 ⎦ ⎣1⎦
(4) ⎣ 2⎦
⎡x ⎤
y = [0 1]⎢ 1 ⎥
⎣ x2 ⎦
2、 一个单位负反馈开环传递函数为

G (s ) =
k
s(0.5s + 1)(4s + 1)
试绘出系统闭环的根轨迹图;并在跟轨迹图上任选一点,试计算该点的增
益 k 及其所有极点的位置
3、求下面系统在阶跃信号为 0.11(t)时系统的响应。

41
20
s + 8s + 36 s 2 + 40s + 20
4 3

并求系统性能指标:稳态值、上升时间、调节时间、超调量

42
实验八 控制系统 PID 校正器设计法
一、实验目的
1、 熟悉常规 PID 控制器的设计方法

2、 掌握 PID 参数的调节规律

3、 学习编写程序求系统的动态性能指标

二、实验内容
1、在 SIMULINK 窗口建立如下模型

2、设计 PID 控制器 ,传递函数模型如下

⎛ 1 ⎞
Gc ( s ) = K p ⎜⎜1 + + TD s ⎟⎟
⎝ Ti s ⎠

3、修改 PID 参数 K p 、 Ti 和 Td ,讨论参数对系统的影响

4、 利用稳定边界法对 PID 参数 K p 、 Ti 和 Td 校正设计,

参数 Km Tm Kp Ti Td

数值

5、 根据 PID 参数 K p 、 Ti 和 Td 对系统的影响,调节 PID 参数实现系统的

超调量小于 10%

参数 Kp Ti Td

数值

5、通过程序求得系统的超调量、上升时间和调节时间(误差带选为 5%)。

43
44
实验九 控制系统工具箱的使用
一、实验目的:

1.了解控制系统工具箱的基本概况
2.掌握控制系统工具箱的基本用法

二、实验内容:

1.了解 MATLAB 工具箱的基本功能概况

每个工具箱中有一个 Contents 文件,在文件中将该工具箱里的所有函

数其作用功能一一列出,可以在使用前先看此文件,找到要用的函数后,

在命令空间里键入 help 文件名,即可查到相应函数的调用格式。

例如控制系统工具箱中包括以下几类函数:

*连续系统和离散系统设计;

*状态空间和传递函数;

*模型转换;

*频域响应:Bode 图、Nyquist 图、Nichols 图;

*时域响应:脉冲响应、阶跃响应、斜坡响应等;

*根轨迹、极点配置、LQG 控制。
打开 \matlab6p1\toolbox\control\control\contents.m

2.了解控制系统工具箱的基本用法

45
在命令窗口中运行 ltidemo

分别执行模型建立、离散时间模型、访问模型数据、模型连接、模型

类型转换、连续/离散转换等演示。熟悉工具箱中函数用法。

3.了解 LTI Viewer 基本用法

MATLAB 提供了一个图形化的模型分析工具 LTI Viewer,通过它可以

方便的进行系统各种 LTI 分析及仿真。

在命令窗口中输入 ltiview 运行该程序。

从菜单中选取 File——Import,从工作空间中导入一个 LTI 对象进行分

析。

46
可以先运行 load ltiexamples 调入系统提供的一些 LTI 对象。

4.补偿设计器 sisotool 的使用

在命令空间中输入 sisotool 既可进入 SISO 补偿设计窗口,也可直接指

定设计对象,调用形式为 sisotool(sys)。

47
实验十 图形用户界面设计
图形用户界面(Graphical User Interfaces ,GUI)则是由窗口、光标、
按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过
一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某
种动作或变化,比如实现计算、绘图等。
假如所从事的数据分析、解方程、计算结果可视工作比较单一,那么
一般不会考虑GUI的制作。但是如果你想向别人提供应用程序,想进行某
种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那
么图形用户界面也许是最好的选择之一。

一、实验目的
通过利用图形用户界面设计工具设计简单图形用户界面,而获得制作
自己GUI的体验。

二、实验的基本知识
1、设计原则:(1)简单性; (2)一致性;
(3)习常性;
(4)其它考虑因素。
2、图形用户界面设计工具
在命令窗口输入 guide,

48
三、实验内容
使用guide 来创建一个如图所示的图形用户界面。该界面具有如下功
能:
(1)在编辑框中,可输入表示阻尼比的标量或“行数组”数值,并在按
【Enter】键后,在轴上画出相应的蓝色曲线。坐标范围:X轴[0, 15];Y轴
[0, 2]。
(2)在点击【Grid on】或【Grid off】键时,在轴上画出或删除“分格线”;

49
缺省时,无分格线。
(3)在菜单【Options】下,有2 个下拉菜单项【Box on】和【Box off】;
缺省时为Box off
状态。
(4)所设计的界面和其上图形对象、控件对象都按比例缩放。

(1)步骤一:

50
(2)步骤二

(3)步骤三:

(4)步骤四:

51
(5)步骤五:

[mygui1.m]
function varargout = Mygui1(varargin)
% MYGUI1 Application M-file for Mygui1.fig
% FIG = MYGUI1 launch Mygui1 GUI.
% MYGUI1('callback_name', ...) invoke the named callback.
% Last Modified by GUIDE v2.0 15-Jun-2002 16:12:52
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
% Use system color scheme for figure:
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
% Generate a structure of handles to pass to callbacks, and store it.
handles = guihandles(fig);
guidata(fig, handles);
set(handles.box_off,'enable','off')
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR
CALLBACK
try
if (nargout)
[varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
else
feval(varargin{:}); % FEVAL switchyard

52
end
catch
disp(lasterr);
end
end

% --------------------------------------------------------------------
function varargout = GridOff_push_Callback(h, eventdata, handles, varargin)
grid off
% --------------------------------------------------------------------

function varargout = GridOn_push_Callback(h, eventdata, handles, varargin)


grid on
% --------------------------------------------------------------------

function varargout = zeta_edit_Callback(h, eventdata, handles, varargin)


z=str2num(get(handles.zeta_edit,'String'));
t=0:0.1:15;
cla
for k=1:length(z)
y(:,k)=step(1,[1, 2*z(k), 1], t);
line(t,y(:,k));
end

% --------------------------------------------------------------------
function varargout = options_Callback(h, eventdata, handles, varargin)

% --------------------------------------------------------------------
function varargout = box_on_Callback(h, eventdata, handles, varargin)
box on
set(handles.box_on,'enable','off')
set(handles.box_off,'enable','on')

% --------------------------------------------------------------------
function varargout = box_off_Callback(h, eventdata, handles, varargin)
box off
set(handles.box_off,'enable','off')

53
set(handles.box_on,'enable','on')
(6)步骤六:

54
附 录
MATLAB 命令大全
管理命令和函数
help 在线帮助文件
doc 装入超文本说明
what M、MAT、MEX 文件的目录列表
type 列出 M 文件
lookfor 通过 help 条目搜索关键字
which 定位函数和文件
Demo 运行演示程序
Path 控制 MATLAB 的搜索路径
管理变量和工作空间
Who 列出当前变量
Whos 列出当前变量(长表)
Load 从磁盘文件中恢复变量
Save 保存工作空间变量
Clear 从内存中清除变量和函数
Pack 整理工作空间内存
Size 矩阵的尺寸
Length 向量的长度
disp 显示矩阵或
与文件和操作系统有关的命令
cd 改变当前工作目录
Dir 目录列表
Delete 删除文件
Getenv 获取环境变量值
! 执行 DOS 操作系统命令
Unix 执行 UNIX 操作系统命令并返回结果
Diary 保存 MATLAB 任务
控制命令窗口
Cedit 设置命令行编辑
Clc 清命令窗口
Home 光标置左上角
Format 设置输出格式

55
Echo 底稿文件内使用的回显命令
more 在命令窗口中控制分页输出
启动和退出 MATLAB
Quit 退出 MATLAB
Startup 引用 MATLAB 时所执行的 M 文件
Matlabrc 主启动 M 文件
一般信息
Info MATLAB 系统信息及 Mathworks 公司信息
Subscribe 成为 MATLAB 的订购用户
hostid MATLAB 主服务程序的识别代号
Whatsnew 在说明书中未包含的新信息
Ver 版本信息
操作符和特殊字符
+ 加
— 减
* 矩阵乘法
.* 数组乘法
^ 矩阵幂
.^ 数组幂
\ 左除或反斜杠
/ 右除或斜杠
./ 数组除
Kron Kronecker 张量积
: 冒号
() 圆括号
[] 方括号
. 小数点
.. 父目录
… 继续
, 逗号
; 分号
% 注释
! 感叹号
‘ 转置或引用
= 赋值

56
== 相等
<> 关系操作符
& 逻辑与
| 逻辑或
~ 逻辑非
xor 逻辑异或
逻辑函数
Exist 检查变量或函数是否存在
Any 向量的任一元为真,则其值为真
All 向量的所有元为真,则其值为真
Find 找出非零元素的索引号
三角函数
Sin 正弦
Sinh 双曲正弦
Asin 反正弦
Asinh 反双曲正弦
Cos 余弦
Cosh 双曲余弦
Acos 反余弦
Acosh 反双曲余弦
Tan 正切
Tanh 双曲正切
Atan 反正切
Atan2 四象限反正切
Atanh 反双曲正切
Sec 正割
Sech 双曲正割
Asech 反双曲正割
Csc 余割
Csch 双曲余割
Acsc 反余割
Acsch 反双曲余割
Cot 余切
Coth 双曲余切
Acot 反余切

57
Acoth 反双曲余切
指数函数
Exp 指数
Log 自然对数
Log10 常用对数
Sqrt 平方根
复数函数
Abs 绝对值
Argle 相角
Conj 复共轭
Image 复数虚部
Real 复数实部
数值函数
Fix 朝零方向取整
Floor 朝负无穷大方向取整
Ceil 朝正无穷大方向取整
Round 朝最近的整数取整
Rem 除后取余
Sign 符号函数
基本矩阵
Zeros 零矩阵
Ones 全“1”矩阵
Eye 单位矩阵
Rand 均匀分布的随机数矩阵
Randn 正态分布的随机数矩阵
Logspace 对数间隔的向量
Meshgrid 三维图形的 X 和 Y 数组
: 规则间隔的向量
特殊变量和常数
Ans 当前的答案
Eps 相对浮点精度
Realmax 最大浮点数
Realmin 最小浮点数
Pi 圆周率
I,j 虚数单位

58
Inf 无穷大
Nan 非数值
Flops 浮点运算次数
Nargin 函数输入变量数
Nargout 函数输出变量数
Computer 计算机类型
Isieee 当计算机采用 IEEE 算术标准时,其值为真
Why 简明的答案
Version MATLAB 版本号
时间和日期
Clock 挂钟
Date 日历
Etime 计时函数
Tic 秒表开始计时
Toc 计时函数
Cputime CPU 时间(以秒为单位)
矩阵操作
Diag 建立和提取对角阵
Fliplr 矩阵作左右翻转
Flipud 矩阵作上下翻转
Reshape 改变矩阵大小
Rot90 矩阵旋转 90 度
Tril 提取矩阵的下三角部分
Triu 提取矩阵的上三角部分
: 矩阵的索引号,重新排列矩阵
Compan 友矩阵
Hadamard Hadamard 矩阵
Hankel Hankel 矩阵
Hilb Hilbert 矩阵
Invhilb 逆 Hilbert 矩阵
Kron Kronecker 张量积
Magic 魔方矩阵
Toeplitz Toeplitz 矩阵
Vander Vandermonde 矩阵
矩阵分析

59
Cond 计算矩阵条件数
Norm 计算矩阵或向量范数
Rcond Linpack 逆条件值估计
Rank 计算矩阵秩
Det 计算矩阵行列式值
Trace 计算矩阵的迹
Null 零矩阵
Orth 正交化
线性方程
\和/ 线性方程求解
Chol Cholesky 分解
Lu 高斯消元法求系数阵
Inv 矩阵求逆
Qr 正交三角矩阵分解(QR 分解)
Pinv 矩阵伪逆
特征值和奇异值
Eig 求特征值和特征向量
Poly 求特征多项式
Hess Hessberg 形式
Qz 广义特征值
Cdf2rdf 变复对角矩阵为实分块对角形式
Schur Schur 分解
Balance 矩阵均衡处理以提高特征值精度
Svde 奇异值分解
矩阵函数
Expm 矩阵指数
Expm1 实现 expm 的 M 文件
Expm2 通过泰勒级数求矩阵指数
Expm3 通过特征值和特征向量求矩阵指数
Logm 矩阵对数
Sqrtm 矩阵开平方根
Funm 一般矩阵的计算
泛函——非线性数值方法
Ode23 低阶法求解常微分方程
Ode23p 低阶法求解常微分方程并绘出结果图形

60
Ode45 高阶法求解常微分方程
Quad 低阶法计算数值积分
Quad8 高阶法计算数值积分
Fmin 单变量函数的极小变化
Fmins 多变量函数的极小化
Fzero 找出单变量函数的零点
Fplot 函数绘图
多项式函数
Roots 求多项式根
Poly 构造具有指定根的多项式
Polyvalm 带矩阵变量的多项式计算
Residue 部分分式展开(留数计算)
Polyfit 数据的多项式拟合
Polyder 微分多项式
Conv 多项式乘法
Deconv 多项式除法
建立和控制图形窗口
Figure 建立图形
Gcf 获取当前图形的句柄
Clf 清除当前图形
Close 关闭图形
建立和控制坐标系
Subplot 在标定位置上建立坐标系
Axes 在任意位置上建立坐标系
Gca 获取当前坐标系的句柄
Cla 清除当前坐标系
Axis 控制坐标系的刻度和形式
Caxis 控制伪彩色坐标刻度
Hold 保持当前图形
句柄图形对象
Figure 建立图形窗口
Axes 建立坐标系
Line 建立曲线
Text 建立文本串
Patch 建立图形填充块

61
Surface 建立曲面
Image 建立图像
Uicontrol 建立用户界面控制
Uimen 建立用户界面菜单
句柄图形操作
Set 设置对象
Get 获取对象特征
Reset 重置对象特征
Delete 删除对象
Newplot 预测 nextplot 性质的 M 文件
Gco 获取当前对象的句柄
Drawnow 填充未完成绘图事件
Findobj 寻找指定特征值的对象
打印和存储
Print 打印图形或保存图形
Printopt 配置本地打印机缺省值
Orient 设置纸张取向
Capture 屏幕抓取当前图形
基本 X—Y 图形
Plot 线性图形
Loglog 对数坐标图形
Semilogx 半对数坐标图形(X 轴为对数坐标)
Semilogy 半对数坐标图形(Y 轴为对数坐标)
Fill 绘制二维多边形填充图
特殊 X—Y 图形
Polar 极坐标图
Bar 条形图
Stem 离散序列图或杆图
Stairs 阶梯图
Errorbar 误差条图
Hist 直方图
Rose 角度直方图
Compass 区域图
Feather 箭头图
Fplot 绘图函数

62
Comet 星点图
图形注释
Title 图形标题
Xlabel X 轴标记
Ylabel Y 轴标记
Text 文本注释
Gtext 用鼠标放置文本
Grid 网格线
MATLAB 编程语言
Function 增加新的函数
Eval 执行由 MATLAB 表达式构成的字串
Feval 执行由字串指定的函数
Global 定义全局变量
程序控制流
If 条件执行语句
Else 与 if 命令配合使用
Elseif 与 if 命令配合使用
End For,while 和 if 语句的结束
For 重复执行指定次数(循环)
While 重复执行不定次数(循环)
Break 终止循环的执行
Return 返回引用的函数
Error 显示信息并终止函数的执行
交互输入
Input 提示用户输入
Keyboard 像底稿文件一样使用键盘输入
Menu 产生由用户输入选择的菜单
Pause 等待用户响应
Uimenu 建立用户界面菜单
Uicontrol 建立用户界面控制
一般字符串函数
Strings MATLAB 中有关字符串函数的说明
Abs 变字符串为数值
Setstr 变数值为字符串
Isstr 当变量为字符串时其值为真

63
Blanks 空串
Deblank 删除尾部的空串
Str2mat 从各个字符串中形成文本矩阵
Eval 执行由 MATLAB 表达式组成的串
字符串比较
Strcmp 比较字符串
Findstr 在一字符串中查找另一个子串
Upper 变字符串为大写
Lower 变字符串为小写
Isletter 当变量为字母时,其值为真
Isspace 当变量为空白字符时,其值为真
字符串与数值之间变换
Num2str 变数值为字符串
Int2str 变整数为字符串
Str2num 变字符串为数值
Sprintf 变数值为格式控制下的字符串
Sscanf 变字符串为格式控制下的数值
十进制与十六进制数之间变换
Hex2num 变十六进制为 IEEE 标准下的浮点数
Hex2dec 变十六制数为十进制数
Dec2hex 变十进制数为十六进制数

建模
Append 追加系统动态特性
Augstate 变量状态作为输出
Blkbuild 从方框图中构造状态空间系统
Cloop 系统的闭环
Connect 方框图建模
Conv 两个多项式的卷积
Destim 从增益矩阵中形成离散状态估计器
Dreg 从增益矩阵中形成离散控制器和估计器
Drmodel 产生随机离散模型
Estim 从增益矩阵中形成连续状态估计器
Feedback 反馈系统连接
Ord2 产生二阶系统的 A、B、C、D

64
Pade 时延的 Pade 近似
Parallel 并行系统连接
Reg 从增益矩阵中形成连续控制器和估计器
Rmodel 产生随机连续模型
Series 串行系统连接
Ssdelete 从模型中删除输入、输出或状态
ssselect 从大系统中选择子系统
模型变换
C2d 变连续系统为离散系统
C2dm 利用指定方法变连续为离散系统
C2dt 带一延时变连续为离散系统
D2c 变离散为连续系统
D2cm 利用指定方法变离散为连续系统
Poly 变根值表示为多项式表示
Residue 部分分式展开
Ss2tf 变状态空间表示为传递函数表示
Ss2zp 变状态空间表示为零极点表示
Tf2ss 变传递函数表示为状态空间表示
Tf2zp 变传递函数表示为零极点表示
Zp2tf 变零极点表示为传递函数表示
Zp2ss 变零极点表示为状态空间表示
模型简化
Balreal 平衡实现
Dbalreal 离散平衡实现
Dmodred 离散模型降阶
Minreal 最小实现和零极点对消
Modred 模型降阶
模型实现
Canon 正则形式
Ctrbf 可控阶梯形
Obsvf 可观阶梯形
Ss2ss 采用相似变换
模型特性
Covar 相对于白噪声的连续协方差响应
Ctrb 可控性矩阵

65
Damp 阻尼系数和固有频率
Dcgain 连续稳态(直流)增益
Dcovar 相对于白噪声的离散协方差响应
Ddamp 离散阻尼系数和固有频率
Ddcgain 离散系统增益
Dgram 离散可控性和可观性
Dsort 按幅值排序离散特征值
Eig 特征值和特征向量
Esort 按实部排列连续特征值
Gram 可控性和可观性
Obsv 可观性矩阵
Printsys 按格式显示系统
Roots 多项式之根
Tzero 传递零点
Tzero2 利用随机扰动法传递零点
时域响应
Dimpulse 离散时间单位冲激响应
Dinitial 离散时间零输入响应
Dlsim 任意输入下的离散时间仿真
Dstep 离散时间阶跃响应
Filter 单输入单输出 Z 变换仿真
Impulse 冲激响应
Initial 连续时间零输入响应
Lsim 任意输入下的连续时间仿真
Ltitr 低级时间响应函数
Step 阶跃响应
Stepfun 阶跃函数
频域响应
Bode Bode 图(频域响应)
Dbode 离散 Bode 图
Dnichols 离散 Nichols 图
Dnyquist 离散 Nyquist 图
Dsigma 离散奇异值频域图
Fbode 连续系统的快速 Bode 图
Freqs 拉普拉斯变换频率响应

66
Freqz Z 变换频率响应
Ltifr 低级频率响应函数
Margin 增益和相位裕度
Nichols Nichols 图
Ngrid 画 Nichols 图的栅格线
Nyquist Nyquist 图
Sigma 奇异值频域图
根轨迹
Pzmap 零极点图
Rlocfind 交互式地确定根轨迹增益
Rlocus 画根轨迹
Sgrid 在网格上画连续根轨迹
Zgrid 在网格上画离散根轨迹
增益选择
Acker 单输入单输出极点配置
Dlqe 离散线性二次估计器设计
Dlqew 离散线性二次估计器设计
Dlqr 离散线性二次调节器设计
Dlqry 输出加权的离散调节器设计
Lqe 线性二次估计器设计
Lqed 基于连续代价函数的离散估计器设计
Lqe2 利用 Schur 法设计线性二次估计器
Lqew 一般线性二次估计器设计
Lqr 线性二次调节器设计
Lqrd 基于连续代价函数的离散调节器设计
Lqry 输出加权的调节器设计
Lqr2 利用 Schur 法设计线性二次调节器
Place 极点配置
方程求解
Are 代数 Riccati 方程求解
Dlyap 离散 Lyapunov 方程求解
Lyap 连续 Lyapunov 方程求解
Lyap2 利用对角化求解 Lyapunov 方程
演示示例
Ctrldemo 控制工具箱介绍

67
Boildemo 锅炉系统的 LQG 设计
Jetdemo 喷气式飞机偏航阻尼的典型设计
Diskdemo 硬盘控制器的数字控制
Kalmdemo Kalman 滤波器设计和仿真
实用工具
Abcdchk 检测(A、B、C、D)组的一致性
Chop 取 n 个重要的位置
Dexresp 离散取样响应函数
Dfrqint 离散 Bode 图的自动定范围的算法
Dfrqint2 离散 Nyquist 图的自动定范围的算法
Dmulresp 离散多变量响应函数
Distsl 到直线间的距离
Dric 离散 Riccati 方程留数计算
Dsigma2 DSIGMA 实用工具函数
Dtimvec 离散时间响应的自动定范围算法
Exresp 取样响应函数
Freqint Bode 图的自动定范围算法
Freqint2 Nyquist 图的自动定范围算法
Freqresp 低级频率响应函数
Givens 旋转
Housh 构造 Householder 变换
Imargin 利用内插技术求增益和相位裕度
Lab2ser 变标号为字符串
Mulresp 多变量响应函数
Nargchk 检测 M 文件的变量数
Perpxy 寻找最近的正交点
Poly2str 变多项式为字符串
Printmat 带行列号打印矩阵
Ric Riccati 方程留数计算
Schord 有序 Schwr 分解
Sigma2 SIGMA 使用函数
Tfchk 检测传递函数的一致性
Timvec 连续时间响应的自动定范围算法
Tzreduce 在计算过零点时简化系统
Vsort 匹配两根轨迹的向量

68