生活随笔
收集整理的這篇文章主要介紹了
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稀疏矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。