MATLAB教程二:MATLAB矩阵处理

2.1 特殊矩阵

通用的特殊矩阵:

  • zeros函数:产生全0矩阵,即零矩阵。
  • ones函数:产生全1矩阵,即幺矩阵。
  • eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
  • rand函数:产生(0,1)区间均匀分布的随机矩阵。
  • randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。
>> zeros(2)
ans =
     0     0
     0     0
>> ones(2)
ans =
     1     1
     1     1
>> eye(4)
ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1
>> rand(3)
ans =
    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575
>> randn(3)
ans =
    2.7694    0.7254   -0.2050
   -1.3499   -0.0631   -0.1241
    3.0349    0.7147    1.4897

专门学科的特殊矩阵:

魔方矩阵:n 阶魔方阵由1,2,3,…,n2 共n2 个整数组成,且每行、每列以及主、副对角线上各 n 个元素之和都相等。

  • magic(n) 函数:产生一个 n 阶魔方矩阵。
>> M=magic(3)
M =
     8     1     6
     3     5     7
     4     9     2

范德蒙矩阵

对于向量v= [v1,v2,…,vn], 范得蒙矩阵的一般形式为:
V = [ v 1 n − 1 ⋯ v 1 2 v 1 1 v 1 0 v 2 n − 1 ⋯ v 2 2 v 2 1 v 2 0 v 3 n − 1 ⋯ v 3 2 v 3 1 v 3 0 ⋮ ⋱ ⋮ ⋮ ⋮ v n n − 1 ⋯ v n 2 v n 1 v n 0 ] V= \left[ \begin{matrix} v^{n-1}_1 &\cdots& v^2_1 & v^1_1 & v^0_1 \\ v^{n-1}_2 &\cdots& v^2_2 & v^1_2 & v^0_2 \\ v^{n-1}_3 &\cdots& v^2_3 & v^1_3 & v^0_3 \\ \vdots &\ddots &\vdots &\vdots &\vdots \\ v^{n-1}_n &\cdots& v^2_n & v^1_n & v^0_n \end{matrix} \right] V= v1n1v2n1v3n1vnn1v12v22v32vn2v11v21v31vn1v10v20v30vn0
即向量 v 各元素的零次方,倒数第二列为指定的向量 v, 即向量 v 各元素的一次方, 其他各列是其后列与倒数第二列的点乘积。

  • vander(v) 函数:生成以向量 v 为基础的范得蒙矩阵。
>> A=vander(1:5)
A =
     1     1     1     1     1
    16     8     4     2     1
    81    27     9     3     1
   256    64    16     4     1
   625   125    25     5     1

希尔伯特矩阵

n 阶希尔伯特(Hilbert)矩阵的一般形式为:
H = [ 1 1 / 2 ⋯ 1 / n 1 / 2 1 / 3 ⋯ 1 / ( n + 1 ) ⋮ ⋱ ⋮ ⋮ 1 / n 1 / ( n + 1 ) ⋯ 1 / ( 2 n − 1 ) ] H= \left[ \begin{matrix} 1 &1/2 &\cdots& 1/n \\ 1/2 &1/3 &\cdots& 1/(n+1) \\ \vdots &\ddots &\vdots &\vdots \\ 1/n &1/(n+1) &\cdots& 1/(2n-1) \end{matrix} \right] H= 11/21/n1/21/31/(n+1)1/n1/(n+1)1/(2n1)

  • hilb(n) 函数:生成 n 阶希尔伯特矩阵的函数。
>> format rat    %将显示形式改为分数显示
H=hilb(4)
H =
       1              1/2			  1/3             1/4
       1/2			  1/3             1/4			  1/5
       1/3            1/4             1/5             1/6
       1/4            1/5             1/6			  1/7

帕斯卡矩阵

矩阵如下:

