Matlab(12)——稀疏矩阵


文章目录

  • Matlab(12)——稀疏矩阵
  • 一、矩阵的存储方式
  • 1.完全存储方式
  • 2.稀疏存储方式
  • 二、稀疏存储方式的产生
  • 1.矩阵的完全存储方式与稀疏存储方式的转换
  • 2.直接建立稀疏存储方式的矩阵
  • ①sparse函数
  • ②spconvert函数
  • 3.带状稀疏矩阵的稀疏存储方式
  • ①从带状稀疏矩阵中提取对角线上元素
  • ②创建带状稀疏矩阵
  • 4.单位矩阵的稀疏存储方式


一、矩阵的存储方式

1.完全存储方式

矩阵的每一个元素都进行存储

2.稀疏存储方式

只存储非0元素的值及其位置,即行号与列号

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

二、稀疏存储方式的产生

1.矩阵的完全存储方式与稀疏存储方式的转换

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

2.直接建立稀疏存储方式的矩阵

①sparse函数

sparse(m,n):生成 m×n 全零稀疏矩阵。
sparse(i,j,v):根据 i、j 和 v 三个向量生成稀疏矩阵 S,v为稀疏矩阵中的非零元素,i与j的对应位置分别为v中对应为的非零元素在稀疏矩阵中的行下标与列下标。

②spconvert函数

B=spconvert(A):A为一个m3或m4矩阵,m为非零元素的个数,A的每一行用来存储一个非零元素的各种信息:
A(i,1):第i个非零元素所在的行
A(i,2):第i个非零元素所在的列
A(i,3):第i个非零元素的实部
A(i,4):第i个非零元素的虚部
若非零元素都为实数则矩阵A无需第4列,为m*3矩阵

例:

java稀疏矩阵知乎 稀疏矩阵sparse_java稀疏矩阵知乎

3.带状稀疏矩阵的稀疏存储方式

带状稀疏矩阵:所有非零元素都集中在对角线的位置

①从带状稀疏矩阵中提取对角线上元素

B = spdiags(A):从矩阵A中提取所有非零对角线元素赋给矩阵B,B 是一个其列为 A 的 p 条非零对角线的 min(m,n)×p 矩阵
[B,d] = spdiags(A):从矩阵A中提取所有非零对角线元素赋给B,d指示所提取出的对角线的位置
B = spdiags(A,d):从A中提取 d 指定的对角线。

需要注意的是矩阵B:
获取在主对角线以下的对角线上的元素存在矩阵B的一列之中,在这一列从上到下,先存对角线上元素,存完之后再补0;
获取在主对角线以上的对角线上的元素存在矩阵B的一列之中,在这一列从下到上,先存对角线上元素,存完之后再补0,

例:

java稀疏矩阵知乎 稀疏矩阵sparse_matlab_02

例:

java稀疏矩阵知乎 稀疏矩阵sparse_矩阵_03

②创建带状稀疏矩阵

A=spdiags(B,d,m,n):通过获取 B 的列并沿 d 指定的对角线放置它们,来创建一个 m×n 稀疏矩阵(在m*n矩阵中,d指定的对角线上元素个数不能超过B的列数)。
A=spdiags(B,d,A):B、d含义同上,参数矩阵A的含义是只修改A的指定对角线上的元素,其他元素不变

需要注意的是矩阵B:

要将B的某一列元素存到矩阵A主对角线以的对角线时,将这一列从上到下的元素逐个存入指定对角线,直到这条对角线存满。

要将B的某一列元素存到矩阵A主对角线以的对角线时,设对角线的位置为k,将这一列从第k个元素到下的元素逐个存入指定对角线,直到这条对角线存满。

例:

java稀疏矩阵知乎 稀疏矩阵sparse_线性代数_04

4.单位矩阵的稀疏存储方式

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

最后的一点说明:当参与元素的矩阵不全是稀疏存储方式的矩阵时,结果是完全存储形式。