Transcript 第二章

控制系统仿真与辅助设计
自动化工程系 刘继伟
第二章 Matlab语言基础知识
Matlab 数据结构与语句结构
语言基
础
基本控制流程结构
M函数设计
图形可视化
图形用户界面设计
数学问题求解
一点点说明
一点点建议

程序的管理
◦ 大程序按照功能块划分;
◦ 功能块间相对独立;
◦ 全局变量的隶属
 隶属关系明确—放在对应模块
 隶属关系不明—单独放在一个global文件中;
一点点建议

编程的风格
◦ 变量命名规则
 避免使用无意义的字母组合
 命名:多个名词,首字母大写,结合下划线
 Temperature
 Degree_C/ Degree_F
◦ 函数命名规则
 模块名_功能名
 Key_GetKey()
一点点建议

编程的风格
◦ 书写风格及注释
◦ 版本管理
MATLAB工作界面
当前路径
工作空间
命令窗口
历史命令
MATLAB编辑窗口
设置
断点
取消
断点
单步
运行
进入
函数
继续
运行
跳出
函数
退出
调试
MATLAB快捷键

↑ 回调上一行命令

↓ 回调下一行命令

← 左移一个字符

→ 右移一个字符

Delet Backspace 删除字符

Ctrl+C 中断MATLAB任务
通用命令

help

◦ 查看当前路径下的m
文件
◦ 帮助

clear
◦ 清除变量

clc
◦ 清屏
what

who, whos
◦ 查看workspace变量

load, save
◦ 储存、读取mat文件
2.1 MATALB语言的数据结构
变量命名规则
◦ 必须以字母开头;
◦ 可以由字母、数字和下划线混合组成;
◦ 变量长度应不大于31个;
◦ 字母区分大小写。
2.1 MATALB语言的数据结构
特殊变量—尽量避免重新赋值
变量名称
功能
变量名称
功能
ans
用于结果的
缺省变量值
pi
圆周率
realmax
最大浮点数
值
realmin
最小浮点数
值
i
虚数单位
j
虚数单位
NaN
不定式
(0/0,inf/i
nf)
nargin
函数的输入
变量数目
inf
正无穷大
eps
机器浮点运
算误差限
2.1 MATALB语言的数据结构
数据类型
◦ 在MATLAB里共有六种数据类型,每一种类型
可以是一维、二维和多维的。
 双精度型
 字符串型—单引号扩起来
 多维数组
 单元数组
 类与对象
 符号变量
2.1 MATALB语言的数据结构

基本语句结构--直接赋值语句
◦ 变量名列表=表达式
 等号左边的变量名列表为MATLAB语句的返回值,
若一次返回多个结果,则变量列表用[
]括起来,
各变量间用逗号分隔;
 等号右边为表达式,可以是矩阵运算或函数调用,
可以由分号(;)、逗号(,)或回车结束。
2.1 MATALB语言的数据结构

基本语句结构--函数调用语句
◦ [返回变量列表]=函数名(输入变量列表)
 函数应位于Matlab路径下;
 返回变量列表和输入变量列表可以有若干变量,
变量间用“,”分隔,此外,返回变量还允许用“空
格”分隔
2.1 MATALB语言的数据结构

矩阵的赋值
◦ 矩阵用“[ ]”扩起来
◦ “分号”标示换行
◦ “,”或“空格”表示同一行元素分隔

数据的存储与读取
◦ save filename A1 A2 … An
 空格分隔变量
◦ load filename
2.1 MATALB语言的数据结构

基本运算
◦ 字符型
 所有字符串都用单引号括起来;
 字符串中的每一个字符都是该字符串变量中的一
个元素;
 字符串中的字符以ASCⅡ码形式存储,因而区分
大小写。
2.1 MATALB语言的数据结构

基本运算
◦ 字符型
 建立:常用函数有char、int2str、num2str等。
 连接:
 水平连接通过函数strcat或在中括号内用逗号连接;
 垂直连接通过函数strvcat或在中括号内用分号连接。
 比较:常用函数strcmp,相同则返回1,否则为0。
 查找:常用函数findstr。
2.1 MATALB语言的数据结构

基本运算
 结构型
 直接建立结构和各个域,同时给各域赋值,结构和域之
间用点“.”连接。同样,访问结构的各个域时,其格式
为:结构名.域名
 用函数struct建立结构,其用法为:
 s=struct(‘field1’,values1,‘field2’,values2,┅)
例1
s = struct('type',{'big', 'little'},'color','red’, ‘x',{3 1})
 1×2 struct
 Field values1 values2
 Type
big
little
 Color red
