MATLAB稀疏矩阵

矩阵存储方式

完全存储

全存储

稀疏存储方式

只存储矩阵中非零元素的值及其位置即行号和列号。并不改变存储顺序,也是按列的 顺序进行存储。

稀疏存储方式的产生

(1)完全存储方式与稀疏存储方式之间的转化
A=sparse(S) 将S转化为稀疏存储方式
S=full(A) 将矩阵A转化为完全存储方式的矩阵S

A =

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


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

  Name      Size            Bytes  Class     Attributes

  A         5x5               128  double    sparse    
  B         5x5               200  double              

A更佳省空间
(2)直接建立稀疏存储矩阵
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

(3)带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵
[B,d]=spdiags(A)

>> 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,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
     >> 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

(4)单位矩阵的稀疏存储

稀疏矩阵的应用实例

求下列三对角线性方程组的解

clear
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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值