第2章 MATLAB程序设计基础.docx
《第2章 MATLAB程序设计基础.docx》由会员分享,可在线阅读,更多相关《第2章 MATLAB程序设计基础.docx(53页珍藏版)》请在冰豆网上搜索。
第2章MATLAB程序设计基础
第二章程序设计基础
MATLAB既是一种运行环境,又是一种编程语言。
MATLAB的编程语言是一种以矩阵和数组为基本单位的编程语言,具有结构化和面向对象的特点。
MATLAB中的所有数据都是以矩阵形式存储的,而不是像其他编程语言那样,是对单独的一个数据进行操作,因此MATLAB的编程代码非常直观,开发环境也更加简洁。
本章重点介绍MATLAB的基本程序设计和设计技巧
2.1MATLAB的基本程序设计原则
MATLAB语言简洁紧凑,使用起来极为方便灵活,它的运算符也十分丰富,因此它的程序的写法也非常简单,读者只要掌握以下几个原则就可以开始编写程序了:
(1)设置完整的路径,最好把当前的处理位置设定为CurrentDirectory
(2)参数值要集中放在程序的开始部分,便于程序维护
(3)若在每行程序的最后输入分号‘;’,则执行时程序行不会显示在屏幕上
如果不输入分号,执行的程序行会显示在屏幕上
(4)符号‘%’后面的内容是程序的注解,不作为指令运行
(5)遇到不明白的指令,多使用在线帮助命令,或系统演示示例
(6)程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作
(7)注意变量的定义
(8)留意各种指令的书写格式
MATLAB程序的基本组成部分如下:
%说明部分
清除命令(可选)
定义变量(局部变量和全局变量)
按照顺序行执行的命令语句
控制语句开始
控制语句体
……
控制语句结束
其它命令(如绘图等)
2.2工作路径的正确设置
对于用户程序中使用的文件名和变量名,系统按照以下顺序搜索:
查找对象是否是工作空间的变量
查找对象是否是系统的内部函数
查找对象是否是在系统的当前目录下的文件
按照系统设置的搜索路径顺序查找用户对象
因此,必须设置好MATLAB的工作路径,不然很可能无法读取某些系统文件或数据而导致程序无法执行。
路径设置有两种方法,一是在命令窗口下使用cd指令,象DOS命令那样直接更改工作路径。
如果目前程序放在D盘的my_pro中,执行MATLAB前最好先把路径设到D:
\my_pro中,以避免不必要的错误,例如要把工作路径设到D:
\my_pro下,可以执行:
cdD:
\my_pro
另一种方法是在菜单中选择File->SetPath,就会出现SetPath窗口,然后单击‘AddFolder’按钮就出现如图2-1所示的‘浏览文件夹’窗口:
图2-1浏览文件夹窗口
在上面的窗口中选中D盘中的Fa然后单击‘确定’,就又回到如图2-2所示的setpath窗口,此时在‘MATLABsearchpath’框中,就能看到第一行就是我们刚刚添加的工作路径,再单击‘close’按钮回到命令窗口。
利用此方法,也可以设置用户想要设置的路径。
图2-2setpath窗口
2.3常量和变量
MATLAB中使用的数据有常量和变量。
作为纯量的实数常量,类似于C语言中的整型常量和实型常量,常量的表示方法一般采用十进制数字表示,可以带正负号和小数点;当然也可采用科学记数法。
如:
12.50.00332e-7pi2+3i等都是MATLAB的合法常量。
这里的2e-7表示2
10
,2+3i是复数常量,它是由实数与虚数单位i组成。
MATLAB中的变量一般无须事先定义。
一个程序中的变量以其名称在操作语句中第一次合法出现而定义。
如果这个变量已经存在,那么MATLAB将改变它的内容,如a=2.5这里定义了一个变量a并给它赋值2.5;如果再输入a=3,那么变量a的值就变为3了。
MATLAB中的变量命名应该遵循以下规则:
(1)变量名必须以字母开头,后面可以是任意的字母,数字或下划线
(2)MATLAB的变量名有效的最大长度是31
(3)MATLAB的变量要区分大小写,如:
MY_NAME,My_name,my_name分别表示不同的变量
另外,MATLAB设置了一些特殊的变量和常量。
它们是:
(1)ANS——缺省变量名,以操作中的最近应答作为它的值。
例如:
>>x=2^3%输入变量名x
x=
8
>>2^3%不输入任何变量名
ans=%缺省变量名为ans
8
(2)pi——圆周率
例如:
>>x=pi;
>>y=cos(x)
y=
-1
(3)i或j——虚数单位
例如:
>>x=2+i;
>>y=1-i;
>>z=x*y
z=
3.0000-1.0000i
(4)eps——浮点数的相对误差,将其加到数值1上以后,可得到系统所能表示的大于1的最小值。
其数值量级为10
例如在命令窗口中输入eps,其结果为:
ans=
2.2204e-016
(5)NaN或nan)代表不定值(或称非数)
INF代表数学中的正无穷大
(6)NARGIN函数输入参数的个数
NARGOUT函数输出参数的个数
(7)version表示MATLAB的版本
2.4程序的运算符
MATLAB的运算符可分为三类:
算术运算符、关系运算符和逻辑运算符。
其中算术运算符的优先级最高,其次是关系运算符,再其次是逻辑运算符。
下面将分别介绍这三类运算符和逻辑函数。
2.4.1算术运算符
加法+
减法-
乘法*
除法/
左除\(主要用于矩阵的除法)
乘方^
执行时的优先法则按照以下规则:
(1)表达式从左到右执行
(2)乘方运算具有最高的优先级
(3)乘法和除法运算具有相同的次优先级。
加法和减法具有相同的最低优先级。
(4)括号可以改变优先次序,括号由最内层的括号向外执行
例如:
>>A=[123;456;789];%输入一个3
3的矩阵
>>b=10;
>>A+b%矩阵A与标量b相加
ans=
111213
141516
171819
>>B=ones(3);%输入一个3
3阶的全为1的矩阵
>>A-B%矩阵A与矩阵B相减
ans=
012
345
678
>>S=A*B%矩阵的乘法
S=
666
151515
242424
>>r=3;
>>U=A.^3%矩阵的乘方
U=
1827
64125216
343512729
>>X=[23;13];
>>Y=[14;79];
>>Z=[25;68];
>>W=2*X+Y^3-Z%按照顺序执行
W=
311477
8291259
>>W1=(2*X+Y)^3-Z%先计算2*X+Y,接着计算它的3次方,最后减去Z
W1=
23734145
37296517
>>W2=2*(X+Y)^3-Z
%先计算X+Y,接着计算它的3次方,然后再乘以2,最后减去Z
W2=
20683425
39146472
2.4.2关系运算符
关系运算符对于程序的流程控制非常有用,在MATLAB的循环和条件控制中经常使用。
MATLAB里共有6个关系运算符:
小于<小于等于<=
大于>大于等于>=
等于==不等于~=
注意:
(1)所有关系运算符连接的两个运算数必须是同维、每维同大小的
(2)对于长方形矩阵和向量,两个运算数或者同维、同大小,或者其中一个为标量
(3)有一个运算数是标量时,关系运算符把标量和另一个运算数的每个运算进行比较。
(4)对于大小相同的两个矩阵,对它们进行关系运算时,是对相应的每一个元素进行比较,如果能够满足指定的关系,则返回1,否则返回0。
例如:
>>A=[1,2;3,4]%输入一个矩阵(二维数组)
A=
12
34
>>B=[1,0;3,5]%输入一个矩阵(二维数组)
B=
10
35
>>A
ans=
00
01
>>A>2%矩阵和标量进行关系运算
ans=
00
11
>>C=[123;321;213];
>>D=[223;333;111];
>>C==D
ans=
011
100
010
>>C~=D
ans=
100
011
101
>>C>=D
ans=
011
100
111
2.4.3逻辑运算符
MATLAB里共有4个逻辑运算符:
与&
或|
非~
逻辑异或XOR
和关系运算符一样,除了逻辑运算符的一个运算数为长方阵或向量时,另一个运算数可为标量,其余情况下均要求矩阵同维。
逻辑运算符也是对运算数的相应元素一一运算,最后返回一个0-l矩阵。
当逻辑表达式的值为真时,返回1,否则返回0。
下面为这4个逻辑运算符的使用例子:
>>A=[1,0;2,3];%输入一个矩阵
>>B=[1,1;2,2];%输入一个矩阵
>>A&B%与运算
ans=
10
11
>>A|B%或运算
ans=
11
11
>>~A%非运算
ans=
01
00
>>XOR(A,B)%逻辑异或
ans=
01
00
>>x=3;
>>x|(XOR(A,B))
ans=
11
11
>>C=[-101;30-3;70-7];
>>D=1;
>>xor(C,D)
ans=
010
010
010
2.4.4常用的逻辑函数
MATLAB提供了一些逻辑运算函数,在这里介绍几个常见的函数
all(A)只要向量A中有一个非0元素,结果就是1;否则结果为0
any(A)当向量的元素全为0时,结果才是1,否则是0
isempty(x)判断向量是否为空
isfinite(x)对应x中有限大小元素的位置取1,其余元素取0
isinf(x)对应x中无穷大元素的位置取1,其余元素取0
isletter(x)对应x中英文字母的元素的位置取1,其余元素取0
以下是几个逻辑函数运算的例子:
>>A=[1,2,0,3,0,4];%输入一个行向量
>>all(A)
ans=
0
>>A=[1,2;0,3;0,4];%输入一个矩阵
>>all(A)
ans=
01
>>any(A)
ans=
11
>>C=[2,0,1;5,inf,NaN];
>>isfinite(C)
ans=
111
100
>>isinf(C)
ans=
000
010
另外,利用函数logical可以将数字值转换为逻辑值
函数logical的调用格式:
K=logical(A)
说明:
返回能够用于逻辑索引或逻辑测试的矩阵
例如:
>>A=rand(4)%生成一个4阶随机矩阵
A=
0.95010.89130.82140.9218
0.23110.76210.44470.7382
0.60680.45650.61540.1763
0.48600.01850.79190.4057
>>B=logical(eye(4))%生成一个4阶单位矩阵
B=
1000
0100
0010
0001
>>A(B)%返回