red
X
3
1
 s(1).type; s(2).type
 s(1).color; s(2).color
 s(1).x;
s(2).x

2.1 MATALB语言的数据结构

基本运算
◦ 矩阵
 直接输入:>>A=[1 2, 3; 4 5 6;7, 8 9]
 冒号操作符:
 >>a=0:1:10
 >>a=linspace(0,1,10)
 >>a=logspace(1,2,10)
2.1 MATALB语言的数据结构

基本运算
◦ 矩阵
 转置
B=A’
 加减乘 A+B
A-B
A*B
 左除 A\B 即AX=B的解X=A-1B
 右除 A/B 即XB=A的解X=AB-1
 翻转 fliplr flipud
rot90
 乘方 A^B
 点运算
A.*B
A./B A.\B A.^B A.’
2.1 MATALB语言的数据结构

基本运算
◦ 逻辑运算
 & (与)
|(或)
~(非)
 结果是一个0-1矩阵。当逻辑表达式的值为真时,赋值1,否则为0
◦ 逻辑函数
 all :当某列的元素都为真时,返回值为1,否则返回0。最
终运算结果为一个0-1行向量
 any :当向量中至少有一个元素为真时,返回值为1,否则
返回0。最终运算结果为一个0-1行向量
 find:用于查找向量中的真元素的下标,返回由所有真元
素下标构成的列向量。
2.1 MATALB语言的数据结构

矩阵逻辑运算
◦ < 小于
◦ > 大于
◦ <= 小于等于
◦ >=大于等于
◦ == 等于
◦ ~=不等于
◦ 关系运算符将生成一个0-1矩阵,当运算数相应元
素为真时,对应位置上生成1,否则为0。
2.1 MATALB语言的数据结构

矩阵数据变换
◦ floor(A)
 不大于A的最大整数
◦ ceil(A)
 不小于A的最小取整
◦ round(A)
 四舍五入取整
2.1 MATALB语言的数据结构

矩阵下标操作
◦ 用两个下标来表示。第i行j列的元素用A(i,j)
来表示;
◦ 用一个下标来表示。对于矩阵按列操作,
可用单下标引用A(i) ;
◦ 在下标的表达式中使用冒号表示矩阵的一
部分;
◦ 下标引用从序号1开始。
例
A=
1 2 3
4 5 6
7 8 9
>>A(4)+A(8)
2.1 MATALB语言的数据结构

矩阵行列删除
◦ >>B=[1 2 3;4 5 6; 7 8 9];
◦ >>B(2,: )=[]
◦ >>B=
123
789
2.1 MATALB语言的数据结构

矩阵尺寸
◦ >>B=[1 2 3;4 5 6; 7 8 9];
◦ [m,n]=size(A) %返回矩阵的行数m和列数n
◦ M=size(A) %在矩阵M中返回矩阵的行数、
列数
◦ len=length(A) %返回矩阵A行数和列数中的
最大值
2.1 MATALB语言的数据结构

特殊矩阵
◦ 单位矩阵
 eye(n) %生成n维单位阵
 eye(m,n) %生成m×n的单位阵
 eye([m,n]) %生成m×n的单位阵
 eye(size(A)) %生成与A矩阵同样大小的单位矩阵
2.1 MATALB语言的数据结构

特殊矩阵
◦ 全1矩阵 ones(n) ones(m,n)
ones([m,n]) ones(size(A))
◦ 全零矩阵 zeros(n) zeros(m,n) zeros([m,n])
zeros(size(A))
◦ 随机矩阵 rand(n) rand(m,n) rand([m,n])
rand(size(A))
 生成的随机矩阵的各个元素值在0和1之间。
◦ 对角阵 diag(n)
◦ 魔术矩阵 magic(n)
 魔术矩阵的所有行元素和、列元素和、对角线元素和均相等
2.2 MATALB基本控制流程结构

循环结构
◦ for
◦ while
2.1 MATALB基本控制流程结构

循环结构
◦ for循环基本格式:
 for 循环变量=起始值:步长:终止值
 循环体
 end
◦ 步长的缺省值是1。
 步长可以在正实数或负实数范围内任意指
定;
 对于正数,循环变量的值大于终止值时,
循环结束;
 对于负数,循环变量的值小于终止值时,
循环结束。
2.1 MATALB基本控制流程结构

循环结构
◦ While循环基本格式
 while 表达式
 循环体
 end
◦ 若表达式为真,则执行循环体的内容,执行后
再判断表达式是否为真,若为假则跳出循环体,
向下继续执行,否则继续执行循环体。
◦ break:从循环体中跳出,并使循环结束
例

2.1 MATALB基本控制流程结构

