MATLAB Function Reference |
Syntax
[B,d] = spdiags(A) B = spdiags(A,d) A = spdiags(B,d,A) A = spdiags(B,d,m,n)
Description
spdiags
函數可產生 spdiags
函數。依照參數個數的不同,可分為以下四種功能:
[B,d] = spdiags(A)
從 m-by-n
的矩陣 A
取出所有非零的對角元素。B
為 min(m,n)-by-p
的矩陣,其裡面每一行為 A
的 p
個非零對角元素。d
為長度 p
的向量,其裡面整數元素明確說明了 A
的對角元素。
B = spdiags(A,d)
取出由 d
所指明的對角元素。
A = spdiags(B,d,A)
以 B
的每一行取代 d
所指明的對角線位置。其輸出為稀疏矩陣。
A = spdiags(B,d,m,n)
將 B
的每一行放入由 d
所指明的對角線位置而建立 m-by-n
的稀疏矩陣。
Arguments
spdiags
函數可處理三個矩陣,這些矩陣可以多種組合當作輸入及輸出:
A |
為 m -by-n 的矩陣,通常為稀疏矩陣,其非零元素位置在 p 對角線上。 |
B |
為 min(m,n) -by-p 的矩陣,通常為完全矩陣,其每一行為 A 的對角線。 |
d |
為長度 p 的向量,其裡面整數元素明確說明了 A 的對角元素。 |
for k = 1:p B(:,k) = diag(A,d(k)) end
B
的一些元素並不會在上面的迴圈被定義。當 B
為輸入矩陣,它們不會被參考;當 B
為輸出矩陣,則被設為零。
Examples
例一: 這個例子可產生在 n
點上典型第二差異運算子(classic second difference operator)的稀疏三對角線(tridiagonal)表示法。
e = ones(n,1); A = spdiags([e -2*e e], -1:1, n, n)
A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A)
B = spdiags(A)
A = [11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 0 52 0 0 0 0 63 0 0 0 0 74]
指令 [B,d]
=
spdiags(A)
可產生 d
=
[-3
0
2]'
及
B = [41 11 0 52 22 0 63 33 13 74 44 24]
相反地,指令 spdiags(B,d,7,4)
可產生原來的 A
。
例三: 這個例子為說明當 B
的每一行比所要取代的對角線還長時,spdiags
如何建立那些對角線。
B = repmat((1:6)',[1 7]) B = 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 d = [-4 -2 -1 0 3 4 5]; A = spdiags(B,d,6,6); full(A) ans = 1 0 0 4 5 6 1 2 0 0 5 6 1 2 3 0 0 6 0 2 3 4 0 0 1 0 3 4 5 0 0 2 0 4 5 6
See Also
spconvert | speye |