第 2章 MATLAB数据
2.1 MATLAB数据的特点
2.2 变量和赋值
2.3 MATLAB矩阵
2.4 MATLAB运算
2.5 字符串
2.6 结构和单元
2.1 MATLAB数据的特点
1,矩阵是 MATLAB最基本,最重要的数据对象 。
单个数据 (标量 )可以看成是矩阵的特例 。
2,MATLAB数据类型
数值数据:双精度型,单精度数,带符号整数和无符号整数 。
字符数据 。
结构 (Structure)和单元 (Cell)。
多维矩阵和稀疏矩阵 (Sparse)。
2.2 变量和赋值
2.2.1 变量的命名
在 MATLAB中,变量名是以字母开头,
后接字母,数字或下划线的字符序列,
最多 19个字符 。
在 MATLAB中,变量名区分字母的大小写 。 MATLAB提供的标准函数名以及命令名必须用小写字母 。
2.2.2 赋值语句
MATLAB赋值语句有两种格式:
(1) 变量 =表达式
(2) 表达式
一般地,运算结果在命令窗口中显示出来 。 如果在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果 。
在 MATLAB语句后面可以加上注释,注释以 %
开头,后面是注释的内容 。
例 2.1 计算表达式的值,并将结果赋给变量 x,
然后显示出结果 。
在 MATLAB命令窗口输入命令:
x=(5+cos(47*pi/180))/(1+sqrt(7)-2*i) %计算表达式的值
2.2.3 数据的输出格式
MATLAB用十进制数表示一个常数,具体可采用日常记数法和科学记数法两种表示方法 。
数据输出时用户可以用 format命令设置或改变数据输出格式 。 format命令的格式为:
format 格式符
注意,format命令只影响数据输出格式,而不影响数据的计算和存储 。
2.2.4 预定义变量在 MATLAB工作空间中,还驻留几个由系统本身定义的变量 。 它们有特定的含义,在使用时,应尽量避免对这些变量重新赋值 。
2.2.5 内存变量的管理
1,内存变量的显示与删除
who和 whos这两个命令用于显示在 MATLAB工作空间中已经驻留的变量名清单 。
clear命令用于删除 MATLAB工作空间中的变量 。
注意,预定义变量不能被删除 。
2,工作空间浏览器
(1) 工作空间浏览器的启动
(2) 工作空间浏览器的操作
3,内存变量文件
利用 MAT文件 (.mat)可以把当前 MATLAB
工作空间中的一些有用变量长久地保留下来 。
MAT文件的生成和装入由 save和 load命令来完成 。 常用格式为:
save 文件名 [变量名表 ] [-append][-ascii]
load 文件名 [变量名表 ] [-ascii]
2.3 MATLAB矩阵
2.3.1 矩阵的建立
1,直接输入法将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔 。 例如
A=[1 2 3;4 5 6;7 8 9]
2,利用 M文件建立矩阵对于比较大且比较复杂的矩阵,可以为它专门建立一个 M文件 。
例 2.2 利用 M文件建立 MYMAT矩阵 。
(1)启动有关编辑程序或 MATLAB文本编辑器,
并输入待建矩阵,
(2)把输入的内容以纯文本方式存盘 (设文件名为 mymatrix.m)。
(3)运行该 M 文件,就会自动建立一个名为
MYMAT的矩阵,可供以后使用 。
3,利用 MATLAB函数建立矩阵
几个产生特殊矩阵的函数,zeros,ones,eye、
rand,randn。
这几个函数的调用格式相似,下面以产生零矩阵的 zeros函数为例进行说明 。 其调用格式是:
zeros(m) 产生 m× m零矩阵
zeros(m,n) 产生 m× n零矩阵。
zeros(size(A)) 产生与矩阵 A同样大小的零矩阵
相关的函数有,length(A)给出行数和列数中的较大者,即 length(A)=max(size(A)); ndims(A)给出
A的维数 。
例 2.3 分别建立 3× 3,3× 2和与矩阵 A同样大小的零矩阵 。
(1)建立一个 3× 3零矩阵,zeros(3)
(2)建立一个 3× 2零矩阵,zeros(3,2)
(3)建立与矩阵 A同样大小零矩阵,zeros(size(A))
此外,常用的函数还有 reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵 A重新排成 m× n的二维矩阵 。
4,建立大矩阵大矩阵可由方括号中的小矩阵建立起来 。
例如
A=[1 2 3;4 5 6;7 8 9];
C=[A,eye(size(A)); ones(size(A)),A]
2.3.2 冒号表达式
冒号表达式的一般格式:
e1:e2:e3
还可以用 linspace 函数产生行向量:
linspace(a,b,n)
linspace(a,b,n)与 a:(b-a)/(n-1):b等价 。
2.3.3 矩阵的拆分
1,矩阵元素
MATLAB允许用户对一个矩阵的单个元素进行赋值和操作 。 例如
A(3,2)=200
也可以采用矩阵元素的序号来引用矩阵元素 。
矩阵元素按列编号,先第一列,再第二列,
依次类推 。
以 m× n矩阵 A为例,矩阵元素 A(i,j)的序号为
(j-1)*m+i。 其相互转换关系也可利用 sub2ind
和 ind2sub函数求得 。
2,矩阵拆分
(1)利用冒号表达式获得子矩阵
① A(:,j)表示取 A矩阵的第 j列全部元素; A(i,:)表示 A
矩阵第 i行的全部元素; A(i,j)表示取 A矩阵第 i行,第
j列的元素 。
② A(i:i+m,:)表示取 A矩阵第 i~ i+m行的全部元素;
A(:,k:k+m)表示取 A矩阵第 k~ k+m列的全部元素,
A(i:i+m,k:k+m)表示取 A矩阵第 i~ i+m行内,并在第
k~ k+m列中的所有元素 。
此外,还可利用一般向量和 end运算符等来表示矩阵下标,从而获得子矩阵 。 end表示某一维的末尾元素下标 。
(2)利用空矩阵删除矩阵的元素
在 MATLAB中,定义 []为空矩阵 。 给变量 X赋空矩阵的语句为 X=[]。
注意,X=[]与 clear X不同,clear是将 X从工作空间中删除,而空矩阵则存在于工作空间,只是维数为 0。
将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一种有效的方法 。
2.3.4 多维矩阵以三维矩阵为例,常用的方法有 4种:
(1)对二维矩阵进行扩充得到三维矩阵 。
(2)若干个同样大小的二维矩阵进行组合得到三维矩阵 。
(3)除产生单位矩阵的 eye函数外,前面介绍的建立矩阵的函数都可以延伸到三维矩阵 。
(4)用 cat函数构建多维矩阵 。 一般调用格式是:
cat(n,A1,A2,…,An)
cat函数把大小相同的若干矩阵,沿第 n维方向串接成高维矩阵 。 当 n=1和 2时,沿行和列的方向串接,
结果是二维矩阵 。 当 n=3时,沿页的方向串接,结果是三维矩阵 。
2.4 MATLAB运算
2.4.1算术运算
1,基本算术运算
MATLAB的基本算术运算有:+ (加 ),- (减 ),*(乘 )、
/(右除 ),\(左除 ),^(乘方 )。
注意,运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例 。
2,点运算点运算符有,*,./,.\和,^。 两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同 。
3,MATLAB常用数学函数
2.4.2 关系运算
MATLAB提供了 6种关系运算符,<(小于 ),<=(小于或等于 ),>(大于 ),>=(大于或等于 ),==(等于 ),~ =(不等于 )。
关系运算符的运算法则 。
例 2.4 产生 5阶随机方阵 A,其元素为
[10,90]区间的随机整数,然后判断 A的元素是否能被 3整除 。
(1) 生成 5阶随机方阵 A。
A=fix((90-10+1)*rand(5)+10)
(2) 判断 A的元素是否可以被 3整除 。
P=rem(A,3)==0
2.4.3 逻辑运算
MATLAB提供了 3种逻辑运算符,&(与 )、
|(或 )和~ (非 )。
运算法则 。
例 2.5 在 [0,3π]区间,按要求求 y=sin(x)的值:
方法 1:
x=0:pi/100:3*pi;y=sin(x);
y1=(x<pi|x>2*pi).*y; %消去负半波
q=(x>pi/3&x<2*pi/3)|(x>7*pi/3&x<8*pi/3);
qn=~q;
y2=q*sin(pi/3)+qn.*y1; %按要求处理第 (2)步方法 2:
x=0:pi/100:3*pi;y=sin(x);
y1=(y>=0).*y; %消去负半波
p=sin(pi/3);
y2=(y>=p)*p+(y<p).*y1; %按要求处理第 (2)步
2.5 字符串
字符串是用单撇号括起来的字符序列 。 例如,'Central South University'。 若字符串中的字符含有单撇号,则该单撇号字符应用两个单撇号来表示 。
字符串是以 ASCII码形式存储的 。 abs和
double函数都可以用来获取字符串矩阵所对应的 ASCII码数值矩阵 。 相反,char函数可以把 ASCII码矩阵转换为字符串矩阵 。
例 2.6 建立一个字符串向量,然后对该向量做如下处理:
(1)取第 1~5个字符组成的子字符串 。
(2)将字符串倒过来重新排列 。
(3)将字符串中的小写字母变成相应的大写字母,其余字符不变 。
(4)统计字符串中小写字母的个数 。
与字符串有关的另一个重要函数是 eval,
其调用格式为:
eval(t)
其中 t为字符串 。 它的作用是把字符串的内容作为对应的 MATLAB语句来执行 。
例如
t=pi;
m='[t,sin(t),cos(t)]';
y=eval(m)
2.6 结构和单元
2.6.1 结构数据
MATLAB通过使用结构( Structure)数据类型把一组不同类型的数据同时又是在逻辑上相关的数据组成一个有机的整体,以便于管理和引用。
1,结构矩阵的建立与引用
2,结构成员的修改
2.6.2 单元数据单元 ( Cell) 数据的概念与结构有些类似,
也是把不同属性的数据放在一个变量中 。 所不同的是,结构变量的各个元素下有成员,
每个成员都有自己的名字,对成员的引用是:
结构变量名,成员名 。 而单元矩阵的各个元素就是不同类型的数据,用带有大括号下标的形式引用单元矩阵元素 。