| 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 | ![]() |