矩阵存储方式
完全存储
全存储
稀疏存储方式
只存储矩阵中非零元素的值及其位置即行号和列号。并不改变存储顺序,也是按列的 顺序进行存储。
稀疏存储方式的产生
(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