1. 矩阵的创建
创建矩阵有如下4种方法:直接输入法、载入外部数据法、利用 MATLAB 内置函数、利用 M 文件编辑器。
1.1 直接输入法
最简单地建立矩阵的方法是从键盘直接输入矩阵的元素——将矩阵的元素用方括号括起来,按矩阵行的顺序输入个元素,同一行的个元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。如果只输入一行则形成一个数组(又称作向量)。矩阵或数组中的元素可以是任何 MATLAB 表达式,可以是实数,也可以是复数。
在此方法下创建矩阵要注意以下规则:
- 矩阵元素必须在”[ ]”内;
- 矩阵同行元素之间用空格(或“,”)隔开;
- 矩阵的行与列之间用“;”隔开。
A=[1 2 3;4 5 6;7 8 9]
B=[1,2,3;4,5,6;7,8,9]
1.2 载入外部数据
在 MATLAB 中,load 函数用于载入生成的包含矩阵的二进制文件,或者读取包含数值数据的文本文件。文本文件中的数字应排列成矩形,每行只能包含矩阵的一行元素,元素与元素之间用空格分隔,各行元素的个数必须相等。
例如,创建一个包含下列数字的文本文件:
1 2 3 4
5 6 7 8
把该文件命名为 data.txt,并保存在 MATLAB 的目录下。如需读取该文件,可在命令行窗口输入:
>>load data.txt
系统将读取该文件并创建一个变量 data,包含上面的这个矩阵。在 MATLAB 工作空间中可以查看这个变量。
% 读取数据 trees
load trees % 读取二进制数据文件
image(X) % 以图像的形式显示数组 X
colormap(map) % 设置颜色查找表为 map
运行结果为:
1.3 利用 MATLAB 内置函数
在 MATLAB 中,系统内置特殊函数可以用于创建矩阵,通过这些函数,可以很方便地得到想要的特殊矩阵。
函数名 | 功能介绍 |
---|---|
ones( ) | 产生全为 1 的矩阵 |
zeros( ) | 产生全为 0 的矩阵 |
eye( ) | 产生单位阵 |
rand( ) | 产生在(0,1)区间均匀分布的随机阵 |
randn( ) | 产生均值为0,方差为1的标准正态分布随机矩阵 |
compan | 伴随矩阵 |
gallery | Higham 检验矩阵 |
hadamard | Hadamard 阵 |
hankel | Hankel 阵 |
hilb | Hilbert 阵 |
invhilb | 逆 Hilbert 阵 |
magic | 魔方阵 |
pascal | Pascal 阵 |
rosser | 经典对称特征值 |
toeplitz | Toeplitz 阵 |
vander | Vander 阵 |
wilknsion | wilknsion 特征值检验矩阵 |
利用几个内置函数来创建矩阵。
Z1=zeros(5,4) % 产生 5*4 全为 0 的矩阵
Z2=ones(5,4) % 产生 5*4 全为 1 的矩阵
Z3=eye(5,4) % 产生 5*4 的单位矩阵
Z4=rand(5,4) % 产生 5*4 的在(0,1)区间均匀分布的随机阵
Z5=randn(5,4) % 产生 5*4 的均值为0,方差为1的标准正态分布随机矩阵
Z6=hilb(3) % 产生 3 维的 Hilbert 阵
Z7=magic(3) % 产生 3 阶的魔方阵
1.4 利用 M 文件编辑器
此方法需要用 MATLAB 自带的文件编辑器或其他文件编辑器来创建一个文件,代码和要在 MATLAB 命令行窗口中输入的命令一样,然后以 .m 格式保存该文件。
如:A=[23 22 56;42 5 80;7 76 89],把输入的内容以纯文本方式存盘(设该文件名为 matrix.m)。
% 在MATLAB 命令行窗口中输入 matrix
>>matrix
A =
12 22 56
42 5 80
7 76 89
即运行该 M 文件,就会自动建立一个名为 matrix 的矩阵。
2. 矩阵的寻访
在 MATLAB 中,矩阵的寻访主要有下标元素访问、单元素访问和多元素访问,下面将进行介绍。
2.1 下标元素访问
- “双下标”表示法:即分别表示行与列,矩阵中的元素都有对应的“第几行,第几列”。
-
“单下标”表示法:一种线性下标表示法,系统默认矩阵的所有元素按照从上到下,行从左到右排成一列,只需要使用一个下标索引就可以定位矩阵中的任何一个元素。
MATLAB 还提供了用户下标计算函数,sub2ind 用于双下标计算单下标,ind2sub 用于单下标计算双下标,以方便不同下标之间的转换。
clear all
>> A=[2 5 9 20;3 6 7 22;7 8 9 23;5 8 24 25]
A =
2 5 9 20
3 6 7 22
7 8 9 23
5 8 24 25
>> A(4,3) % 使用双下标访问 A 矩阵的第 4 行第 3 列
ans =
24
>> A(12) % 使用单下标访问 A 矩阵的第 4 行第 3 列
ans =
24
>> sub2ind(size(A),3,4) % 双下标转换为单下标
ans =
15
>> A(15)
ans =
23
2.2 单元素访问
在 MATLAB 中,必须指定两个参数,即其所在行数和列数,才能访问一个矩阵中的单个元素。例如,访问矩阵 M 中的任何一个元素。
M =( row, column ): 其中 row 和 column 分别代表行数和列数。
% 对矩阵 M 的单元素进行访问
>> M=randn(3)
>> x=M(1,2)
>> y=M(2,3)
>> z=M(3,3)
M =
0.5377 0.8622 -0.4336
1.8339 0.3188 0.3426
-2.2588 -1.3077 3.5784
x =
0.8622
y =
0.3426
z =
3.5784
2.3 多元素访问
矩阵多元素的访问,包括访问该矩阵的某一行或某一列的若干元素、整行或整列元素、若干行或若干列的元素以及矩阵所有元素等。
- A( e1:e2:e3):表示取数组或者矩阵 A 的第 e1 元素开始每隔 e2 步长一直到 e3 的所有元素;
- A( [m n l] ):表示取数组或矩阵 A 中的第 m,n,l 个元素;
- A( : , j ):表示取 A 矩阵的第 j 列全部元素;
- A( i , : ):表示 A 矩阵第 i 行的全部元素;
- 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 表示某一维的末尾元素下标。
% 对创建的矩阵进行多元素访问
M=randn(4)
M(1,:) % 访问第一行所有元素
M(1:3,:) % 访问 1~3 行所有元素
M(:,2) % 访问第 2 列所有元素
M(:) % 访问所有元素
3. 矩阵的拼接
矩阵的拼接有按照水平方向拼接和按照垂直方向拼接两种。例如,对矩阵 A 和 B 进行拼接,拼接表达式分别如下:
水平方向拼接:C = [ A B ] 或 C= [ A, B ]
-
垂直方向拼接:C= [ A ; B]
【注意】:矩阵拼接时,必须满足原始矩阵维数对应,如果不满足条件,则拼接不会成功,即出错。
clear all;
A=magic(3)
B=eye(3)
E=[A,B] %按水平方向拼接
F=[A;B] %按垂直方向拼接
在 MATLAB 中,出来使用矩阵拼接符[ ],还可以使用矩阵拼接函数。
-
cat 函数用于按指定的方向连接矩阵。其调用格式为
C= cat ( dim, A, B ):按照 dim 指定的方向连接矩阵 A 与 B,构造出矩阵 C。
C= cat ( dim, A1, A2, A3, A4,… ): A1, A2, A3, A4,… 表示被连接的多个矩阵。
>> clear all;
>> A1=[2 2;3 4]
>> A2=[5 6;7 8];
>> C1=cat(1,A1,A2) %垂直拼接
>> C2=cat(2,A1,A2) %水平拼接
>> C3=cat(3,A1,A2) %三维数组
-
repmat 函数用于通过输入矩阵的备份拼接出一个大矩阵。调用格式如下:
B= repmat ( A, m, n) 或 B=repmat ( A, [ m, n ]):repmat 函数建立一个大矩阵 B,B 是由矩阵 A 的备份拼接而成的,纵向摆 m 个备份,横向摆 n 个备份,B 中总共包含 m*n 个A。A 为被用来进行复制的矩阵;m 为纵向上复制 A 的次数;n 为横向上复制 A 的次数。
B=repmat(A , [ m n p … ]):repmat 函数生成一个多维(m*n*p*… ) 数组 B,B 由矩阵 A 的m*n*p*… 个备份在多个方向拼接而成。
N=repmat(1,[3,3])
N =
1 1 1
1 1 1
1 1 1
-
horzcat 函数用于对矩阵进行水平拼接。其调用格式如下:
C=horzcat ( A1, A2, … ):水平连接多个矩阵 A1,A2,… ,参数列表中的所由矩阵都必须有相同的行数。
horzcat 函数连接 n 维数组是沿第二维(即行)的方向,因此被连接数组的第一维和其他维的大小必须匹配。
clear all
A=magic(5);
A(4:5,:)=[]
B=magic(3)*1000
C=horzcat(A,B)
-
vertcat 函数用于垂直连接矩阵。其调用格式如下:
C=vertcat ( A1, A2, … ):用于垂直连接多个矩阵 A1,A2,…,参数列表中的所有矩阵都必须有相同的列数。该函数连接 n 维数组是沿第一维(即列)的方向。
clear all;
A=magic(5);
A(:,4:5)=[]
B=magic(3)*1000
C=vertcat(A,B)
-
blkdiag 函数用于通过输入的矩阵构造一个块对角矩阵。其调用格式如下:
T=blkdiag(A,B,C,D,…):blkdiag 函数用输入的矩阵 A,B,C,D,…构造一个块对角矩阵 T。
clear all;
A=eye(2);
B=ones(2,2);
C=[1 2;3 4;5 6];
D=magic(3);
T=blkdiag(A,B,C,D)
T =
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0
0 0 1 1 0 0 0 0 0
0 0 0 0 1 2 0 0 0
0 0 0 0 3 4 0 0 0
0 0 0 0 5 6 0 0 0
0 0 0 0 0 0 8 1 6
0 0 0 0 0 0 3 5 7
0 0 0 0 0 0 4 9 2