H = [ 1 1 1 1 1 1 1 2 3 4 5 6 1 3 6 10 15 21 1 4 10 20 35 56 1 5 15 35 70 126 1 6 21 56 126 252 ] H= \left[ \begin{matrix} 1 &1 &1 &1 &1 &1 \\ 1 &2 &3 &4 &5 &6 \\ 1 &3 &6 &10 &15 &21 \\ 1 &4 &10 &20 &35 &56 \\ 1 &5 &15 &35 &70 &126\\ 1 &6 &21 &56 &126&252\\ \end{matrix} \right] H= 111111123456136101521141020355615153570126162156126252

  • pascal(n) 函数:生成一个 n 阶帕斯卡矩阵。
>> P=pascal(5)
P =
	1	1	1	1	1 
	1 	2 	3	4	5 
    1	3 	6	10	15 
	1	4 	10	20	35 
	1	5 	15	35	70

2.2 矩阵变换

对角阵:

对角阵:只有对角线上有非零元素的矩阵。

数量矩阵:对角线上的元素相等的对角矩阵。

单位矩阵:对角线上的元素都为1的对角矩阵。

矩阵的对角线:与主对角线平行,往上为第1条、第2条、一直到第 n 条对角线,往下为第 -1条、-2条、一直到 -n 条对角线。主对角线为第 0 条对角线。

提取矩阵的对角线元素:

  • diag(A):提取矩阵 A 主对角线元素,产生一个列向量。

  • diag(A,k):提取矩阵 A 第 k 条对角线的元素,产生一个列向量。

构造矩阵:

  • diag(V):以向量 V 为主对角线元素,产生对角矩阵。

  • diag(V,k):以向量 V 为第 k 条对角线元素,产生对角矩阵。

>> D=diag(1:3)         %以1到3为主对角线元素,产生对角矩阵
D =
     1     0     0
     0     2     0
     0     0     3
>> A=diag(D)           %提取矩阵D的对角线元素,产生一个列向量
A =
     1
     2
     3

三角阵:

上三角阵:矩阵的对角线以下的元素全为零的矩阵。

下三角阵:对角线以上的元素全为零的矩阵。

上三角矩阵

  • triu(A):提取矩阵 A 的主对角线及以上的元素。

  • triu(A,k):提取矩阵 A 的第 k 条对角线及以上的元素。

下三角矩阵

  • tril(A):提取矩阵 A 的主对角线及以下的元素。

  • tril(A,k):提取矩阵 A 的第 k 条对角线及以下的元素。

>> triu(ones(4),-1)
ans =
     1     1     1     1
     1     1     1     1
     0     1     1     1
     0     0     1     1
>> tril(ones(4),1)
ans =
     1     1     0     0
     1     1     1     0
     1     1     1     1
     1     1     1     1

矩阵的操作:

矩阵的转置:转置运算符是小数点后面接单引号( .’ )。

>> A=[1,2,3;4,5,6;7,8,9]
A =
     1     2     3
     4     5     6
     7     8     9
>> A.'
ans =
     1     4     7
     2     5     8
     3     6     9

矩阵的旋转

  • rot90(A,k):将矩阵 A 逆时针方向旋转 90º 的 k 倍,当 k 为1时可省略。
>> A=[1 3 2;-3 2 1;4 1 2]
A =
     1     3     2
    -3     2     1
     4     1     2
>> rot90(A,2)
ans =
     2     1     4
     1     2    -3
     2     3     1

矩阵的翻转:对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依此类推。

  • fliplr(A):对矩阵 A 实施左右翻转
  • flipud(A):对矩阵 A 实施上下翻转。
>> A=[1 3 2;-3 2 1;4 1 2]
A =
     1     3     2
    -3     2     1
     4     1     2
>> B=fliplr(A)
B =
     2     3     1
     1     2    -3
     2     1     4
>> B=flipud(A)
B =
     4     1     2
    -3     2     1
     1     3     2

矩阵的求逆:对于一个方阵 A,如果存在一个与其同阶的方阵 B,使得 AB=BA=I (I为单位矩阵),则称 B 为 A 的逆矩阵,当然,A 也是 B 的逆矩阵。

  • inv(A):求方阵 A 的逆矩阵。

