matlab矩阵处理

2.1特殊矩阵

通用特殊矩阵:

  • zeros函数:零矩阵

A=zeros(2,3)

A =

 0     0     0
 0     0     0     

zeros(size(reshape(A,3,2)))

ans =

 0     0
 0     0
 0     0
  • ones函数:全一矩阵
  • eye函数:单位矩阵
  • rand函数:产生(0,1)之间均匀分布的随机矩阵
  • randn函数:产生均值为0,方差为1的标准正态分布矩阵

eg1:首先产生5阶两位随机整数A,再产生均值为0.6、方差为0.1的5阶正态分布随机矩阵B,最后验证(A+B)E=EA+BE

  • rand:产生(0,1)开区间均匀分布的随机数x
  • fix(a+(b-a)*x):产生[a,b]区间均匀分布的随机整数
  • u+6x:得到均值为u,方差为62的随机数

A=fix(10+(99-10+1)*rand(5));
B=0.6+sqrt(0.1)randn(5);
C=eye(5);
(A+B)C==CA+B
C

ans =

 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1

用于专门学科的特殊矩阵:
(1)魔方矩阵:魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。你能构造任何大小(除了2x2)的魔方矩阵。
eg:产生8j魔方阵,求每行每列元素和

M=magic(8);
sum(M(1,:))

ans =

260

sum(M(:,end))

ans =

260

(2)范德蒙矩阵:

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

(3)希尔伯特矩阵:H(i,j)=1/(i+j-1)

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     

(4)伴随矩阵
eg:生成多项式x3-2x2-5x+6的伴随矩阵

p=[1,-2,-5,6];
A=compan§

A =

   2              5             -6       
   1              0              0       
   0              1              0       

(5)帕斯卡矩阵

format rat
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       

inv( P) #逆矩阵也为整数

ans =

   5            -10             10             -5              1       
 -10             30            -35             19             -4       
  10            -35             46            -27              6       
  -5             19            -27             17             -4       
   1             -4              6             -4              1   

2.2矩阵变换

对角阵:只有对角线有非0元素
数量矩阵:对角线上元素相等的对角矩阵
在这里插入图片描述
eg:建立A-5,然后A的第一行元素乘1,第二行乘2,……,第五行乘5.

A=fix(1+(9-1+1)*rand(5))
A = #矩阵按列

   9              1              9              8              6       
   1              4              2              6              4       
   7              3              3              5              5       
   8              8              2              2              4       
   8              4              2              8              1       

D=diag(1:5);
D*A

ans =

   9              1              9              8              6       
   2              8              4             12              8       
  21              9              9             15             15       
  32             32              8              8             16       
  40             20             10             40              5   

三角阵:
(1)上三角矩阵

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

(2)下三角矩阵类似

矩阵的转置:

  • 转置运算符(.’)
  • 共轭转置(’),他在转置基础上求每个数的复共轭

A=[1,3;3+4i,1-2i]

A =

   1        +    0i             3        +    0i      
   3        +    4i             1        -    2i      

A.’

ans =

   1        +    0i             3        +    4i      
   3        +    0i             1        -    2i      

A’

ans =

   1        +    0i             3        -    4i      
   3        +    0i             1        +    2i    

矩阵的旋转:
rot90(A,k):A逆时针旋转90°的k倍,当k为1时可省略

A=[1,2,3;4,5,6;7,8,9]

A =

   1              2              3       
   4              5              6       
   7              8              9    

rot90(A)

ans =

   3              6              9       
   2              5              8       
   1              4              7       

rot90(A,2) #180°

ans =

   9              8              7       
   6              5              4       
   3              2              1   

矩阵的翻转:
fliplr(A):将A左右翻转
flipud(A):A上下翻转
eg:验证魔方阵的主对角线、副对角线元素之和相等

A=magic(5);
D1=sum(diag(A))

D1 =

65

B=flipud(A); #上下翻转后主对角线就变成了副对角线
D2=sum(diag(B))

D2 =

65

矩阵的求逆:
在这里插入图片描述

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

x=A\b #相当于左乘A逆

x =

23.0000
-14.5000
3.6667

2.3矩阵求值

**方阵的行列式:**det(A)
eg:验证det(A-1)=1/det(A)

A=fix(1+(9+1-1)*rand(5))

A =

   8              1              2              2              6       
   9              3              9              4              1       
   2              5              9              9              8       
   9              9              5              8              9       
   6              9              8              9              7       

det(inv(A))

ans =

   1/996   

1/det(A)

ans =

   1/996   

**矩阵的秩:**rank(A)
eg:求3-20阶魔方阵的秩

for n=3:20
r(n)=rank(magic(n));
end

bar® #画出柱图
grid on#增加网格线
axis([1,21,0,20])#设置坐标系
在这里插入图片描述
**矩阵的迹:**对角线元素之和,也是矩阵特征值之和 trace(A)
A =

   1              3              2       
  -3              2              1       
   4              1              2       

trace(A)

ans =

   5       

