欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

三元组顺序表表示的稀疏矩阵加法_Matlab入门教程 第 2 章 Matlab矩阵处理之稀疏矩阵...

发布时间:2025/3/19 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 三元组顺序表表示的稀疏矩阵加法_Matlab入门教程 第 2 章 Matlab矩阵处理之稀疏矩阵... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2.5 稀疏矩阵

2.5.1 矩阵的存储方式

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

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

举例:

举例

2.5.2 稀疏存储方式的产生

(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 函数的其他调用格式:

  • 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 函数直接建立稀疏存储矩阵,其调用格式为:B = spconvert(A)

A 为一个 m ✖️ 3 或 m ✖️ 4 的矩阵,其每行表示一个非零元素,m 是非零元素的个数

  • A(i,1) 表示第 i 个非零元素所在的行
  • A(i,2) 表示第 i 个非零元素所在的列
  • A(i,3) 表示第 i 个非零元素值的实部
  • A(i,4) 表示第 i 个非零元素值的虚部

若矩阵的全部元素都是实数,则无须第 4 列

>> 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)带状稀疏矩阵的稀疏存储

稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则结构的稀疏矩阵

带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。

image-20201015151353520>> 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

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

  • Speye(m,n) 返回一个 m × n 的稀疏存储单位矩阵
>> speye(3)

ans =

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

2.5.3 稀疏矩阵的应用实例

题目>> 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
与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是生活随笔为你收集整理的三元组顺序表表示的稀疏矩阵加法_Matlab入门教程 第 2 章 Matlab矩阵处理之稀疏矩阵...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。