转移结构
◦ if-else-elseif语句
 if 逻辑表达式
 执行语句
 end
◦ 当逻辑表达式的值为真,则执行该结构中
的执行语句内容,执行完后向下继续执行,
若逻辑表达式的值为假,跳过结构中的执
行语句继续向下执行。
例

2.1 MATALB基本控制流程结构

转移结构
◦ if-else格式
 if 逻辑表达式
 执行语句1
 else
 执行语句2
 end
◦ 如果逻辑表达式的值为真,则执行语句1,然后跳
过语句2向下执行;若逻辑表达式的值为假,则跳
过执行语句1而执行语句2,然后向下执行。
2.1 MATALB基本控制流程结构

转移结构
◦ if-elseif格式
◦ 如果逻辑表达式的值
◦ if 逻辑表达式1
 执行语句1
◦ elseif 逻辑表达式2
为真,则执行语句1,
 执行语句2
若逻辑表达式的值为
 ……
假,则判断逻辑表达
式2的值,若为真,则
执行语句2,否则向下
执行,若所有表达式均
为假,执行语句el 。
◦ elseif 逻辑表达式n
 执行语句n
◦ else
 执行语句el
◦ end
2.1 MATALB基本控制流程结构

开关结构
◦ 表达式的值和
哪种情况的值
相同,就执行
哪种情况中的
语句,如果都
不同,则执行
otherwise中的
语句。

switch 表达式(标量或字符
串)
◦ case 值1
 语句1
◦ case 值2
 语句2
◦ ┅
◦ case 值n
 语句n
◦ otherwise
 语句ow
◦ end
3.5 MATLAB程序编写及调试
MATLBA程序设计基本原则:

%后面的内容是程序的注解,要善于运用注解使程序更具可读
性。

养成在主程序开头用clear指令清除变量的习惯,以消除工作空
间中其他变量对程序运行的影响。但注意在子程序中不要用
clear。

参数值要集中放在程序的开始部分,以便维护。要充分利用
MATLAB工具箱提供的指令来执行所要进行的运算,在语句行
之后输入分号使其及中间结果不在屏幕上显示,以提高执行速
度。
MATLBA程序设计基本原则

程序尽量模块化,也就是采用主程序调用
子程序的方法,将所有子程序合并在一起
来执行全部的操作。

充分利用Debugger来进行程序的调试(设
置断点、单步执行、连续执行)

设置好MATLAB的工作路径,以便程序运
行。
MATLAB程序的基本组成结构

%说明

清除命令:清除workspace中的变量和图形(clear,close)

定义变量:包括全局变量的声明及参数值的设定

逐行执行命令:指MATLAB提供的运算指令或工具箱提供
的专用命令

控制循环:包含for,if…then,switch,while等语句

逐行执行命令

绘图命令:将运算结果绘制出来
M文件的编辑及MATLAB工作路径的设置

进入MATLAB的Editor/Debugger窗口来编辑程
序

在运行程序之前,必须设置好MATLAB的工作
路径,使得所要运行的程序及运行程序所需要
的其他文件处在当前目录之下,只有这样,才
可以使程序得以正常运行。否则可能导致无法
读取某些系统文件或数据,从而程序无法执行。
MATLAB程序类型

脚本文件

函数文件
函数定义行
H1行
函数帮助文件
函数体
function y=mean(x)
% MEAN Average or mean Value
% For vectors,Mean(x) is the mean value of X
% For matrices, Mean(x) is a row vector containing
% the mean value of each column
[m,n]=size(x)
if m==1
m=n;
end
y=sum(x)/m;
3.6 图形绘制

图形绘制

图形标注
plot(y)
plot(x,y)
 图形控制
plot(x1,y1,option1,x2,y2,option2,…)
plot控制

功能:在调用函数plot时,可以指定线型,
颜色,和数据点的图标。

格
式
:
plot
(
x
,
y
,
‘color_linestyle_marker’)

说明:参数color_linestyle_marker 为一个
字符串,由颜色、线型、数据点的图标组
成。
线性和颜色字符定义表
字符定义
线型
字符定义
线型
-
实线(默认)
--
虚线
:
点划线
-.
点连线
none
无线
字符定义
颜色
字符定义
颜色
y
yellow(黄)
m
magenta(洋红)
c
cyan(青)
r
red(红)
g
green(绿)
b
blue(兰)默认
w
white(白)
k
black(黑)
3.6 图形绘制

图形绘制

图形标注

图形控制
text(x,y,’字符串’)
gtext(‘字符串’)
title(‘字符串’)
xlabel(‘字符串’)
ylabel(‘字符串’)
3.6 图形绘制

