2020-11-07 MATLAB学习小结(八)
稀疏矩阵
矩阵的存储方式
完全存储方式:将矩阵的全部元素按列存储。
稀疏存储方式:只存储矩阵的非零元素的值及其位置,即行号和列号。
注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
A矩阵的稀疏存储方式:
(1,1),1
(3,1),2
(2,2),5
(3,4),7
当矩阵的规模很大时,采用稀疏存储方式可以大大节约存储空间。
稀疏存储方式的产生
(1)完全存储方式与稀疏存储方式之间的转化
A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
S=full(A):将矩阵A转化为完全存储方式的矩阵S。
(2)直接建立稀疏存储矩阵
sparse函数的其他调用格式:
sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵。
sparse(u,v,S):其中u、v、S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标。
使用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列。
(3)带状稀疏矩阵的稀疏存储
稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则结构的稀疏矩阵。
带状稀疏矩阵就是一种十分典型的具有规则结构的稀疏矩阵,它是指所有非零元素集中在对角线上的矩阵。
[B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数与列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。
利用带状稀疏矩阵非零对角线元素组成的矩阵B,以及对角线位置组成的向量d,命令执行后产生一个稀疏存储矩阵A。
总 结
用spdiags函数产生带状稀疏矩阵的稀疏存储A:
A=spdiags(B,d,m,n)
其中,m、n为原带状矩阵的行数与列数。B为r×p矩阵,这里r=min(m,n),p为原带状矩阵所有非零对角线的条数,矩阵B的第i列即为原带状矩阵的第i条非零对角线。取值方法是:若非零对角线上元素个数等于r,则取全部元素;若非零对角线上元素个数小于r,则应该用零补足到r个元素。补零的原则是:若m0时(主对角线以上)在后面补0;当m≥n(行数≥列数),则d<0时在后面补0;d>0时在前面补0。
(4)单位矩阵的稀疏存储
speye(m,n)返回一个m×n的稀疏存储单位矩阵。
稀疏矩阵的应用实例
求下列三对角线性方程组的解。