一,基操
1,命令窗口中的标点符号:
空格:用于输入变量之间的分隔符以及数组行元素之间的分隔符。
逗号:用于要显示计算结果的命令之间的分隔符;用于输入变量之间的分隔符;用于数组行元素之间的分隔符。
点号:用于数值中的小数点。
分号:用于不显示计算结果命令行的结尾;用于不显示计算结果命令之间的分隔符;用于数组元素行之间的分隔符。
冒号:用于生成一维数值数组,表示一维数组的全部元素或多维数组的某一维的全部元素。
百分号:用于注释的前面,在它后面的命令不需要执行 。
单引号:用于括住字符串。
圆括号:用于引用数组元素;用于函数输入变量列表;用于确定算术运算的先后次序。
方括号:用于构成向量和矩阵;用于函数输出列表。
花括号:用于构成元胞数组。
下划线:用于一个变量、函数或文件名中的连字符。
续行号:用于把后面的行与该行连接以构成一个较长的命令。
“At”号 :用于放在函数名前形成函数句柄;用于放在目录名前形成用户对象类目录。
+,-,*,/,Λ:算术运算符。
2,数值计算结果的显示格式:
命令 |
含 义 |
范 例 |
format short |
短格式(默认) |
3.1416(小数点后4位有效) |
format short e |
短格式科学格式 |
3.1416e+000(5位科学计数) |
format long |
长格式 |
3.141592653589793(15位) |
format long e |
长格式科学格式 |
3.141592653589793e+000 |
format rat |
有理格式 |
355/113 |
format hex |
十六进制格式 |
400921fb54442d18 |
format bank |
银行格式 |
3.14(元角分格式) |
3,命令窗口的常用控制命令:
clc: 清屏。清除命令窗口中的所有已显示的内容。
clear: 删除内存中的变量。
what:列出当前目录下的M、MAT、MEX文件清单。
dir:显示当前目录或指定当前目录下的文件。
cd 路径:改变或显示当前工作目录;路径可省略,省略时为显示当前工作目录;cd ..表示回到上一级目录。
type:显示制定M文件的内容。
delete:删除文件。
which 文件名:指出M文件、MEX文件、工作空间变量、内置函数或Simulink模型所在的目录。
path命令
仅当前工作进程有效,重启还原
path(‘新目录’ , path )
Add the new path folder to the top of the search path.
addpath命令
addpath (’目录1’, ‘目录2’,… ,参数)
Add the path folder to the top of the search path (默认,控制参数缺省时,添加至首端)。
help命令
help命令可以获得MATLAB命令和M文件的帮助信息,如果知道准确的命令名称,使用help命令来查找最快捷。
help 命令名称
lookfor命令
lookfor命令是在所有的帮助条目中搜索关键字,常用来查找具有某种功能而不知道准确名字的命令。
lookfor 关键字 -all
打开帮助窗口命令:
helpwin、help desk、demo。
模糊查询
MATLAB 6.0以上的版本提供了一种类似模糊查询的命令查询方法,用户只需要输入命令的前几个字母,然后按Tab键,系统就会列出所有以这几个字母开头的命令
4,常用符号含义
特殊变量 |
意 义 |
ans |
如果用户未定义变量名,系统存储计算结果的默认变量名 |
pi |
圆周率π(= 3.1415926...) |
inf或Inf |
无穷大∞值,如1/0 |
eps |
浮点运算的相对精度2^(-52),计算机的最小数 |
realmax |
最大的正浮点数,2^(1024)-1 |
realmin |
最小的正浮点数,2^(-1022) |
NaN或nan |
不定量,如0/0或inf/inf |
i或j |
虚数单位 |
nargin |
函数输入参数个数 |
nargout |
函数输出参数个数 |
lasterr |
存放最新的错误信息 |
lastwarn |
存放最新的警告信息 |
5,基础知识:
①MATLAB的基本搜索过程:以>>sin(x)为例,按照以下的顺序进行搜索:
首先在MATLAB内存中进行检查,检查“sin”和“x”是否为工作空间的变量或特殊变量;
其次检查“sin”和“x”是否为MATLAB的内部函数(Built-in Function);
然后在当前目录上,检查是否有相应的“.m”或“.mex”文件存在;
最后在MATLAB搜索路径的所有其他目录中,依次检查是否有相应的“.m”或 “.mex”的文件存在;
如果都不是,则MATLAB发出错误信息。
②MATLAB文件格式(常用文件类型.m、.mat、 .fig 、.mdl、.mex、.p )
1. 程序文件:程序文件即M文件(M-File),其文件的扩展名为.m。
2.数据文件:数据文件即MAT文件,其文件的扩展名为.mat。。
3.图形文件:图形文件(Figure)的扩展名为.fig
4.模型文件:模型文件(Model)扩展名为.mdl,可以在“File”菜单中创建Model时生成.mdl文件。
5. 可执行文件:可执行文件即MEX文件,其文件的扩展名为.mex。
6. 项目文件:项目文件的扩展名为.prj。
7. P码文件:是对应M文件的一种预解析版本;当第一次执行M文件时,Matlab需要将其解析一次(第一次执行后的已解析内容会放入内存作第二次执行时使用,即第二次执行时无需再解析)
③启动变量编辑器窗口的方法有:
在工作空间窗口中双击该变量;
在工作空间窗口中选择变量,按鼠标右键在快捷菜单中选择“Open…”菜单;
单击工具栏中的打开变量(Open Selection)按钮。
④打开M文件编辑/调试器窗口的方法有:
单击MATLAB工作界面工具栏上最左边图标;
单击菜单“File”→“New”→“M-file”创建新M文件;
单击MATLAB工作界面工具栏上打开文件图标 ;
单击菜单“File”→“Open…”,在出现的“Open”对话框中选择文件名后单击“打开”按钮,打开相应文件;
用鼠标双击当前目录窗口中的M文件,可直接打开相应的文件。
⑤程序性能剖析窗口用来对M文件各命令的耗时进行分析,打开程序性能剖析窗口的方法有:
单击MATLAB工作界面工具栏上的图标;
选择菜单“Desktop”→“Profiler”;
在命令窗口中输入“profile viewer”命令。
6,资源库
国外站点:
1,MathWorks公司主页:http://www.mathworks.com
2,MATLAB file exchange:http://www.mathworks.com/matlabcentral/fileexchange/
世界各地的MATLAB编程爱好者提供的各种MATLAB函数,有很强的使用价值
3,MATLAB中心:http://www.mathworks.com/matlabcentral/
包括MATLAB新闻组,MATLAB程序大赛与文件交换中心等页面
4,德国的一个M文件数据库:http://matlabdb.mathematik.uni-stuttgart.de/index.jsp5
5,MAThTools站点:http://www.mathtools.net/MATLAB/index.html
有很多好的工具箱或者小的辅助函数
国内中文站点
1,恒润科技:http://www.hirain.com.cn公司的MATLAB国内独家代理商
2,MATLAB大观园:http://matlab.myrice.com/
3,中国学术交流园地:http://www.matwav.com/resource/newlk.asp
4仿真论坛MATLAB版:http://www.simwe.com/cgi-bin/ut/board_show.cgi?id=19&ge=30
5动力学控制论坛工程数学软件版:http://www.dytrol.com/index.asp
6,研学论坛MATLAB版:http://bbs.matwav.com/index.asp
7MATLAB语言及应用:http://sh.netsh.com/bbs/5186/
8.中科大AIAM数学工具论坛:http://mcm.ustc.edu.cn/forum/index.php
国内大学BBS
1,水木清华MathTool版:http://www.smtn.org/
2,哈工大紫丁香MATLAB版:http://bbs.hit.edu.cn
3,上海交大饮水思源Mathtools版:http://bbs.sjtu.edu.cn
4翰海星云:http://fbbs.ustc.edu.cn/
二,数值运算入门
1,变量与数据
数据的表达方式:采用十进制表示
矩阵和数组的概念 :
标量:1×1的矩阵,即只含1个数的矩阵。
向量:1×n或n×1的矩阵,即只含1行或1列的矩阵
矩阵:1个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例
数组:是指n维数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。
复数:由实部和虚部组成,用特殊变量“i”和“j”表示虚数的单位。
变量的命名应遵循如下规则:
变量名必须以字母打头,之后可以是字母、数字或下划线。
变量名区分字母大小写。
变量名最多可包含63个字符。从前向后取,超出部分忽略。
变量名不允许使用空格、标点符号。
关键字不能作为变量名。
函数的调用格式为:函数名(变量)
函数的变量即是 MATLAB 的矩阵变量,函数的运算就是将函数运算分别作用于函数变量(矩阵)的每一个元素。
注意:
1.MATLAB对弧度操作,若为角度,则换成弧度。
2.MATLAB系统提供的所有函数名都是小写字母。
abs(x):纯量的绝对值或向量的长度
angle(z):复数z的相角(Phase angle)
sqrt(x):开平方
real(z):复数z的实部
imag(z):复数z的虚部
conj(z):复数z的共轭复数
round(x):四舍五入至最近整数
fix(x):无论正负,舍去小数至最近整数
floor(x):地板函数,即舍去正小数至最近整数
ceil(x):天花板函数,即加入正小数至最近整数
rat(x):将实数x化为分数表示
rats(x):将实数x化为多项分数展开
sign(x):符号函数 (Signum function)。
rem(x,y):求x除以y的馀数
gcd(x,y):整数x和y的最大公因数
lcm(x,y):整数x和y的最小公倍数
exp(x):自然指数
pow2(x):2的指数
log(x):以e为底的对数,即自然对数或
log2(x):以2为底的对数
log10(x):以10为底的对数
MATLAB常用的三角函数
sin(x):正弦函数
cos(x):馀弦函数
tan(x):正切函数
asin(x):反正弦函数
acos(x):反馀弦函数
atan(x):反正切函数
atan2(x,y):四象限的反正切函数
sinh(x):超越正弦函数
cosh(x):超越馀弦函数
tanh(x):超越正切函数
asinh(x):反超越正弦函数
acosh(x):反超越馀弦函数
atanh(x):反超越正切函数
min(x): 向量x的元素的最小值
max(x): 向量x的元素的最大值
mean(x): 向量x的元素的平均值
median(x): 向量x的元素的中位数
std(x): 向量x的元素的标准差
diff(x): 向量x的相邻元素的差
sort(x): 对向量x的元素进行排序(Sorting)
length(x): 向量x的元素个数
norm(x): 向量x的欧氏(Euclidean)长度
sum(x): 向量x的元素总和
prod(x): 向量x的元素总乘积
cumsum(x): 向量x的累计元素总和
cumprod(x): 向量x的累计元素总乘积
dot(x, y): 向量x和y的内积
cross(x, y): 向量x和y的外积
2,矩阵
(1) 直接输入法创建矩阵
矩阵的所有元素必须放在方括号“[]”内;
矩阵元素之间必须用逗号“,”或空格隔开;
矩阵行与行之间用分号“;”或回车符隔开;
矩阵元素可以是任何不含未定义变量的表达式;
标点符号一定要在英文状态下输入。
(2) 利用MATLAB函数创建特殊矩阵
命 令 |
说 明 |
A=[] |
空矩阵,即没有元素的矩阵 |
A=eye(n) |
n维单位阵 |
A=ones(n,m) |
全部元素都为1的n行m列的矩阵 |
A=ones(n) |
全部元素都为1的n阶方阵 |
A=zeros(n,m) |
全部元素都为0的n行m列的矩阵 |
A=zeros(n) |
全部元素都为0的n阶方阵 |
A=rand(n,m) |
元素服从[0,1]区间均匀分布的n行m列的随机矩阵 |
A=rand(n) |
元素服从[0,1]区间均匀分布的n阶随机方阵 |
A=randn(n,m) |
元素服从标准正态分布的n行m列的随机矩阵 |
A=randn(n) |
元素服从标准正态分布的n阶随机方阵 |
向量的生成
(1). 利用冒号“:”运算生成向量
a=m:n 生成步长值为1的均匀等分行向量,m和n分别代表向量的起始值和终止值。
a=m:p:n 生成步长值为p的均匀等分行向量,m和n分别代表向量的起始值和终止值,p 代表向量元素之间步长值。
(2). 利用函数linspace()和logspace()生成向量
linspace(m,n) 生成从m到n之间的100个线性等分点的行向量。
linspace(m,n,s) 生成从m到n之间的s个线性等分点的行向量。
logspace(m,n) 生成从10m到10n之间50个按对数等分点的行向量。
logspace(m,n,s) 生成从10m到10n之间s个按对数等分点的行向量。
矩阵的元素
(1)矩阵的下标
在 MATLAB 中,矩阵下标的行、列号都是从 1 开始的
在MATLAB的内部数据储存结构中,每一个矩阵都是一个以列为主的向量,因此对于矩阵内各元素的存取是按列来进行总排。
冒号“:”表示“全部”。
(2)矩阵的赋值
j全下标方式:A(i,j)=B给A矩阵的部分元素赋值,则B矩阵的行列数必须等于A矩阵的行列数。
k单下标方式:A(s)=b, b为向量,元素个数必须等于A矩阵的元素个数。
l全元素方式:A(:)=B,给A矩阵的所有元素赋值则B矩阵的元素总数必须等于A矩阵的元素总数,但行列数不一定相等
(3)矩阵元素的删除
在MATLAB中可以对矩阵的单个元素、子矩阵块和所有元素进行删除操作,就是简单地将其复制为空矩阵(用[]表示)
A=[1 2 3;4 5 6;7 8 9] :生成一个矩阵用于例子。
A(1)=[] 删除1个元素
A(:,3)=[] 删除一列元素
A=[] 删除所有元素为空矩阵
(4)生成大矩阵
在MATLAB中,可以通过方括号“[ ]”实现将小矩阵联接起来生成1个较大的矩阵
a=[1 2 3;4 5 6;7 8 9] 生成一个矩阵用于例子。
[a;a] 连结成6*3的矩阵
[a a] 连结成3*6的矩阵
(5)矩阵维数的扩大与缩小
MATLAB 已定义的矩阵的维数可以扩大,也可以缩小。如果输入的同名矩阵的维数小于或大于原矩阵维数,MATLAB 认为是原矩阵修改了部分元素或子块。增加矩阵的维数时,可以只给出非零元素,MATLAB 自动将未定义元素设为 0。减小矩阵维数时,必须使用“[]”命令来对行或列进行操作,则相应的行或列即被删除。
“空矩阵”是指没有元素的矩阵,对任何一个矩阵赋值[],就是使它的元素都必须消失掉。
(6) 矩阵的翻转
命 令 |
说 明 |
flipud(A) |
矩阵作上下翻转 |
fliplr(A) |
矩阵作左右翻转 |
rot90(A) |
矩阵逆时针翻转90° |
diag(A) |
提取矩阵A的对角元素,返回列向量 |
diag(V) |
以列向量V作对角元素创建对角矩阵 |
tril(A) |
提取矩阵A的下三角矩阵 |
triu(A) |
提取矩阵A的上三角矩阵 |
(7) 矩阵的大小
命 令 |
说 明 |
whos |
显示工作空间中存在的变量及大小 |
[n,m]=size(A) |
返回A矩阵的行数和列数 |
n=length(A) |
返回A矩阵行、列数中较大值 |
[n,m]=find(A) 或 n=find(A) |
给出矩阵非零元素的行、列标记 |
复数
MATLAB的每一个元素都可以是复数,实数是复数的特例。复数的虚数部分用i或j表示,这是在MATLAB启动时就在内部设定的。
只有数字和 i的乘积可省略乘号“*”
复数矩阵的生成方法:
(1)将其元素逐个赋予复数
(2)将其实部和虚部矩阵分别赋值,“*”不能省略
3,MATLAB的基本算术运算符
数学表达式 |
矩阵运算符 |
数组运算符 |
|
加 |
a + b |
a + b |
a + b |
减 |
a - b |
a - b |
a - b |
乘 |
a * b |
a * b |
a .* b |
除 |
a÷b |
a / b 或 b \ a |
a ./ b 或 b .\ a |
幂 |
ab |
a ^ b |
a .^ b |
圆括号 |
( ) |
( ) |
( ) |
矩阵A和B的维数完全相同时,可以进行矩阵加减法运算,MATLAB会自动地使得A和B的相应元素相加减。两矩阵维数不等时,不能进行该运算。
矩阵与标量的运算完成矩阵的每一个元素对该标量的运算。
两矩阵A和B的维数相容时(A的列数等于B的行数),可以进行乘法运算。矩阵的除法运算实际上是求AX=B的解的过程
MATLAB用“^”表示乘方,求矩阵乘方时要求矩阵为方阵。
矩阵的转置用A’表示,若矩阵为复数矩阵,求转置时首先对矩阵元素进行转置,然后再逐项求取其共轭数值。
矩阵的转置还可用A.’表示
对于实矩阵用(A\')或(A.’)求转置结果是一样的;然而对于含复数的矩阵,则(A\')将同时对复数进行共轭处理,而 (A.’)则只是将其排列形式进行转置。
两个矩阵之间的点运算是两矩阵对应元素的直接运算,因此要求参与运算的两个矩阵的维数一致。
矩阵求幂的运算包括矩阵与常数和矩阵与矩阵的幂运算,用点运算的形式表示。
MATLAB的基本关系运算符及其功能:
运 算 符 |
名 称 |
== |
等于 |
~= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
关系运算的规则(通常,为了改善程序的可读性,可用括号将关系运算表达式括起来。):
参与关系运算的矩阵必须是同维矩阵或其中之一为标量。
当参与运算的矩阵之一为标量时,关系运算的结果是将矩阵的每一个元素与该标量逐一进行关系比较,若关系成立则比较结果值为“1”,若关系不成立则比较结果值为“0”。
当参与运算的矩阵是两同维矩阵A和B时,关系运算的结果是将矩阵A 和B 下标相同的对应元素逐一进行关系比较,若关系成立则比较结果值为“1”,若关系不成立则比较结果值为“0”。也即关系运算的结果是生成一个与A 和B 维数相同的矩阵,其元素值为“0”或“1”。
算术运算比关系运算具有更高的优先权。
MATLAB的基本逻辑运算符及其对应功能:
运 算 符 |
名 称 |
& |
逻辑与 |
| |
逻辑或 |
~ |
逻辑非 |
xor |
与非 |
在逻辑运算中,所有非零元素的逻辑值为“真”,用代码“1”表示,值为零的元素的逻辑值为“假”,用代码“0”表示。
a |
b |
a&b |
a|b |
~a |
xor(a,b) |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
逻辑运算的规则
参与逻辑运算的矩阵必须是同维矩阵或其中之一为标量。
逻辑运算的结果按照逻辑运算真值表生成。
当参与运算的矩阵之一为标量时,逻辑运算的结果是将矩阵的每一个元素与该标量逐一进行逻辑运算。
当参与运算的矩阵是两同维矩阵 A 和 B 时,逻辑运算的结果是将矩阵 A 和 B 下标相同的对应元素逐一进行逻辑运算。逻辑运算的结果是生成一个与 A 和 B 维数相同的矩阵,其元素值为“0”或“1”。
逻辑字符检查命令及其说明
命 令 |
说 明 |
命 令 |
说 明 |
find |
找到非零元素的序号 |
isinfinite |
元素为有限值时得1 |
isempty |
矩阵为空时得1 |
isnan |
元素为NaN时得1 |
isinf |
元素为Inf时得1 |
isreal |
矩阵为实数阵时得1 |
isstr |
矩阵为文本字符串时得1 |
issparse |
矩阵为稀疏阵时得1 |
常用的矩阵函数的简短描述
命 令 |
说 明 |
eig(A) |
求矩阵的特征值,返回列向量 |
det(A) |
行列式计算 |
expm(A) |
矩阵求幂,不是点运算 |
inv(A) |
求 A 矩阵的逆阵 |
logm(A) |
矩阵的对数,不是点运算 |
poly(A) |
求矩阵 A 的特征多项式,返回行向量 |
sqrtm(A) |
矩阵平方根,不是点运算 |
trace(A) |
求矩阵 A 对角元素之和 |
一些数据处理命令
命 令 |
说 明 |
max |
求最大元素值 |
min |
求最小元素值 |
mean |
求元素的平均值 |
std |
求元素的标准差 |
median |
求中间元素值 |
sum |
求各元素之和 |
4,多项式运算
多项式的表达与创建:
MATLAB 采用将多项式的系数按降幂次序排列而形成的行向量来表征一多项式。
表示多项式的行向量元素的个数应该为多项式的最高幂次加一。
函数roots()用于对多项式求根,求出的根按列向量存储;函数poly()用于由给定的根的列向量求多项式的系数,求出的系数按行向量存储。
多项式的根按列向量存储,多项式的系数按行向量存储
多项式的四则运算:
(1)加法与减法
多项式的加减法为多项式对应元素的加减法。多项式的阶数可以不同,但在多项式定义时,应当补充0元素使其行向量元素数目相等,否则不能相加减。
(2)乘法
两个多项式相乘由函数conv()来完成,其调用格式为:R=conv(A,B)
(3)除法
[d,r]=deconv(c,a)命令完成多项式除运算,d:商的系数向量;r:余子式的系数向量。
多项式的微分与赋值运算
(1)微分运算
多项式的微分由命令polyder完成
(2)赋值运算
给出x的范围,命令polyval可计算多项式的值。
有理多项式:
MATLAB中的有理多项式是由分子多项式和分母多项式表示的,可以用residue命令进行部分分式展开。该命令的形式为: [r,p,k]=residue(num,den)
根据给出的r,p,k的值,同样可以用residue命令求出有理多项式形式,命令格式为:[num,den]=residue(r,p,k)
5,字符运算
在MATLAB中,字符串就是一个字符数组。在MATLAB系统内部,每一个字符都由相应的ASCII码数值进行存储,但在屏幕上显示的是字符串,除了特殊的用途,一般情况下我们不访问这些数值。
在MATLAB中所有字符串都用单引号界定后输入或赋值,单引号必须在英文状态下输入。字符串的每个字符(空格也是字符)都是相应矩阵的一个元素,每个字符占用2个字节存储。字符串是以行向量的形式存储的
字符串也可以用方括号合并成更大的“串”
建立二维字符数组与建立数据数组一样可以直接输入,需要加方括号,并且每行之间用分号隔开,但每行的字符数目必须一致。
建立二维字符数组的另一个方法是用 str2mat 函数把字符串转换为字符数组,这种方法允许用不一样长度的字符串。
字符串转换函数:
函数名称 |
功 能 |
abs |
字符串到ASCII码转换 |
blanks |
空格字符串 |
deblank |
去除尾部的空格 |
eval |
运行字符串(把字符串作为表达式) |
findstr |
在字符串中找另一字符串 |
fprint |
按照给定格式把文本写到文件中或显示屏上 |
int2str |
把整数转换成字符串 |
ischar |
是字符串为真 |
lower |
将字符串变成小写 |
函数名称 |
功 能 |
num2str |
将数字转换成字符串 |
setstr |
将ASCII码转换成字符串 |
sprintf |
按照给定格式将数字转换成字符串 |
sscanf |
按照给定格式将字符串转换成数字 |
str2mat |
将字符串转换成一个字符矩阵 |
str2num |
将字符串转换成数字 |
strcmp |
字符串比较 |
strncmp |
比较前N个字符串 |
strjust |
调整字符串 |
strmatch |
找到可能的匹配字符串 |
strrep |
用一个字符串替代另一个 |
upper |
将字符串变成大写 |
“[]”建立的“空矩阵”是没有元素的矩阵,也不占据内存空间。如果对任何一个矩阵赋值为[],就是使它的元素都必须消除掉;而“zeros()”建立的“零矩阵”为有元素存在的,只是所有元素都为零,占据正常的内存空间。
三,MATLAB 程序设计
M文件
MATLAB命令有两种执行方式:
交互式命令操作方式(interactive mode)
通过命令窗口进行交互式操作;
M文件(M-file) 的编程工作方式(programming mode)。
将有关命令编成程序存储在一个M文件中,当运行该程序后, MATLAB自动依次执行该文件中的命令,直至全部命令执行完毕。
M文件的编程工作方式是实际应用中的重要执行方式
M文件:
用MATLAB语言编写的程序,称为M文件(文件名后加.m扩展名)
由若干MATLAB命令组合在一起,可以完成某些操作,也可以实现某种算法
事实上,Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言开发的 M 文件。用户也可以结合自己的工作需要,开发自己的程序或工具箱。
M文件可以根据调用方式的不同分为:
命令文件(Script File)——脚本文件
函数文件(Function File)
建立M文件的一般步骤:
打开文件编辑器:最简单的方法是在操作桌面的工具栏上选择新建文件键(New M- File)或打开已有文件键(Open File),也可以在命令窗口输入命令edit建立新文件或输入edit filename, 打开名为filename 的M文件;
编写程序内容:编写新的文件或修改已有文件;
保存文件:文件运行前必须完成保存操作,与一般的文件编辑保存操作相同;
运行文件:在命令窗口输入文件名即可运行。如要在编辑器中直接完成运行,可在编辑器的Debug菜单下save and run选项,或按Run快捷键,最快捷的方法是直接按F5键执行运行。
命令文件(Script File):
是M文件中最简单的一种
是可用于自动重复执行的一组MATLAB命令和函数组合,不需输出输入参数;
用M文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生的变量都是全局变量。
建立一个命令文件等价于从命令窗口中顺序输入文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保存成为扩展名为.m的M文件即可。
运行命令文件时,只需在命令窗口键入文件名即可。
2,程序控制结构
程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成。
顺序结构:
按排列顺序依次执行各条语句,直到程序的最后。
这是最简单的一种程序结构,一般涉及数据的输入输出、数据的计算或处理等。
数据的输入:input
A=input(提示信息)
其中 提示信息 为字符串,该命令要求用户输入 A 的值 (可以是数或字符串),
如果是输入字符串,也可以使用下面的方法
A=input(提示信息, \'s\')
注:此时输入的字符串不要加单引号!
数据的输出:disp
disp(X)
输出变量 X 的值,可以是数值矩阵或字符串
程序的暂停:pause
pause 或 pause(n)
其中 n 是延迟时间,以秒为单位;若缺省,则将暂停程序,直到用户按任意键后继续
pause off 屏蔽程序中所有 pause 的作用
pause on 打开 pause 的作用
若想强行终止程序的运行,可以使用 Ctrl+c
选择结构:
选择结构 是根据给定的条件成立或不成立,分别执行不同的语句。Matlab 用于实现选择结构的语句有
if 语句
if expression (条件) statements (语句组) end
if expression (条件) statements1(语句组1) else statements2(语句组2) end
if expression1 (条件1) statements1(语句组1) elseif expression2 (条件2) statements2(语句组2) ... ... elseif expressionm (条件m) statementsm(语句组m) else statements(语句组) end
switch 语句
switch expression (表达式) case value1 (表达式1) statement1(语句组1) case value2 (表达式2) statement2(语句组2) ... ... case valuem (表达式m) statementm(语句组m) otherwise statement (语句组) end
Matlab 首先计算 expression的值,然后将它依次与各个 case指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出 switch结构。
如果所有的比较结果都为假,则执行 otherwise后面的语句组,然后跳出 switch结构。
otherwise指令可以不出现。
switch后面的表达式 expression的值可以是一个标量或字符串。
try语句
try 语句组1 catch 语句组2 end try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。
循环结构:
循环结构 是按照给定的条件,重复执行指定的语句。Matlab 用于实现循环结构的语句有 for 语句和 while 语句
for 循环
for variable=expression statement(循环体) end 表达式 expression 可以是行向量,也可以是矩阵
注意:
不能在 for循环体内改变循环变量的值
为了提高代码的运行效率,应尽可能提高代码的向量化程度,避免 for 循环的使用
while expression (条件) statement(循环体) end
如果预先就知道循环的次数,则可以采用 for 循环;否则,如果预先无法确定循环的次数,则可以使用 while 循环。
其它流控制语句:
break 和 continue
break 语句用于终止循环的执行,即跳出循环
continue 语句用于结束本次循环,进行下一次循环
break 和 continue 一般与 if 语句配合使用
嵌套:如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。
3,函数文件
如果M文件的第一个可执行行以function开始,便是函数文件,每一个函数文件定义一个函数。函数文件区别于命令文件之处在于命令文件的变量在文件执行完成后保留在工作空间中函数文件内定义的变量只在函数文件内起作用,文件执行完后即被清除。
函数文件由 function 语句引导:
function 输出形参列表=函数名(输入形参列表)
% 注释说明部分(可选)
函数体语句(必须)
第一行为引导行,表示该 M文件是函数文件
函数名的命名规则与变量名相同 ( 必须以字母开头 )
当输出形参多于一个时,用方括号括起来
函数必须是一个单独的 M文件
函数文件名必须与函数名一致,通常为函数名.m
以百分号开始的语句为注释语句
第一注释行为大写的函数文件名和函数功能简要描述,供lookfor和help使用
第一注释行之后为函数输入/输出参数的含义及调用格式说明等信息,构成全部在线帮助文本
在线帮助文本再空一行之后的注释行,包括文件编写和修改的信息,用于软件档案管理
函数调用:
函数调用的一般格式:[输出实参列表]=函数名(输入实参列表)
函数调用时,实参的顺序应与函数定义时的形参的顺序一致。
递归函数 :
函数可以嵌套调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为递归调用。
参数的可调性:
函数所传递的参数具有可调性,这点是与一般高级语言的不同之处。
Matlab 用两个永久变量 nargin 和 nargout 分别记录调用该函数时的输入实参和输出实参的个数。
全局变量与局部变量:
局部变量
函数文件中的变量都是局部的,即一个函数文件中定义的变量不能被另一个函数文件或其它 M 文件使用
全局变量
如果在若干个 M文件中,都把某个变量定义为全局变量,则这些函数将公共使用这一变量
全局变量的作用域是整个MATLAB工作空间,所有的函数都可以对它进行存取和修改
定义全局变量是 M文件间传递信息的一种手段。
全局变量的定义:global 变量名列表
变量名列表中的各个变量用空格隔开,不能用逗号!
全局变量给函数间的数据传递带来了方便,但却破坏了函数对变量的封装,降低了程序的可读性,因而在结构化程序设计中,全局变量是不受欢迎的。特别是当程序较大,子程序较多时,全局变量将个程序调试和维护带来不便,故不提倡使用全局变量。
4,程序调试
应用程序的错误有两类
语法错误
包括词法或文法的错误,例如函数名的拼写错误、表达式书写错误等。
MATLAB能检测出大多数该类错误,给出错误信息,并指出出错的位置。
运行时的错误
程序的运行结果有错误,这类错误也称为程序逻辑错误。
MATLAB系统对程序逻辑错误无能为力
直接调试法、工具调试法
直接调试法是指利用Matlab的相关指令对程序进行调试:
将程序执行的中间结果输出到命令窗口,以方便检查
去掉分号
利用disp函数显示中间变量的值
在适当位置使用keyboard函数中断程序,进入调试状态,实现交互式调试;
在函数定义行前加“%”,使之变成脚本语言
利用echo指令,在屏幕上逐行显示运行程序内容
CTL+C强行停止程序
直接调试法常用辅助函数:
常用指令:return、echo、input、pause、break
echo可使文件命令在执行时可见,这对程序的调试和演示很有用
Keboard请求键盘输入命令
Pause等待用户反应指令
警告指令:error,warning,lasterr,lastwarn
提示指令:warndlg,errordlg
工具调试法:
(1)在程序可疑处设置断点;
(2)执行程序;
(3)检查程序运行至断点处变量当前值
(4)在程序中一步步执行
(5)结束调试状态。
(6)取消断点。
工具调试法——调试菜单项:
1.Debug菜单项 该菜单项用于程序调试,需要与Breakpoints菜单项配合使用。
Step:单步运行
Step In:单步运行,调用函数时进入函数程序
Step Out:在函数中的话跳出函数,否则直接跳入下个断点处
Run:运行
Go Until Cursor:运行到光标处
Breakpoints菜单项
set/clear breakpoint:设置清除断点
set/modify conditional breakpoint:设置或修改条件断点,条件断点可以使程序满足一定条件时停止
enable/diable breakpoints:使断点有效或无效
clear breakpoints in all files:清除所有断点
stop if errors/warnings:程序出现错误或警告时停止运行,进入调试但不包括try...catch中的错误
常见错误:
中英文输入法未注意
习惯用i,j作为变量
变量名同函数名文件名相同
搜索路径设置不当
调试命令:
除了采用调试菜单调试程序外,MATLAB还提供了一些命令用于程序调试。
调试命令的功能和调试菜单命令类似
dbstop in <M文件名> at <行号> :在M文件中设置断点;
Dbclear清除断点
dbcont继续
dbquit退出调试
dbstack显示当前堆栈的状态
dbstatus显示所有已设置的断点
dbstep执行一行或多行代码
dbtype显示M文件代码和相应的行号
MATLAB程序设计原则和技巧:
1、%后面的内容是程序的注解,要善于运用注解使程序更具可读性。
2、养成在主程序开头用clear指令清除变量的习惯,以消除工作空间中其他变量对程序运行的影响。但注意在子程序中不要用clear。
3、参数值要集中放在程序的开始部分,以便维护。要充分利用MATLAB工具箱提供的指令来执行所要进行的运算,在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。
4、程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作。
5、充分利用Debugger来进行程序的调试(设置断点、单步执行、连续执行)
6、设置好MATLAB的工作路径,以便程序运行。
四,MATLAB 符号运算
Matlab 的符号数学工具箱可以完成几乎所有得符号运算功能。主要包括:符号表达式的运算,符号表达式的复合、化简,符号矩阵的运算,符号微积分、符号作图,符号代数方程求解,符号微分方程求解等。此外,该工具箱还支持可变精度运算,即支持以指定的精度返回结果。
数值计算特点:
以数值数组作为运算对象,给出数值解;
计算过程中产生误差累积问题,影响计算结果的精确性;
计算速度快,占用资源少。
符号计算特点:
以符号对象和符号表达式作为运算对象,给出解析解;
运算不受计算误差累积问题的影响;
计算指令简单;
占用资源多,计算耗时长。
符号运算与数值运算的区别:
数值运算中必须先对变量赋值,然后才能参与运算
符号运算无须事先对独立变量赋值,运算结果为标准的符号形式表达。
创建符号对象:
MATLAB提供了两个专门创建符号型对象的函数:sym和syms。
(1)sym函数 ——创建单个符号变量
格式:
A =sym(‘A’) %创建一个符号变量A
(2) syms函数 ——创建多个符号变量
sym函数一次只能定义一个变量,使用不方便。syms函数可以一次定义多个符号变量。
格式:
syms arg1 arg2 ...
一次性地创建多个变量。变量名argN上不需加单引号“\'”,变量名之间用空格(不能用逗号)隔开。
syms函数是sym的简约形式,相当于: arg1 = sym(\'arg1\'); arg2 = sym(\'arg2\');
符号常量和变量:
(1) 符号常量
MATLAB中函数sym( )可以将一个数值常量A 定义成一个符号常量,调用格式为:sym(A) 或 sym(A,flag)
其中flag 为可选参数,分别是‘r’、‘d’、‘e’或‘f ’,它们将数值量转换成符号量并以各自不同的格式表达其结果。
选项 |
意 义 |
r |
默认值,用有理数格式表达符号量,如分式p/q、指数式10^n 或2^n开方式sqrt(p)等 |
d |
用十进制数格式表达符号量(默认显示精度32 位) |
e |
用带有机器浮点误差的有理数格式表达符号量 |
f |
用浮点数格式表达符号量 |
(2)符号变量
符号变量也称*变量,是内容可变的符号对象
符号变量通常是指一个或几个特定的字符,不是指符号表达式。用户可以将一个符号表达式赋值给一个符号变量。
符号变量命名规则和数值变量的命名规则相同
定义符号变量有两种方法:
使用sym函数
使用syms函数
创建符号表达式:
符号表达式是由符号常量、符号变量、符号函数运算符以及专用函数连接起来的符号对象。
符号表达式包括符号函数或符号方程。符号函数没有等号,而符号方程必须有等号。
MATLAB在内部把符号表达式表示成字符串,以与数字变量或运算相区别,否则,这些符号表达式几乎完全像基本的MATLAB命令。
创建符号表达式有2种方式:
用sym函数直接建立符号表达式;
使用已定义的符号变量组成符号表达式。
(1)用函数sym生成符号表达式
格式:
符号变量名=sym(\'符号字符串\')
创建一个符号标量,并生成表达式。其中符号字符串可以是常量、变量、函数或表达式。
(2) 用已经定义过的变量生成符号表达式
符号表达式包括符号函数和符号方程。符号函数是由数字和变量组成的代数式,而符号方程则是由表达式和等号组成的等式。
MATLAB中只能用sym函数创建符号方程,格式为: equ=sym(‘equation’)
创建符号矩阵:
(1)用sym函数创建符号矩阵
命令格式:
A=sym(\'[ ]\')
符号矩阵内容同数值矩阵。矩阵元素可以是任何不带等号的表达式(元素长度可以不同),矩阵行之间用“;”隔开,各元素之间用“,”或空格隔开。
(2) 字符串直接输入法
这种方法类似于数值矩阵的创建方法,不需要使用sym函数,但需保证同一列中各元素字符串长度相同(在较短的字符串前后可用空格补齐)
将数值矩阵转换为符号矩阵:
在MATLAB中,数值矩阵不能直接参与符号运算,必须先转换为符号矩阵,转换过程由系统内部自动完成,也可通过命令形式进行转换。
转换命令:
S=sym(M) %M为待转换的数值矩阵,S为符号矩阵
不论原来数值矩阵元素是分数还是浮点数,转换后符号矩阵都以最接近原数的精确有理式形式给出。
符号矩阵的索引和修改:
符号矩阵的检索方法与数值矩阵完全相同。修改方法有两种:
检索后直接修改;
使用替换函数 A1=subs(A, ‘new’, ‘old’) %A为待修改的矩阵,new、old分别为替换后和替换前矩阵元素中变量名、字符串等。
测量符号矩阵的大小:
用函数size( )可以得到符号矩阵的大小(即行、列数)。
符号矩阵的基本运算:
1) 基本运算符:+、-、*、\、/、.*、.\、./、.^、’ 、.’
2) 三角函数与反三角函数:sin、cos、tan、… …
3) 指数、对数函数:sqrt、exp、log、… …
4) 复数函数:real、imag、conj、 abs
5) 矩阵函数:det、inv、rank、 … …
6) 矩阵元素的抽取:diag、tril、triu
相关函数:
findsym: 查找符号表达式中的符号变量
findsym(f)
按字母顺序列出符号表达式 f 中的所有*变量findsym(f,N)
列出 f 中距离 x 最近的 N 个*变量(i,j 除外)
subs:符号替换
subs(f): 用当前工作空间中存在的变量值,替换 f中所有出现的相同的变量,并进行简化计算。
subs(f,x,a):用 a替换 f 中的 x;a 是可以是 数/数值变量/表达式 或 符号变量/表达式。
若x与a为相同大小的向量或矩阵,则用a中相应的元素替换x中的元素;
若f,x为标量,而a是向量或矩阵,则f与x将扩展为与a相同形状的向量或矩阵。
六种常用符号运算:
因式分解:factor
展开函数: expand
合并同类项: collect
collect(f,v): 按指定变量 v 的次数合并系数;
collect(f): 合并 f 中的默认自变量的各项系数
简化函数: simple 和 simplify
simple(f)
对 f 尝试多种不同的算法简化,返回其中最短的简化形式
[R,HOW]=simple(f)
R为f的最短简化形式,HOW中记录的为简化过程中使用的主要方法。
分式通分: numden
[N,D]=numden(f): N为通分后的分子,D为通分后的分母
嵌套形式的多项式
求极限:
limit(f,x,a):
limit(f,a): 计算默认自变量趋向于a时f的极限
limit(f): 计算 a=0时的极限
limit(f,x,a,’right’):右极限
limit(f,x,a,’left’):左极限
计算导数:
diff(f,’v’): 计算 f 关于变量 v 的导数
diff(f): 计算 f 关于默认自变量的导数
diff(f,n),diff(f,’v’,n),diff(f,n,’v’): n次求导
计算积分:
int(f,v,a,b):计算定积分
int(f,a,b): 计算 f 关于默认自变量 的定积分
int(f,v):计算不定积分
int(f):计算 f 关于默认自变量 的不定积分
符号求和:
symsum(f,v,a,b): 求和
symsum(f,a,b): 关于默认自变量 求和。
代数方程的符号求解:
求解线性代数方程组的函数linsolve,调用格式为:linsolve(A,b)
求解非线性方程组的函数是solve,调用格式为:solve(\'eqn1\',\'eqn2\',…,\'eqnN\',\'var1,var2,…,varN\')
常微分方程的符号求解:
求解常微分方程的函数dsolve。调用格式为:dsolve(\'eqn1\',\'condition\',\'var\')
该函数求解微分方程eqn1在初值条件下的特解。
参数var描述方程中的自变量符号,省略时按缺省原则处理,若没有给出初值条件condition,则求方程的通解。
dsolve在求微分方程组时的调用格式为:dsolve(\'eqn1\',\'eqn2\',…,\'eqnN\',\'condition1\',…,\'conditionN\',\'var1\',…,\'varN\')
函数求解微分方程组eqn1、…、eqnN在初值条件
conditoion1、…、conditionN下的解,若不给出初值条件,则求方程组的通解,var1、…、varN给出求解变量。
复合函数计算:compose:
compose(f,g): 返回f(g(y)),其中f=f(x),g=g(y),x,y 分别是 f 和 g 的默认自变量。
compose(f,g,z):返回f(g(z)),其中x,y 分别是 f,g的默认自变量,最后用符号变量z代替y。
compose(f,g,v,z):返回f(g(z)),v为f中指定的自变量,令v=g(z),代入 f=f(v)。
compose(f,g,v,w,z):返回f(g(z)),其中v,w分别为f,g的指定自变量,即将v=g(w)代入f(v),最后用z代替w
计算反函数:finverse:
finverse(f): 返回f关于默认自变量的反函数,若f的反函数g存在,则有g(f(x))=x。
finverse(f,v): 返回f关于自变量v的反函数g,即 g(f(v))=v。
积分变换:
1. 傅立叶(Fourier)变换
fourier(fx,x,t) 求函数f(x)的傅立叶像函数F(t)。
ifourier(Fw,t,x) 求傅立叶像函数F(t)的原函数f(x)。
2. 拉普拉斯(Laplace)变换
laplace(F,x,t) 求函数f(x)的拉普拉斯像函数F(t)
ilaplace(L,t,x) 求拉普拉斯像函数F(t)的原函数f(x)。
积分变换的应用:
级数的符号求和:求和函数symsum,调用格式为:symsum(expr, v, a, b )
函数的泰勒级数:将函数展开为幂级数的函数taylor,其调用格式为:taylor(f, n, v,a)。将函数f在a处展开到变量v的(n-1)次幂
五,数据和函数的可视化
离散数据和离散函数的可视化:
任何二元实数标量对(x,y)可用平面上的一个点表式;任何二元实数向量对(x,y)可用平面上的一组点表示。对于离散实函数yn=f(xn),当 xn以递增(或递减)次序取值x=[x1,x2,…,xN]T时,根据函数关系可求得同样数目的yn,y=[y1,y2,…,yN]T。当把这向量对用直角坐标中的点序列图示时,就实现了离散函数的可视化。
连续函数的可视化:
与离散函数可视化一样,进行连续函数可视化也必须先在一组离散自变量上计算相应的函数值,并把这一组“数据对”用点图示。但这些离散的点不能表现函数的连续性。
为了进一步表示离散点之间的函数情况,在MATLAB中,有两种常用处理方法:
对区间进行更细的分割,计算更多的点,去近似表现函数的连续变化;
把两点用直线连接,近似表现两点间的(一般是非线性的)函数性状。
注意:倘若自变量的采样点数不足够多,则无论哪种方法都不能真实地反映原函数。
二维曲线绘制的基本指令plot:
plot —— 最基本的二维图形指令
plot的功能:
plot命令自动打开一个图形窗口Figure
用直线连接相邻两数据点来绘制图形
根据图形坐标大小自动缩扩坐标轴,自动标注数据标尺及单位标注
1. 基本调用格式plot (x,y,‘s\')
输入量 (x,y,‘s’) 称为平面绘线三元组
(1) 一维数组(x,y)指定采样点的横坐标和纵坐标。
(2) ’ s ’是字符串,用来设定“离散点形” 或/和“连续线型”,也指定“点线色彩”。颜色字符串用英文单词的前1~3个字母,如yellow—yel(或y或ye)表示等。
(3) 若没有第三个输入量,将采用默认设置:蓝色细实线。
离散数据点形允许设置值:
符号 |
含 义 |
符号 |
含 义 |
. |
实心点 |
d |
菱形符 diamond |
+ |
十字符 |
h |
六角星 hexagram |
* |
米字符 |
o |
空心圆圈 |
^ |
朝上三角符 |
p |
五角星 pentagram |
< |
朝坐三角符 |
s |
方块符 square |
> |
朝右三角符 |
x |
叉字符 |
v |
朝下三角符 |
连续线型允许设置值:
符号 |
- |
: |
-. |
-- |
含义 |
实线 |
虚线 |
点划线 |
双划线 |
点线色彩允许设置值:
符号 |
b |
g |
r |
c |
m |
y |
k |
w |
含义 |
蓝 |
绿 |
红 |
青 |
品红 |
黄 |
黑 |
白 |
2. plot的衍生调用格式
(1) 单色或多色绘制多条曲线plot(X,Y,’s’)
X、Y是均为(m×n)矩阵时,则以X、Y对应列元素为横、纵坐标分别绘制n条曲线。
X、Y之一是一维数组,且数组长度与另一个矩阵输入量的“行数”(或“列数”)相等时,将绘制出“列数”(或“行数”)条曲线。
’s’ 用来指定多条曲线用同一色彩绘制。
X、Y均是一维数组时,就是基本调用格式。
plot(X,Y) 指令采用细实线绘制多条彩色曲线
(2)多三元组绘制多条曲线:plot(x1,y1,’s1’,x2,y2,’s2’)
在此格式中,每个绘线“三元组”(X, Y, ’s’)的结构和作用,与plot(X,Y,’s’) 相同。不同的“三元组”之间没有约束关系。
(3)单输入量绘线:plot(Y)
Y是实向量时,以该向量元素的下标为横坐标、元素值为纵坐标画出一条连续曲线。
Y是实矩阵时,则按列绘制每列元素值相对其下标的曲线。图中曲线数等于Y阵列数。
Y是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线
3. plot的属性可控调用格式:plot(x,y, \'PropertyName\', PropertyValue,…)
含义 |
属性名 |
属性值 |
说明 |
点、线颜色 |
Color |
[Vr,Vg,Vb], 取 [0,1] |
默认为\'b\' |
线 型 |
LineStyle |
\'-\', \':\', \'-.\', \'-\' |
默认为实线 |
线 宽 |
LineWidth |
正实数 |
默认为0.5 |
点 形 状 |
Marker |
\'d\', \'+\', … |
可通过s设置 |
点 大 小 |
MarkerSize |
正实数 |
默认为6.0 |
常用的坐标控制指令:
坐标轴控制方式、取向和范围 |
坐标轴的高宽比 |
||
指 令 |
含 义 |
指 令 |
含 义 |
axis auto |
使用缺省设置 |
axis equal |
纵、横轴采用等长刻度 |
axis manual |
使当前坐标范围不变 |
axis fill |
在manual方式下起作用,使坐标充满整个绘图区 |
axis off |
取消轴背景 |
axis image |
纵、横轴采用等长刻度,且坐标框紧贴数据范围 |
axis on |
使用轴背景 |
axis normal |
缺省矩形坐标系 |
axis ij |
矩阵式坐标,原点在左上方 |
axis square |
产生正方形坐标系 |
axis xy |
普通直角坐标,原点在左下方 |
axis tight |
把数据范围直接设为坐标范围 |
Axis(V) V=[x1,x2,y1,y2]; V=[x1,x2,y1,y2,z1,z2]; |
人工设定坐标范围。设定植:二维,4个;三维,6个 |
axis vis3d |
保持高宽比不变,用于三维旋转时避免图形大小变化 |
说明:坐标范围设定向量V中的元素必须服从:x1<x2,y1<y2,z1<z2。V的元素值允许取inf或-inf,那意味着上限或下限是自动产生的,即坐标范围半自动确定。 |
坐标控制和图形标识:
分格线和坐标框:
grid 是否画分格线的双向切换指令(使当前分格线状态翻转)
grid on 画出分格线
grid off 不画分格线
box 坐标形式在封闭式和开启式之间切换指令
box on 使当前坐标呈封闭形式
box off 使当前坐标呈开启形式
默认设置:不画出分格线,所画坐标呈封闭形式。
图形标识
图形标识包括:图名(Title)、坐标轴名(Label)、图形注释(Text)和图例(Legend)。
标识指令的最简捷使用格式如下:
xlabel(S) 横坐标轴名
title(S) 书写图名
ylabel(S) 纵坐标轴名
legend(S1,S2,…) 绘制曲线所用线型、色彩或数据点形图例
text(xt,yt,S) 在图面(xt,yt)坐标处书写字符注释
图形标识用的希腊字母:
指令 |
字符 |
指令 |
字符 |
指令 |
字符 |
指令 |
字符 |
||||
\alpha |
α |
\theta |
θ |
\Xi |
Е |
\phi |
φ |
||||
\beta |
β |
\Theta |
Θ |
\pi |
π |
\Phi |
Φ |
||||
\gamma |
γ |
\iota |
ι |
\Pi |
Π |
\chi |
χ |
||||
\Gamma |
Г |
\kappa |
κ |
\rho |
ρ |
\psi |
ψ |
||||
\delta |
δ |
\lambda |
λ |
\sigma |
σ |
\Psi |
Ψ |
||||
\Delta |
Δ |
\Lambda |
Λ |
\Sigma |
Σ |
\omega |
ω |
||||
\epsilon |
ε |
\mu |
μ |
\tau |
τ |
\Omega |
Ω |
||||
\zeta |
ζ |
\Nu |
ν |
\upsilon |
υ |
||||||
\eta |
η |
\xi |
ξ |
\Upsilon |
Y |
||||||
指令 |
效果 |
指令 |
效果 |
指令 |
效果 |
||||||
\'sin\bezt\' |
sinβ |
\'\zeta\omega\' |
ξω |
\'\itA{\in}R^{m\timesn}\' |
A Rm×n |
标识指令中字符的精细控制:
上下标的控制指令 :
分类 |
指令 |
arg取值 |
举例 |
|
示例指令 |
效果 |
|||
上标 |
^{arg} |
任何合法字符 |
\'\ite^{-t}sint\' |
e-tsint |
下标 |
_{arg} |
任何合法字符 |
\'\x~{\chi}_{alpha}^{2}(3)\' |
x
|
字体式样设置规则 :
字样 |
指令 |
arg取值 |
||
示例指令 |
效果 |
|||
名称 |
\fontname{arg} |
arial; courier; roman;宋体; 隶书;黑体 |
\'\fontname{courier}Example 1\' \'\fontname{隶书}范例2\' |
Example1 范例2 |
风格 |
\arg |
bf (黑体) it (斜体1) bf (斜体2) bf (正体) |
\'\bf Example 3\' \'\itExample 4\' |
Example 3 Example 4 |
大小 |
\fontsize{arg} |
任何合法字符 |
\'\x~{\chi}_{alpha}^{2}(3)\' |
x
|
多次叠绘、双纵坐标和多子图:
1. 多次叠绘
实际应用中,还会遇到在已经存在的图上再绘制一条或多条曲线的情况。MATLAB提供了以下指令:
hold on 使当前轴及图形保持而不被刷新,准备接受此后将绘制的新曲线
hold off 使当前轴及图形不再具备不刷新的性质
hold 当前图形是否具备刷新性质的双向切换开关
2. 双纵坐标图
在实际应用中常常提出这样一种需求:把同一自变量的两个不同量纲、不同数量级的函数量的变化绘制在同一张图上。
plotyy(X1,Y1,X2,Y2)
%以左、右不同纵轴绘制X1-Y1,X2-Y2两条曲线
plotyy(X1,Y1,X2,Y2,FUN)
%以左、右不同纵轴把X1-Y1,X2-Y2绘制成绘图函数名FUN指定形式的两条曲线。
plotyy(X1,Y1,X2,Y2,FUN1,FUN2)
%以左,右不同纵轴 把X1-Y1,X2-Y2绘制成绘图函数名FUN1,FUN2指定的不同形式的两条曲线。
3. 多子图
MATLAB允许用户在同一图形窗中布置几幅独立的子图,具体指令是:
subplot(m,n,k) 使(m×n)幅子图中的第k幅成为当前图。
subplot(‘position’,[left bottom width height]) 在指定位置上开辟子图,并成为当前图。
获取二维图形数据的指令:
ginput:[x,y]=ginput(n)
用鼠标从二维图形上获取n个点的数据坐标(x,y)。
该指令仅适用于二维图形。
具体操作方法:指令运行后,会把当前图形从后台调到前台,同时鼠标光标变为十字叉;用户可移动鼠标,使十字叉移到待取坐标点;点动鼠标左键,便获得该点数据;此后,用同样的方法,获取其余点的数据;当n个点的数据全部取到后,图形窗便退回后台,返回到ginput执行前的环境
gtext:gtext(arg),
用鼠标把字符串或字符串异质(元胞)数组arg放置到图形上。
该指令对二维、三维图形都适用。
具体操作方法:指令运行后,当前图形窗自动由后台转为前台,鼠标光标变为十字叉;移动鼠标,使十字叉移到希望的位置;点动鼠标右键,arg所承载的字符将被放在紧靠十字叉点的“第一象限”位置。
legend:legend(arg,pos) 在指定位置建立图例;legend off 擦除当前图上的图例
说明:
输入变量arg是图例中的说明文字注释。
输入变量pos是图例在图上位置的指定符,它可取下表中的值。
Legend在图形窗中产生后,可用鼠标对其进行拖拉,即把鼠标光标移到图例上,按住鼠标左键;图例将随鼠标移动,直到满意位置;放开按键便完成操作。
pos取值 |
0 |
1 |
2 |
3 |
4 |
-1 |
图例位置 |
自动取最佳位 |
右上角(缺省值) |
左上角 |
左下角 |
右下角 |
图右侧 |
三维曲线和曲面图:
1 三维线图指令plot3:
plot3(X,Y,Z ’s’)
plot3(X1,Y1,Z1,\'s1\', X2,Y2,Z2,\'s2\', …)
X,Y,Z是同维向量时,则绘制以X,Y,Z元素为x,y,z坐标的三维曲线.
X,Y,Z是同维矩阵时,则以X,Y,Z对应列元素为x,y,z坐标分别绘制曲线.曲线条数等于矩阵列数
s,s1,s2的意义与二维情况相同,是主要用于指定线型,色彩,数据点形的选项字符串。
二维图形的所有基本特性对三维图形全都适用
定义三维坐标轴大小:
axis([xmin xmax ymin ymax zmin zmax ] )
grid on(off) 绘制三维网格
text(x,y,z,‘string’) 三维图形标注
子图和多窗口也可以用到三维图形中
2 三维曲面/网线图:
(1)三维图形的数据准备
1)确定自变量x,y的取值范围和取值间距.如x=x1:dx:x2; y=y1:dy:y2
2)构成xy平面上的自变量格点矩阵: [X,Y]=meshgrid(x,y);
3)计算在自变量采样格点上的函数值,即Z=f(X,Y)
x —— 1×m数组, y —— 1×n数组
生成X,Y格点坐标 —— [X,Y]=meshgrid(x,y)
X由x(1×m)按行放置,再纵向扩展n行
Y由y(1×n)按列放置,再横向扩展m行
结果:X和Y均成为n×m矩阵
表达式点运算 —— Z=X.^2+Y.^2
X, Y, Z是n×m的数组,维数可任定
默认方位角:-37.5º,俯角30º。
(2) 绘制曲面/网线图基本指令格式
mesh(Z)--->以Z矩阵列、行下标为x,y轴自变量,画网线图.
mesh(X,Y,Z)--->最常用的网线图调用格式
mesh(X,Y,Z,C)--->最完整的格式,画由C指定用色的网线图
surf(Z)--->以Z矩阵列,行下标为x,y轴自变量,画曲面图.
surf(X,Y,Z)--->最常用的曲面图调用格式
surf(X,Y,Z,C)--->最完整调用格式,画由C指定用色曲面图.
在最完整的调用格式中,四个输入变量都是维数相同的矩阵。X,Y是自变量,格点矩阵,Z是格点上的函数矩阵。C指定点的用色,可以缺省,此时取C=Z单输入变量格式绘图时,把Z矩阵的列下标当作x坐标轴的自变量,把Z的行下标当作y坐标轴的自变量。
3 曲面/网线图的精细修饰
(1)视角控制view
改变观察点是获得较好三维视觉效果的重要途径.
一般而言,三维图形的观测角度是由方位角(Azimuth)及仰角(Elevation)来决定
view([az,el])--->通过方位角,俯视角设置视点.
view([vx,vy,vz])--->通过直角坐标设置视点.
对二维图形而言,默认值为 az = 0°,el = 90°;
对三维图形而言,默认值为 az = -37.5°,el = 30°.
(2) 色彩控制:Colormap(CM)
%设置当前图形窗的着色色图为CM。
色图为(m×3)矩阵,它的每一行是RGB三元组。
预定义色图矩阵是由[0,1]区间数据组成的(64×3)矩阵.
Jet是默认色图。
(3)浓淡处理
shading options % options可取以下方式:
指令 |
功能 |
|
shading faceted |
瓷砖”的颜色是均匀一致的,而且同时显示“瓷砖”交接的“边”。(此为缺省值) |
|
shading flat |
“瓷砖”的颜色是均匀一致的。 |
|
shading interp |
使用双线性插值来使“瓷砖”根据四顶点的颜色产生连续的变化 |
(4)透明控制
alpha(v):0<v<1 用于曲面图形,0表示完全透明,1表示不透明。
根据3个数据m×n矩阵X,Y和Z所绘制得到的曲面为例,Matlab有三种透明度的处理方式
标量:使所有数据点都设置相同的透明度
线性数据:使曲面的数据点的透明度按照某个指定的维数的方向线性变化
矩阵:使每个数据点选取不同的透明度
alpha(v):0<v<1 用于曲面图形,0表示完全透明,1表示不透明。
(5)灯光设置light
light(\'Color\',option1,\'Style\',option2,\'Position\',option3)
color属性表示光的颜色;可取相应的颜色字符或RGB三元组
style属性表示光源形式;选项有\'infinite\'和\'local\'两个取值,分别表示无限远的平行光源和近光源。
position属性表示光源位置。position属性的选项取三维坐标点组成的向量形式[x,y,z]。 Option3,对于远光,表示光线穿过改点射向原点;对于近光,表示源的位置
默认设置:白光,无穷远,穿过[1,0,1]射向坐标原点。
(6)照明模式lighting
lighting options
该指令只有在light指令执行后才起作用。
指令 |
功能 |
flat |
入射光均匀洒在图形对象的每个面上(缺省模式) |
gouraud |
先对顶点颜色进行插补,再对顶点勾画的面色进行插补,用于曲面表现。 |
phong |
对顶点处法线进行插值,再计算各像素的反光,表现效果最好,但费时。 |
none |
关闭所有的光源。 |
(7) 控制光反射的材质指令material
指令 |
功能 |
shiny |
使对象比较明亮,镜面反射额较大,反射光的颜色取决于光源的颜色。 |
dull |
使对象比较暗淡,漫反射额较大,反射光的颜色取决于光源的颜色。 |
metal |
使对象有金属光泽,反射光的颜色取决于光源的颜色和土星表面的颜色(此为缺省值) |
default |
返回到Matlab缺省值 |
4 透视,镂空和裁切
(1) 图形的透视
matlab在采用缺省设置画mesh图形时,对叠压在后面的图形采取了消隐措施,若需要透视效果,可以通过相关的指令来实现.
hidden off--->透视被叠压的图形
hidden on--->消隐被叠压的图形
(2) 图形的镂空
(3) 裁切
由NaN处理的图形不会产生切面,为了看清图形而需要表现切面,那么应该把被切部分强制为零.
高维可视化:
1 二维半图指令pcolor, contour, contourf
动态图形:
彗星状轨迹图
comet(x,y,p) 二维彗星轨线
comet(x,y,z,p) 三维彗星轨线
p 指定彗星体的长度p*length(y),缺省的p值为0.1。三维图形中彗星体的长度p*length(z)
色图的变幻
matlab为颜色的动态变化提供了一个指令spinmap。它的功能是使当前图形的色图做循环变化,以产生动画效果.该指令不涉及图形对象特性的操作,只限于对色图的操作。该指令只对256色设置有效。
spinmap--->使色图周期旋转3s
spinmap(t)--->使色图周期旋转ts
spinmap(inf)--->使色图无限制旋转下去,用Ctrl+C键终止旋转
spinmap(t,inc)--->分别用t,inc(缺省为2)控制色图旋转的时间和快慢
spinmap(t,inc)--->分别用t,inc(缺省为2)控制色图旋转的时间和快慢
3,影片动画:
matlab支持影片动画(movie):先把一组二维或三维图形存储起来,然后再把这组图形回放。由于“视觉残留”,于是产生动画效果。
M(i)=getframe--->对当前图形拍照后产生的数据向量依次存放于画面结构数组中。
movie(M,k)--->以不超过每秒12帧的速度把M中的画面播放k次。
由M(i)=getframe所产生的M(i)是一个结构数组,它有两个域: M(i).cdata和M(i).colormap
动画的几个典型的产生方法: (1)改变某参数,获得一组画面,如驻波,行波的产生. (2)对产生的某三维图形,改变观察角,获得一组画面. (3)对产生的某三维图形,运用rotate旋转指令,获得一组画面.
4,制作实时动画的基本方法:
先画出初始图形,
再计算活动对象的新位置,并在新位置上把它显示出来,
最后擦除原位置上原有的对象,刷新屏幕
重复操作即可产生动画效果。
5,图形窗功能:
(1)运行指令汇出简图
(2)利用图形窗进行编辑
(3)改变坐标轴范围
(4)改变包络线线型及颜色
(5)调制曲线线型、点型、色彩的设置
(6)调制曲线过零点的点型、色彩的设置
六,GUI界面设计
Matlab中设计图形用户界面的方法有两种:使用可视化的界面环境和通过编写程序。
图形用户界面设计工具的启动方式:
1. 命令方式
图形用户界面GUI设计工具的启动命令为guide,格式为:
1)guide
功能:启动GUI设计工具,并建立名字为untitled.fig的图形用户界面。
2)guide filename
功能:启动GUI设计工具,并打开已建立的图形用户界面filename。
2. 菜单方式
Matlab为GUI设计提供4种模板,分别是:
Blank GUI(Default)(空白模板,默认);
GUI with Uicontrols(带控件对象的GUI模板);
GUI with Axes and Menu(带坐标轴与菜单的GUI模板);
Modal Question Dialog(带模式问题对话框的GUI模板)。
当用户选择不同的模板时,在GUI设计模板界面的右边就会显示出与该模板对应的GUI图形。
图形用户界面GUI设计窗口由菜单栏、工具栏、控件工具栏以及图形对象设计区等4个功能区组成。
图形用户界面开发环境(GUIDE):
Matlab提供了一套可视化的创建图形窗口的工具,使用图形用户界面开发环境可方便地创建GUI应用程序,它可以根据用户设计的GUI布局,自动生成M文件的框架,用户使用这一框架编制自己的应用程序。主要包括:
布局编辑器(Layout Edtor)——在图形窗口中创建及布置图形对象
几何排列工具(Alignment Tool)——调整各对象相互之间的几何关系和位置;
属性查看器(Property Inspector)——查询并设置属性值;
对象浏览器(Object Browser)——用于获得当前Matlab图形用户界面程序中的全部对象信息,对象的类型,同时显示控件的名称和标识,在控件上双击鼠标可以打开该控件的属性编辑器;
菜单编辑器(Menu Editor)——创建、设计、修改下拉式菜单和快捷菜单;
Tab顺序编辑器(Tab Order Editor)——用于设置当用户按下键盘上的Tab键时,对象被选中的先后顺序。
控件对象及属性:
1. GUI控件对象类型
Matlab中的控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应。一种为静态控件,是一种不产生响应的控件,如静态文本框等。
控件对象是事件响应的图形界面对象。当某一事件发生时,应用程序会做出响应并执行某些预定的功能子程序(Callback).
1) 按钮(Push Buttons):执行某种预定的功能或操作;
2) 开关按钮(Toggle Button):产生一个动作并指示一个二进制状态(开或关),当点击它时按钮将下陷,并执行callback(回调函数)中指定的内容,再次点击,按钮复原,并再次执行callback 中的内容;
3) 单选框(Radio Button):单个的单选框用来在两种状态之间切换,多个单选框组成一个单选框组时,用户只能在一组状态中选择单一的状态,或称为单选项;
4) 复选框(Check Boxes):单个的复选框用来在两种状态之间切换,多个复选框组成一个复选框组时,可使用户在一组状态中作组合式的选择,或称为多选项;
5) 文本编辑器(Editable Texts):用来使用键盘输入字符串 的值,可以对编辑框中的内容进行编辑、删除和替换等操作;
6) 静态文本框(Static Texts):仅用于显示单行的说明文字;
7) 滚动条(Slider): 可输入指定范围的数量值;
8) 组合板(Panel):在图形窗口中对控件分组组合;
9) 列表框(List Boxes):在其中定义一系列可供选择的字符串
10) 弹出式菜单(Popup Menus): 让用户从一列菜单项中选择一项作为参数输入;
2.控件对象的属性:
每种控件都有一些可以设置的参数,用于表现控件的外形、功能及效果,即属性。属性由两部分组成:属性名和属性值,它们必须是成对出现的。
用户可以在创建控件对象时,设定其属性值,未指定时将使用系统缺省值。
两大类控件对象属性:第一类是所有控件对象都具有的公共属性,第二类是控件对象作为图形对象所具有的属性。
1)控件对象的公共属性
Children 取值为空矩阵,因为控件对象没有自己的子对象
Parent取值为某个图形窗口对象的句柄,该句柄表明了控件对象所在的图形窗口;
Tag取值为字符串,定义了控件的标识值,在任何程序中都可以通过这个标识值控制该控件对象;
Type 取值为uicontrol,表明图形对象的类型;
UserDate取值为空矩阵,用于保存与该控件对象相关的重要数据和信息;
Visible取值为on 或off。
2)控件对象的基本控制属性
BackgroundColor取值为颜色的预定义字符或RGB数值;缺省值为浅灰色;
Callback取值为字符串,可以是某个M文件名或一小段Matlab语句,当用户激活某个控件对象时,应用程序就运行该属性定义的子程序;
Enable取值为on(缺省值),inactive和off;
Extend取值为四元素矢量[0, 0, width, height],记录控件对象标题字符的位置和尺寸;
ForegroundColor取值为颜色的预定义字符或RGB数值,该属性定义控件对象标题字符的颜色;缺省值为黑色;
Max,Min取值都为数值,缺省值分别为1和0;
String取值为字符串矩阵或块数组,定义控件对象标题或选项内容;
Style取值可以是pushbutton(缺省值), radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox;
Units取值可以是pixels (缺省值), normalized(相对单位), inches, centimeters(厘米)或points(磅);
Value取值可以是矢量,也可以是数值,其含义及解释依赖于控件对象的类型。
3) 控件对象的修饰控制属性
FontAngle取值为normal(正体,缺省值), italic(斜体), oblique(方头);
FontName取值为控件标题等字体的字库名;
FontSize取值为数值;
FontUnits取值为points(缺省值), normalized, inches, centimeters或pixels;
FontWeight取值为normal(缺省值), light,demi和bold,定义字符的粗细;
HorizontalAligment取值为left,center (缺省值) 或 right,定义控件对象标题等的对齐方式。
4)控件对象的辅助属性
ListboxTop取值为数量值,用于listbox控件对象;
SliderStep取值为两元素矢量[minstep,maxstep],用于slider控件对象;
Selected取值为on 或off(缺省值);
SlectionHighlight取值为on 或off(缺省值)。
5)Callback管理属性
BusyAction取值为cancel或queue(缺省值);
ButtDownFun取值为字符串,一般为某个M文件名或一小段Matlab程序;
Creatfun 取值为字符串,一般为某个M文件名或一小段Matlab程序;
DeletFun取值为字符串,一般为某个M文件名或一小段Matlab程序;
HandleVisibility取值为on(缺省值), callback或off;
Interruptible取值为on 或off(缺省值)。
3. 控件对象的建立
在图形窗口界面有各种各样的控件,利用这些控件可以实现有关控制
Matlab提供了用于建立控件对象的函数uicontrol,其调用格式为:
对象句柄=uicontrol(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,…)
菜单设计:
1. 建立用户菜单
建立自定义的用户菜单的函数为uimenu,格式为:
Hm=uimenu(Hp,属性名1,属性值1,属性名2,属性值2,…)
功能:创建句柄值为Hm的自定义的用户菜单。其中Hp为其父对象的句柄,属性名和属性值构成属性二元对,定义用户菜单的属性。
因其调用方法不同,该函数可以用于建立一级菜单项和子菜单项。
建立一级菜单项的函数调用格式为:
一级菜单项句柄=uimenu(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,…)
建立子菜单项的函数调用格式为:
子菜单项句柄=uimenu(一级菜单项句柄,属性名1,属性值1,属性名2,属性值2,…)
2 . 菜单对象常用属性
菜单对象除具有Children(子对象),Parent(父对象),Tag(标签),Type(类型),UserData(用户数据),Enable(使能)和 Visible(可见性)等公共属性,还有一些常用的特殊属性,如回调(callback)属性和菜单名(label)。 另外,用户菜单的外观有四个属性:Position(位置),Separator(分隔线),checked(检录符)和ForeGroundColor(前景颜色)。
1)Tag属性
Tag属性的取值是字符串,它定义了该菜单对象的一个标识值。定义了Tag属性后,在任何程序中都可以通过这个标识值找出该菜单对象。
2)Type属性
Type属性的取值总是uimenu,这个属性值标明图形对象的类型。对菜单对象,其类型就是uimenu,用户不能改写这个属性。
3)UserData属性
UserData属性的取值是一个矩阵,缺省值为空矩阵,用户可以在这个属性中保存与该菜单对象相关的重要数据或信息,借此可以达到传递数据或信息的目的。可以用set和get函数访问该属性。
3. 快捷菜单
快捷菜单是用鼠标右键单击某对象时在屏幕上弹出的菜单。这种菜单出现的位置是不固定的,而且总是和某个图形对象相联系。
在Matlab中,可以使用uicontextmenu函数和图形对象的UIContextMenu属性来建立快捷菜单,具体步骤为:
1) 利用uicontextmenu函数建立快捷菜单,格式为:hc=uicontextmenu %建立快捷菜单,并将句柄值赋给变量hc
2)利用uimenu函数为快捷菜单建立菜单项,格式为:uimenu(‘快捷菜单名’,属性名,属性值,...)
功能:为创建的快捷菜单赋值,其中属性名和属性值构成属性二元对。
3) 利用set函数将该快捷菜单和某图形对象联系起来。
七,Simulink建模仿真
利用Simulink进行系统仿真的步骤:
启动Simulink,打开Simulink模块库
打开空白模型窗口;
建立Smulink仿真模型;
设置仿真参数,进行仿真;
输出仿真结果。
模块库和系统仿真:
1 Simulink模块库
1) Sources库
也可称为信号源库,该库包含了可向仿真模型提供信号的模块。它没有输入口,但至少有一个输出口。
2) Sinks 库
该库包含了显示和写模块输出的模块
3)Continuous 库
该库包含描述线性函数的模块。
4) Math 库
该库包含描述一般数学函数的模块。
5) Signals Routing 库
子系统创建与封装:
1 子系统的创建
1) 通过子系统模块来建立子系统
在Simulink库浏览器,有一个子系统(Subsystems)的库模块,点击该图标即可看到不同类型的子系统模块。
下面以PID控制器子系统创建,说明子系统的创建过程:
① 将子系统库模块中的Subsystem模块复制到模型窗。
② 双击该图标即打开该子系统的编辑窗口;
③ 将组成子系统的模块填加到子系统编辑窗口:
④ 将模块按设计要求连接:
⑤ 设置子系统各模块参数(可以是变量);修改 in1 和 out1 模块下面的标签;
⑥ 关闭子系统的编辑窗口,返回模型窗口,修改子系统的标签(PID),该PID子系统即可作为模块在构造系统模型时使用。
2)组合已存在的模块来建立子系统
如果现有的模型已经包含了需要转化成子系统的模块,就可以通过组合这些模块的方式建立子系统。步骤如下:
① 确定需建立Subsystem的模型(被选中的均标记有黑块)
② 点击模型窗Edit菜单下的Create Subsystem 命令,则所选定的模型组合自动转化成子系统:
③ 双击该图标,可打开该子系统窗口,改写输入输出符号:
④ 关闭子系统编辑窗口,设置子系统标签,则系统模型如右图所示:
2 子系统的封装
子系统可以建立自己的参数设置对话框,以避免对子系统内的每个模块分别进行参数设置,因此在子系统建立好以后,需对其进行封装。子系统封装的基本步骤如下:
① 设置好子系统中各模块的参数变量;
② 定义提示对话框及其特性;
③ 定义被封装子系统的描述和帮助文档;
④ 定义产生模块图标的命令。
3 条件子系统
1)使能子系统
该子系统当使能端控制信号为正时,系统处于“允许”状态,否则为“禁止”状态。“使能”控制信号可以为标量,也可以为向量。当为标量信号时,只要该信号大于零,子系统就开始执行;当为向量信号时,只要其中一个信号大于零,也“使能”子系统。
2) 触发子系统
触发子系统只在触发事件发生的时刻执行。所谓触发事件也就是触发子系统的控制信号,一个触发子系统只能有一个控制信号,在Simulink中称之为触发输入。
触发事件有4种类型,即上升沿触发、下降沿触发、跳变触发和回调函数触发。双击触发子系统中的触发器模块(Trigger),在弹出的对话框中可选择触发类型。