- Matlab R2016a从入门到精通 (CAX工程应用丛书)
- 温欣研
- 2299字
- 2020-11-28 23:50:35
2.4 矩阵基础
矩阵的基本操作主要包括构造矩阵、改变矩阵维度与矩阵大小、矩阵索引、获取矩阵属性信息等。MATLAB提供了相应的命令或相应的库函数与各操作对应。
2.4.1 有关概念
有关矩阵的概念,可以参考有关的数学书籍,这里不再赘述。但向量其本质上是一维的矩阵,在使用MATLAB进行科学计算时,基本不区分矩阵与向量,因此需要注意。
数组是在程序设计中,把具有相同类型的若干变量按有序的形式组织起来的一种形式,这些按序排列的同类数据元素的集合称为数组。
矩阵和数组在MATLAB中的区别主要表现在两方面:
● 矩阵是数学上的概念,而数组是计算机程序设计领域的概念。
● 矩阵作为一种变换或者映射运算符的体现,其运算有着明确而严格的数学规则;而数组运算是MATLAB软件定义的规则。
两者的联系主要体现在,矩阵是以数组的形式存在的,一维数组相当于向量,二维数组相当于矩阵,可将矩阵视为数组的子集。
2.4.2 创建矩阵
矩阵可以通过两种方式创建:
● 对变量直接进行赋值;
● 使用MATLAB提供的特殊矩阵创建函数,如表2.17所示。
表2.17 特殊矩阵的创建函数
注:k=0为主对角线;k< 0为下第k对角线;k> 0为上第k对角线。
下面介绍简单矩阵和特殊矩阵的创建方法。
1.创建简单矩阵
采用矩阵构造符号——方括号“[]”,将矩阵元素置于方括号内,同行元素之间用空格或逗号来隔开;行与行之间用分号“; ”隔开。
例2-34,创建简单矩阵示例。
在命令行窗口输入命令:
A = [1,2,3;4,6,8] % 逗号和分号的使用构造矩阵 B = [2 3 4;3 2 1] % 空格和分号的使用构造矩阵 V1 = [6,9,12,3] % 构造行向量 V2 = [1;8] % 构造列向量
程序运行过程中的输出为:
A = 1 2 3 4 6 8 B = 2 3 4 3 2 1 V1 = 6 9 12 3 V2 = 1 8
2.创建特殊矩阵
使用表中命令可以创建特殊矩阵。
例2-35,创建特殊矩阵示例。
在命令行窗口输入:
OnesMat= ones(2) ZerosMat= zeros(2) IdenMat = eye(2) IdenMat23 = eye(2, 3) IdenMat32 = eye(3, 2)
输出结果如下:
OnesMat = 1 1 1 1 ZerosMat = 0 0 0 0 IdenMat = 1 0 0 1 IdenMat23 = 1 0 0 0 1 0 IdenMat32 = 1 0 0 1 0 0
3.创建空矩阵
可以使用[]代表空矩阵,通过直接赋值的方法来创建空矩阵。
2.4.3 改变矩阵结构
矩阵大小和结构可以改变,实现的方式主要有旋转矩阵、改变矩阵维度、删除矩阵元素等。MATLAB提供的此类函数如表2.18所示。
表2.18 矩阵结构改变函数
例2-36,矩阵的旋转与维度的改变。
在命令行窗口输入:
A = [1,2,3;4,6,8] B= reshape(A, 2, 3) C= fliplr(A ) D= rot90(A) E= repmat(A, [1 2])
输出结果如下:
A = 1 2 3 4 6 8 B = 1 2 3 4 6 8 C = 3 2 1 8 6 4 D = 3 8 2 6 1 4 E = 1 2 3 1 2 3 4 6 8 4 6 8
2.4.4 矩阵下标
矩阵元素索引可分为双下标索引和单下标索引。
● 双下标索引通过两个下标对来对应元素在矩阵中的行列位置,例如A(2,3)表示矩阵A中第2行第3列的元素。
● 单下标索引通过一个下标对来对应元素在矩阵中的行列位置,其采用列元素优先的原则,对m行n列的矩阵按列排序进行重组,成为一位数组,再取新的一维数组中的元素位置作为元素在矩阵中的单下标。例如对于3×4的矩阵,A(7)表示矩阵A中第1行第3列的元素,而A(9)表示矩阵A中第3行第3列的元素。
下面介绍访问矩阵元素的具体方法。
1.矩阵下标引用
常用的矩阵索引表达式如表2.19所示。
表2.19 矩阵的索引表达式
例2-37,矩阵下标的引用示例。
在命令行窗口输入:
M= magic(5) , SubM = M( 2:3, 3:4 ), AM = M ( [7:8 16:18] )
输出结果如下:
M = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 SubM = 7 14 13 20 AM =5 6 8 14 20
2.引用转换
矩阵中某一元素的单下标索引值和双下标索引值之间,可以通过sub2ind函数进行转换。
例2-38,单双下标索引值转换示例。
在命令行窗口输入:
ind = sub2ind([3 4], 1,3), [I J]= ind2sub([3 4], 7)
输出结果如下:
ind = 7 I = 1 J = 3
3.访问多个矩阵元素
例2-39,访问多个矩阵元素示例。
在命令行窗口输入:
A=magic(3) A1= A(1:2:9) A2= A(1:3,1:2)
输出结果如下:
A = 8 1 6 3 5 7 4 9 2 A1 =8 4 5 6 2 A2 =8 1 3 5 4 9
2.4.5 矩阵信息
矩阵的信息主要包括矩阵结构、矩阵大小、矩阵维度、矩阵的数据类型及内存占用等。
1.矩阵结构
矩阵的结构是指矩阵子元素的排列方式。MATLAB提供了如表2.20所示结构判断函数,这类函数的返回值是逻辑类型的数据:返回值为“1”表示该矩阵是特定类型的矩阵;返回值为“0”表示该矩阵不是该特定类型的矩阵。
表2.20 矩阵结构判断函数
例2-40,矩阵结构判断函数的使用方法示例。
在命令行窗口输入:
A=magic(3); p1=isempty(A) % 判断矩阵A是否为空矩阵 p2=isscalar(A) % 判断矩阵A是否为标量 p3=isvector(A) % 判断矩阵A是否为向量 p4=issparse(A) % 判断矩阵A是否为稀疏矩阵
输出结果如下:
p1 = 0 p2 = 0 p3 = 0 p4 = 0
2.矩阵大小
矩阵的形状信息通常包括:
● 矩阵的维数;
● 矩阵各维长度;
● 矩阵元素个数。
MATLAB提供了4个函数,分别用于获取矩阵形状以上三方面的相关信息,如表2.21所示。
表2.21 矩阵形状信息查询函数
例2-41,矩阵形状信息查询函数的使用示例。
在命令行窗口输入:
X=[magic(3) [1 1 1]'] nd=ndims(X) [r, c]=size(X) l=length(X) n=numel(X)
输出结果如下:
X = 8 1 6 1 3 5 7 1 4 9 2 1 nd =2 r = 3 c = 4 l = 4 n = 12
3.矩阵维度
MATLAB将空矩阵、标量矩阵、一维矩阵和二维矩阵都作为普通二维数组对待,并提供ndims函数计算矩阵维度。
例2-42,矩阵维度示例。
在命令行窗口输入:
A = []; B = 5; C = 1:3; D = zeros(2); E(:, :,2) = [1 2; 3 4]; Nd= [ndims(A) ndims(B) ndims(C) ndims(D) ndims(E)]
输出结果如下:
Nd = 2 2 2 2 3
4.矩阵数据类型
矩阵的元素可以使用各种各样的数据类型,对应不同数据类型的元素,可以是数值、字符串、单元数组、结构等。
MATLAB中提供了一系列关于数据类型的判断函数,如表2.22所示。这类函数的返回值是逻辑类型数据:返回值为“1”表示是某一特定的数据类型;返回值为“0”表示不是该特定的数据类型。
表2.22 矩阵数据类型的测试函数
例2-43,矩阵元素的数据类型的判断示例。
在命令行窗口输入:
A =[magic(3) [1 1 1]']; p1=isnumeric(A) p2=isfloat(A) p3=islogical(A)
得到的结果为:
p1 = 1 p2 = 1 p3 = 0
5.矩阵占用的内存
可以通过whos命令查看当前工作区中的指定变量的所有信息,包括变量名、矩阵大小、内存占用和数据类型等。
例2-44,查看矩阵占用的内存示例。
在命令行窗口输入:
Matrix = rand(3); whos Matrix
输出结果如下:
Matrix = 0.2551 0.6991 0.5060 0.8909
在命令行窗口输入:
whos Matrix
输出结果如下:
Name Size Bytes Class Attributes Matrix 3x3 72 double