sum(diag(A))

ans =

   5   

向量的范数:

  1. norm(V)或norm(V,2):计算向量V的2范数
  2. norm(V,1):计算向量V的1-范数
  3. norm(V,inf):计算向量V的∞-范数

矩阵的范数:

  1. 矩阵的1范数(列元素绝对值之和的最大值)
  2. 矩阵的2范数(A‘A矩阵最大特征值的平方根)#A‘是共轭转置
  3. 矩阵的∞范数(所有矩阵含元素绝对值之和的最大值)
    注:方法与求向量范数的函数完全相同

x=[2 0 1;-1 1 0;-3 3 0]

x =

   2              0              1       
  -1              1              0       
  -3              3              0       

n=norm(x)

n =

5909/1251  

n=norm(x,1)

n =

   6       

矩阵的条件数:

  • 矩阵A的条件数等于A的范数与inv(A)范数的乘积
  • 条件数越接近1,矩阵性能越好,反之则差

格式:

  • cond(A,1):计算A 的1范数下的条件数
  • cond(A)或cond(A,2):计算A 的2范数下的条件数
  • cond(A,inf):计算A的∞范数下的条件数

2.4矩阵的特征值和特征向量

格式:

  1. E=eig(A):求矩阵全部特征值,构成向量E
  2. [X,D]=eig(A):求矩阵全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量

[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

A*X(:,1) #验证

ans =

0.5956
4.3174
7.0040

D(1)*X(:,1)

ans =

0.5956
4.3174
7.0040

在这里插入图片描述

R=[-1,2,0;2,-4,1;1,1,-6];
S=[1,2;2,3];
A=[R,zeros(3,2);zeros(2,3),S];
[X1,D1]=eig®

X1 =

0.8553    0.4517    0.1899
0.4703   -0.8395   -0.5111
0.2173   -0.3021    0.8383

D1 =

0.0996         0         0
     0   -4.7165         0
     0         0   -6.3832

[X2,D2]=eig(S)

X2 =

-0.8507 0.5257
0.5257 0.8507

D2 =

-0.2361 0
0 4.2361

[X3,D3]=eig(A)

X3 =

0.8553    0.4517    0.1899         0         0
0.4703   -0.8395   -0.5111         0         0
0.2173   -0.3021    0.8383         0         0
     0         0         0   -0.8507   -0.5257
     0         0         0    0.5257   -0.8507

D3 =

0.0996         0         0         0         0
     0   -4.7165         0         0         0
     0         0   -6.3832         0         0
     0         0         0   -0.2361         0
     0         0         0         0    4.2361

**特征值的几何意义在这里插入图片描述

:**

2.5稀疏矩阵

矩阵的存储方式:

  • 完全存储:
  • 稀疏存储:只存储矩阵的非零元素的值及其位置,即行号和列号。(也是按列存储)
    在这里插入图片描述
    稀疏存储方式的产生:

(1)完全存储与稀疏存储之间的转化

  • 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

whos
Name Size Bytes Class Attributes

A 5x5 128 double sparse
B 5x5 200 double

(2)直接建立稀疏存储矩阵
sparse(m,n):生成一个m*n的所有元素都是零的稀疏矩阵
sparse(u,v,S):其中u,v,S,是三个等长的向量。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函数直接建立稀疏存储矩阵,格式:
B=spconvert(A)
A为一个m* 3或m*4的矩阵,其每行表示一个非零元素,m是非零元素的个数
在这里插入图片描述

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

(3)带状稀疏矩阵的稀疏存储:
类型:无规则结构的稀疏矩阵和有规则结构的稀疏矩阵
带状稀疏矩阵是指非零元素集中在对角线上的元素

  • [B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d
  • A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m,n为带状稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置

A=[1,0,0,2,0;0,3,0,0,4;0,0,5,0,0;0,0,0,6,0;0,0,0,0,7]

A =

 1     0     0     2     0
 0     3     0     0     4
 0     0     5     0     0
 0     0     0     6     0
 0     0     0     0     7

[B,d]=spdiags(A)

B =

 1     0
 3     0
 5     0
 6     2
 7     4

d =

 0
 3

A=spdiags(B,d,5,5)

A =

(1,1) 1
(2,2) 3
(3,3) 5
(1,4) 2
(4,4) 6
(2,5) 4
(5,5) 7

(4)单位矩阵的稀疏存储:
speye(m,n)返回一个m* n的稀疏存储的单位矩阵

speye(3)

ans =

(1,1) 1
(2,2) 1
(3,3) 1

稀疏矩阵的应用:
在这里插入图片描述

k1=[1;1;2;1;0];#注意补零位置
k2=[2;4;6;6;1];#全是列向量
k3=[0;3;1;4;2];
B=[k1,k2,k3];
d=[-1;0;1];
f=[0;3;2;1;5];
A=spdiags(B,d,5,5);
x=A\f #A逆 乘f

x =

-0.1667
0.1111
2.7222
-3.6111
8.6111

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值