例:用求逆矩阵的方法解线性方程组。
{ x + 2 y + 3 z = 5 x + 4 y + 9 z = − 2 x + 8 y + 27 z = 6 \begin{cases} x +2y+3z=5 \\ x+4y+9z=-2 \\ x+8y+27z=6 \end{cases} x+2y+3z=5x+4y+9z=2x+8y+27z=6
在线性方程组Ax=b两边各左乘 A-1,得 x=A-1b。

>> A=[1 2 3;1 4 9;1 8 27];
>> B=[5;-2;6];
>> X=inv(A)*B
X =
   23.0000
  -14.5000
    3.6667

2.3 矩阵求值

方阵的行列式:

行列式的值:把一个方阵看作行列式,并对其按行列式的规则求值。

  • det(A):求方阵 A 所对应的行列式的值。
>> A=[1 2;3 4]
A =
     1     2
     3     4
>> det(A)
ans =
    -2

矩阵的秩:

矩阵的秩:矩阵线性无关的行数或列数。

  • rank(A):求矩阵 A 的秩。
>> A=[1,2,1;3 4 3;5 3 5]
A =
     1     2     1
     3     4     3
     5     3     5
>> rank(A)
ans =
     2

矩阵的迹:

矩阵的迹:等于矩阵的对角线元素之和,也等于矩阵的特征值之和。

  • trace(A):求矩阵 A 的迹。
>> A=[1,3,2;-3,2,1;4,1,2]
A =
     1     3     2
    -3     2     1
     4     1     2
>> trace(A)
ans =
     5

向量和矩阵的范数:

矩阵或向量的范数:用来度量矩阵或向量在某种意义下的长度。

  • norm(V) 或 norm(V,2):计算向量(矩阵) V 的2—范数。
  • norm(V,1):计算向量(矩阵) V 的1—范数。
  • norm(V,inf):计算向量(矩阵) V 的 ∞ —范数。
>> X=[2 0 1;-1 1 0;-3 3 0]
X =
     2     0     1
    -1     1     0
    -3     3     0
>> n=norm(X)
n =
    4.7234
>> n=norm(X,1)
n =
     6

矩阵的条件数:

矩阵的条件数:等于矩阵的范数与矩阵的逆矩阵的范数的乘积。

  • cond(A,1):计算 A 的1—范数下的条件数。
  • cond(A)或cond(A,2):计算 A 的2—范数数下的条件数。
  • cond(A,inf):计算 A 的 ∞ —范数下的条件数。
>> X=[2 0 1;-1 1 0;-3 3 0]
X =
     2     0     1
    -1     1     0
    -3     3     0
>> C=cond(X)
C =
   5.5044e+16

矩阵的特征值与特征向量:

数学定义:设 A 是 n 阶方阵,如果存在常数 λ 和 n 维非零列向量 x,使得等式 Ax=λx 成立,则称 λ 为 A 的特征值,x 是对应特征值 λ 的特征向量。

  • E=eig(A):求矩阵 A 的全部特征值,构成向量 E。
  • [X,D]=eig(A):求矩阵 A 的全部特征值,构成对角阵 D,并产生矩阵 X,X 各列是相应的特征向量。
>> A=[1 1 0;1 0 5;1 10 2]
A =
     1     1     0
     1     0     5
     1    10     2
>> [X,D]=eig(A)
X =
    0.0722    0.9751    0.0886
    0.5234   -0.0750   -0.6356
    0.8490   -0.2089    0.7669
D =
    8.2493         0         0
         0    0.9231         0
         0         0   -6.1723

2.4 稀疏矩阵

矩阵的存储方式:

完全存储方式:将矩阵的全部元素按列存储。

稀疏存储方式:只存储矩阵的非零元素的值及其位置,即行号和 列号。

注意:采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也 是按列的顺序进行存储。

稀疏存储方式的产生:

完全存储方式与稀疏存储方式之间的转化

  • A=sparse(S):将矩阵 S 转化为稀疏存储方式的矩阵 A。
  • S=full(A):将矩阵 A 转化为完全存储方式的矩阵 S。
>> A=sparse(eye(5))
A =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
>> B=full(A)
B =
     1     0     0     0     0
     0     1     0     0     0
     0     0     1     0     0
     0     0     0     1     0
     0     0     0     0     1

直接建立稀疏存储矩阵

  • sparse(m,n):生成一个 m×n 的所有元素都是零的稀疏矩阵。
  • sparse(u,v,S):其中 u、v、S 是3个等长的向量。S 是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是 S(i) 的行和列下标。
>> A=sparse([1,2,2],[2,1,4],[4,5,-7])
A =
   (2,1)        5
   (1,2)        4
   (2,4)       -7
>> B=full(A)
B =

     0     4     0     0
     5     0     0    -7
  • spconvert(A):A(i,1) 表示第 i 个非零元素所在的行。A(i,2) 表示 第 i 个非零元素所在的列。 A(i,3) 表示第 i 个非零元素值的实部。A(i,4) 表示第 i 个非零元素值的虚部。
>> A=[2,2,1;2,1,-1;2,4,3]
A =
     2     2     1
     2     1    -1
     2     4     3
>> B=spconvert(A)
B =
   (2,1)       -1
   (2,2)        1
   (2,4)        3

带状稀疏矩阵的稀疏存储:带状稀疏矩阵就是一种十分典型的具有规则结构的稀疏矩阵,它是指 所有非零元素集中在对角线上的矩阵。

  • [B,d]=spdiags(A):从带状稀疏矩阵 A 中提取全部非零对角线元素赋给矩阵 B 及其这些非零对角线的位置向量 d。
  • A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵 A,其中 m、n 为原带状稀疏矩阵的行数与列数,矩阵 B 的第 i 列即为原带状稀疏矩阵的第 i 条非零对角线,向量 d 为原带状稀疏矩阵所有非零对角线的位置
>> A =[11,0,0,12,0,0;0,21,0,0,22,0;0,0,31,0,0,32;41,0,0,42,0,0;0,51,0,0,52,0]
A =
    11     0     0    12     0     0
     0    21     0     0    22     0
     0     0    31     0     0    32
    41     0     0    42     0     0
     0    51     0     0    52     0
>> [B,d]=spdiags(A)
B =
     0    11    12
     0    21    22
     0    31    32
    41    42     0
    51    52     0
d =
    -3
     0
     3
>> A=spdiags(B,d,5,6) 
A =
   (1,1)       11
   (4,1)       41
   (2,2)       21
   (5,2)       51
   (3,3)       31
   (1,4)       12
   (4,4)       42
   (2,5)       22
   (5,5)       52
   (3,6)       32

单位矩阵的稀疏存储

  • speye(m,n):返回一个 m×n 的稀疏存储单位矩阵。
>> speye(3)
ans =
   (1,1)        1
   (2,2)        1
   (3,3)        1

应用举例:

求下列三对角线性方程组的解
[ 2 3 1 4 1 1 6 4 2 6 2 1 1 ] [ x 1 x 2 x 3 x 4 x 5 ] = [ 0 3 2 1 5 ] \left[ \begin{matrix} 2 & 3 \\ 1 & 4 & 1 \\ & 1 & 6 & 4 \\ & & 2 & 6 & 2 \\ & & & 1 & 1 \end{matrix} \right] \left[ \begin{matrix} x_1 \\ x_2 \\ x_3 \\ x_4 \\ x_5 \end{matrix} \right] {=} \left[ \begin{matrix} 0 \\ 3 \\ 2 \\ 1 \\ 5 \end{matrix} \right] 2134116246121 x1x2x3x4x5 = 03215

>> kf1=[1;1;2;1;0];
>> k0=[2;4;6;6;1];
>> k1=[0;3;1;4;2];
>> B=[kf1,k0,k1];
>> d=[-1;0;1];
>> A=spdiags(B,d,5,5);
>> f=[0;3;2;1;5];
>> x=A\f
x =
   -0.1667
    0.1111
    2.7222
   -3.6111
    8.6111
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值