生活随笔
收集整理的这篇文章主要介绍了
2.5 matlab稀疏矩阵
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
稀疏矩阵:是指零元素的个数远远多于非零元素的个数的矩阵
1、矩阵的存储方式
(1)完全存储方式
(2)稀疏存储方式
稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。
注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
2、稀疏存储方式的产生
(1)完全存储方式与稀疏存储方式之间的转化
①A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
②S=full(A):将矩阵A转化为完全存储方式的矩阵S。
>> a
= eye
(5)a
=1 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 00 0 0 0 1>> a1
= sparse
(a
) %按照稀疏矩阵存储方式a1
=(1,1) 1(2,2) 1(3,3) 1(4,4) 1(5,5) 1>> a2
= full
(a
) %按照完全存储方式a2
=1 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 00 0 0 0 1>> whos %查看变量,可知稀疏矩阵存储方式所占内存远小于完全存储方式所占的内存空间Name Size Bytes Class Attributesa 5x5
200 double a1 5x5
128 double sparse a2 5x5
200 double
(2)直接建立稀疏存储矩阵
sparse函数的其他调用格式:
①sparse(m,n):
生成一个mx n的所有元素都是零的稀疏矩阵。
②sparse(u,v,S):
其中u、v、S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素u(i)、v(i)分别是S(i)的行和列下标。
>> a
= sparse
([1,2,3
],
[2,1,8
],
[3,2,-2
]) %直接建立稀疏矩阵a
=(2,1) 2(1,2) 3(3,8) -2
>> a1
= full
(a
)a1
=0 3 0 0 0 0 0 02 0 0 0 0 0 0 00 0 0 0 0 0 0 -2
>> whosName Size Bytes Class Attributesa 3x8
120 double sparse a1 3x8
192 double
使用spconvert函数直接建立稀疏存储矩阵,其调用格式为:
B=spconvert(A)
A为一个m×3或mx4的矩阵,其每行表示一个非零元素,m是非零元素的个数。
①A(i,1)表示第i个非零元素所在的行。
②A(i,2)表示第i个非零元素所在的列。
③A(i,3)表示第i个非零元素值的实部。
④A(i,4)表示第i个非零元素值的虚部。
若矩阵的全部元素都是实数,则无须第4列。
>> a
= [1,2,3
;2,1,8
;3,2,-2
] %描述的是一个稀疏矩阵a
=1 2 32 1 83 2 -2
>> b
= spconvert
(a
) %转换成为一个稀疏存储矩阵b
=(2,1) 8(1,2) 3(3,2) -2
>> whosName Size Bytes Class Attributesa 3x3
72 double b 3x2
72 double sparse
(3)带状稀疏矩阵的稀疏存储
稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则结构的稀疏矩阵。
带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。
①[B,d]=spdiags(A)
从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
②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 00 21 0 0 22 00 0 31 0 0 3241 0 0 42 0 00 51 0 0 52 0>> [b,d
] = spdiags
(a
) %矩阵b为全部非零对角线元素,向量d为非零对角线的位置b
=0 11 120 21 220 31 3241 42 051 52 0d
=-3
03>> a
= spdiags
(b,d,5,6
) %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 x n的稀疏存储单位矩阵。
>> a
= speye
(4)a
=(1,1) 1(2,2) 1(3,3) 1(4,4) 1
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
\fx
=-0.1667
0.11112.7222-3.6111
8.6111
注意,当参与运算的数据对象不全是稀疏存储矩阵时,所得结果是完全存储形式。
总结
以上是生活随笔为你收集整理的2.5 matlab稀疏矩阵的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。