矩阵和数组的概念和区别
- 矩阵:矩阵式数学上的概念,最早来自于方程组的系数及常数所构成的方针。作为一种变换或者映射算符的体现,矩阵运算有着明确而严格的数学规则。
- 数组:计算机程序设计领域的概念。在matlab中其存在目的是为了使数据管理方便,操作简单,命令形式自然,执行计算有效。
- 在matlab中,矩阵是以数组的形式存在的,一维数组相当于向量,二维数组相当于矩阵,所以矩阵式数组的子集。
矩阵的构造
-
直接赋值法构造简单矩阵
简单矩阵采用矩阵构造符号——方括号[],同行的元素之间用,或者空格间隔,行与行之间用分号;。
例如:
>> A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 >> B=[1,2,3;4,5,6;7,8,9] B = 1 2 3 4 5 6 7 8 9 >>
-
特殊矩阵
特殊矩阵的构造一般都是用matlab特定的函数来实现。
函数名称 函数功能 ones(n) 构建一个n x n的1矩阵(矩阵的元素全部是1) ones(m,n,… p) 构建一个m x n…p的1矩阵 ones( size(A)) 构建一个和矩阵A同样大小的1矩阵 zeros(n) 构建一个n x n的0矩阵(输出矩阵的元素全部是0) zeros(m, n,…, p) 构建一个m x n x…x p的0矩阵 zeros(size(A)) 构建一个和矩阵A同样大小的0矩阵 eye(n) 构建一个n x n的单位矩阵 eye(m, n) 构建一个m x n的单位矩阵 eye( size(A)) 构建一个和矩阵A同样大小的单位矩阵 magic(n) 构建一个n x n的矩阵,其每一行、每一列的元素之和都相等 rand(n) 构建一个n x n的矩阵,其元素为0-1之间均匀分布的随机数 rand(m,n,… p) 构建一个m x n x…p的矩阵,其元素为0-1之间均匀分布的随机数 randn (n) 构建一个n x n的矩阵,其元素为零均值、单位方差的正态分布随机数 randn (m, n,. p) 构建一个m x n x…p的矩阵,其元素为零均值、单位方差的正态分布随机数 diag(c2) 构建一个n维的方阵,它的主对角线元素值取自向量x,其余元素的值都为0 diag(A, k) 构建一个由矩阵A第k条对角线的元素组成的列向量k=0为主对角线; k<0为下第k条对角线; k>0为上第k条对角线 diag(x, k) 构建一个(n+|k|) x (n+|k|)维的矩阵,该矩阵的第k条对角线元素取自向量x,其余元素都为0(关于参数k,参考上个命令) triu(A) 构建一个和A大小相同的上三角矩阵,该矩阵的主对角线上元素为A中相应元素,其余元素都为0 triu(A, k) 构建一个和A大小相同的上三角矩阵,该矩阵的第k条对角线及其以上元素为A中相应元素,其余元素都为0 tril (A) 构建一个和A大小相同的下三角矩阵,该矩阵的主对角线上元素为A中相应元素,其余元素都为0 tril(A, k) 构建一个和A大小相同的下三角矩阵,该矩阵的第k条对角线上及其以下元素为A中相应元素,其余元素都为0 样例:
>> magic(5) ans = 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 >>
-
向量、标量和空矩阵
向量:单行或单列的矩阵称为向量。
标量:1 x 1的矩阵称为标量,矩阵只有一个元素
空矩阵:行和列数至少有一个为0的矩阵。
-
空矩阵的表示:
x=[]
空矩阵和0矩阵的区别:空矩阵内没有任何元素不占用存储空间。而0矩阵表示该矩阵中所有的元素全部为0,需要存储空间。
-
矩阵大小及结构的改变
矩阵大小及结构的改变一般也是由函数来实现。
函数名称 | 函数功能 |
---|---|
fliplr(A) | 矩阵每一行均进行逆序排列 |
flipud(A) | 矩阵每一列均进行逆序排列 |
flipdim(A, dim) | 生成一个在dim维矩阵A内的元素交换位置的多维矩阵 |
rot90(A) | 生成一个由矩阵A逆时针旋转90度而得到的新矩阵 |
ro190(A,k) | 生成一个由矩阵A逆时针旋转k×90.而得到的新矩阵 |
reshape(A, m, n) | 生成一个m x n x p维的矩阵,其元素以线性索引的顺序从矩阵A中取得如果矩阵A中没有mXnx.p个元素,将返回一个错误信息 |
repmat(A. [m n…p]) | 创建一个和矩阵A有相同元素的mXnx.Xp块的多维矩阵 |
shiftdim(A, n) | 矩阵的列移动n步。n为正数,矩阵向左移; n为负数,矩阵向右移 |
squeeze(A) | 返回没有空维的矩阵A |
cat(dim,A, B) | 将矩阵A和B组合成一个dim维的多维矩阵 |
permute(A, order) | 根据向量order来改变矩阵A中的维数顺序 |
ipermute(A, order) | 进行命令permute的逆变换 |
sort(A) | 对一维或二维矩阵进行升序排序,并返回排序后的矩阵;当A为二维矩阵时,对矩阵的每一列分别进行排序 |
sort(A, dim) | 对矩阵按指定的方向进行升序排序,并返回排序后的矩阵.当dim=1时,对矩阵的每一列排序dim=2时,对矩阵的每一行排序 |
sort(A, dim, mode) | mode为’ascend’时,进行升序排序; mode为’descend’时,进行降序排序 |
[B, LX]=sort(A,…) | LX为排序后备元素在原矩阵中的行位置或列位置的索引 |
矩阵下标引用
在matlab中二维数组的数字索引分为双下标索引和单下标索引。双下标比较简单就类似于坐标的形式,而单下表索引需要注意。但下表索引的方式式采用列优先的方式对矩阵元素进行编号。如下图中4x4矩阵的编号:
1 | 5 | 9 | 13 |
---|---|---|---|
2 | 6 | 10 | 14 |
3 | 7 | 11 | 15 |
4 | 8 | 12 | 16 |
-
矩阵下标访问单个矩阵元素
常用的矩阵索引表达式:
索引表达式 函数功能 A(1) 将二维矩阵A重组为一维数组,返回数组中第一个元素 A(:,j) 返回二维矩阵A中第j列列向量 A(i,:) 返回二维矩阵A中第i行行向量 A(:,j:k) 返回由二维矩阵A中的第j列到第k列列向量组成的子矩阵 A(i:k,:) 返回由二维矩阵A中的第i行到第k行行向量组成的子矩阵 A(i:k,j:l) 返回由二维矩阵A中的第i行到第k行行向量和第j列到第l列列向量的交集组成的子矩阵 A(: ) 将矩阵A中的每列合并成一个长的列向量 A(j:k) 返回一个行向量,其元素为A(:)中的第j个元素到第k个元素 A([j1 j2 …]) 返回一个行向量,其元素为A(:)中的第j1、j2元素 A(:,[j1 j2 …]) 返回矩阵A的第j1列、第j2列等的列向量 A([i1 i2 …],: ) 返回矩阵A的第i1行、第i2行等的行向量 A([i1 i2 …],[j1 j2 …]) 返回矩阵第1行、第2行等和第j列、第2列等的元素 -
线性引用元素
-
双下标索引转化为单下标索引
IND=sub2ind(siz,i,j)
其中siz是包含两个元素的数组,代表了矩阵的行数和列数,一般可以直接用size(A)表示,i与j分别是双索引下标元素的行数和列数,IND是转换后的单索引下标值。
-
单索引下标转化为双索引下标
[I J]=ind2sub(siz,ind)
变量意义同上。
-
-
访问多个矩阵元素
sum(A(1:4,4)) %求第4列前四个元素的和 sum(A(:,4)) %求第4列所有元素的和 sum(A(:,end)) %求矩阵最后一列元素的和 B=A(1:3:10) %