图形绘制

图形标注

图形控制
figure(1);figure(2);…;figure(n)
grid on; grid off
hold on; hold off
axis([xmin xmax ymin ymax])
subplot(mnk)
semilogx;semilogy
绘图一般步骤

准备绘图需要的数据;

指定绘图的窗口或者区域;

调用基本绘图命令;

选择线型、颜色、数据点形状;

坐标轴控制,包括显示范围、刻度线、比例、
网格线;

标注控制,包括坐标轴名称、标题、相应文本
等。
3.7 数据处理
矩阵分解

三角分解
[L,U]=lu(A)
X=inv(A)
d=det(A)
%求矩阵A的LU分解
%求矩阵A的逆矩阵
%求矩阵A的行列式
d=eig(A);
[V,D]=eig(A);
 特征值分解
[V,D]=eig(A,'nobalance')
3.7 数据处理

多项式

多项式创建
直接输入法
poly(A)
poly(a)
例如: P=[1,2,3,4]
%创建方阵A的特征多项式
%如果a为向量[bn bn-1…b1 b0],则创建
(x-b0 )( x-b1) … (x-bn-1 )(x- bn )生成的多项式的系数向量
roots ( )
%求多项式的根
p=poly(A)
%求矩阵的特征多项式
 多项式常用函数
polyval( p,x)
%求当多项式p的参数为某个特定值x时的多项式的值
polyvalm(p,A)
%和polyval作用相同,输入参数值也可为方阵A
3.7 数据处理

卷积和解卷积
c=conv(A,B)
[Q,R]=deconv (A,B)
%卷积函数 ,多项式乘法函数
%解卷积函数,多项式除法函数
Pd=polyder(P)
%求多项式P的导数
 导数
Pm=polyder(P1,P2)
%求多项式P1和多项式P2乘积的导
数
[Q,D]=polyder(P1,P2) %求多项式P1除以多项式P2商的导
数
3.7 数据处理

多项式拟合
从最小二乘的意义上,polyfit函数将拟合出所给数
据的多项式系数,其调用格式为:
p=polyfit(x,y,n)
其中,x和y为已知数据的横坐标和纵坐标向量,n为
多项式的次数。
常微分方程数值解

[t, x]=ode23(‘xfun’, [t0, tf] x0, tol, trace)

[t, x]=ode23(‘xfun’, [t0, tf] x0, tol, trace)
范得蒙方程求解
2
d x
2 dx
  (1  x )  x  0
2
dt
dt
求解M-文件

function yp=vdp(t,x)
yp(1)=x(2);
yp(2)=2*(1-x(1)^2)*x(2)-x(1); %令u=2

在命令行求解这个方程:
[t,x]=ode45(‘vdp’,0,20,[1 ;1]);
plot(t,x(:,1),t,x(:,2));
%画出x和dx/dt的时域波形
Simulink的操作
数值仿真
系统分析

已知某控制系统的动态结构图如下图所示,
0.8s  1
D( s) 
试利用MATLAB/Simulink工具分析C值与输入
s
幅值对系统输出性能的影响。
u (t )
D( s)
-
10
0.1s 2  s
y
x(t )
..
-c1
c1
x
模型
系统分析
M-文件
plot (time, output)
grid on
%绘制曲线
%显示格栅线
xlabel (‘time/s’)
%标记横坐标轴
ylabel (‘output’)
%标记纵坐标轴
title(‘Simulation result’)
%加图名
分析结果
1.6
1.6
1.4
1.4
1.2
1.2
1
output
1
output
c1=2
c2=1
c3=0.5
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
0
0
0.5
1
1.5
2
2.5
time/s
3
3.5
a) C1=1时
4
4.5
5
0
0.5
1
1.5
2
2.5
time/s
3
3.5
4
(b) 不同的C1
磁滞回环系统的阶跃响应
4.5
5
4.5
幅值为1
幅值为3
4
3.5
output
3
2.5
2
1.5
1
0.5
0
0
0.5
1
1.5
2
2.5
time/s
3
3.5
4
4.5
5
图3-16输入幅值改变后仿真结果
本章小结





MATLAB是居于矩阵的工具包,注意应用MATLAB
时思路的转换。
使用MATLAB编写算法时注意最好不超过50行,且
尽量少用for、while的语句。
MATLAB里有充分的资源用来分析数据,在应用的
同时注意数据分析的基本原理。
MATLA有丰富的工具箱可以对许多的系统进行建模、
仿真、 分析。在使用smulink时注意合理选择步长。
MATLAB有许多的“帮助”资源,对学习和掌握
MATLAB很重要,应该在自学中广为利用。