Phụ lục-Lệnh và hàm 224
Phan Thanh Tao - 2004
tỉí khạc khäng, hồûc chè âënh, cạc pháưn tỉí âàût
trãn p âỉåìng chẹo
B l ma tráûn min(m,n) hng v p cäüt, thỉång âáưy
â (nhỉng khäng cáưn thiãút), cọ cạc cäüt l cạc
âỉåìng chẹo ca A. d l vectå âäü di p cọ cạc
thnh pháưn ngun chè âënh cạc âỉåìng chẹo trong A
Mäüt cạch thä så, A, B v d quan hãû båíi
for k = 1:p
B(:,k) = diag(A,d(k))
end
Bäún thao tạc khạc nhau, phán biãût theo säú âäúi
säú nháûp, cọ thãø dng våïi SPDIAGS l:
Láúy ra táút c cạc âỉåìng chẹo khạc khäng:
[B,d] = spdiags(A);
Láúy ra âỉåìng chẹo chè âënh:
B = spdiags(A,d);
Thay cạc âỉåìng chẹo chè âënh:
A = spdiags(B,d,A);
Tảo mäüt ma tráûn thỉa tỉì cạc âỉåìng chẹo ca
nọ:
A = spdiags(B,d,m,n);
Quan hãû chênh xạc trong A, B v d l:
if m >= n
for k = 1:p
for j = max(1,1+d(k)):min(n,m+d(k))
B(j,k) = A(j-d(k),j);
end
end
if m < n
for k = 1:p
for i = max(1,1-d(k)):min(m,n-d(k))
B(i,k) = A(i,i+d(k));
end
end
end
Vi pháưn tỉí ca B, ỉïng våïi cạc vë trê “ bãn
ngoi ” A, khäng xạc âënh âỉåüc bàòng cạc vng làûp
ny. Chụng khäng âỉåüc tham chiãúu khi B l âäúi
säú nháûp v âỉåüc dàût giạ trë 0 khi B l âäúi säú
xút.
Vê dủ, cạc lãûnh ny phạt sinh mäüt biãøu hiãûn 3
âỉåìng chẹo thỉa ca phẹp vi phán cáúp 2 cäø âiãøn
tải n âiãøm
e = ones(n,1);
A = spdiags([e -2*e e], -1:1, n, n)
Lãûnh ny âäøi ma tráûn A thnh ma tráûn kiãøm tra
Wilkinson (xem WILKINSON(n))
A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A)
Cúi cng, lãûnh ny sỉía lải 3 âỉåìng chẹo
B = spdiags(A)
Vê dủ thỉï hai khäng vng
A = [ 11 0 13 0
0 22 0 24
0 0 33 0
41 0 0 44
Phụ lục-Lệnh và hàm 225
Phan Thanh Tao - 2004
0 52 0 0
0 0 63 0
0 0 0 74]
cọ m = 7, n = 4 v p = 3
Lãûnh [B,d] = spdiags(A) cho d = [-3 0 2]' v
B = [ 41 11 0
52 22 0
63 33 13
74 44 24 ]
Ngỉåüc lải, våïi B v d nhỉ trãn thç biãøu thỉïc
spdiags(B,d,7,4) cho lải A vãư giạ trë gäúc
Chuøn ma tráûn âáưy â thnh ma tráûn thỉa
SPARSE
Xáy dỉûng ma tráûn thỉa tỉì cạc säú khạc 0 v cạc
chè säú
S = SPARSE( ) l hm gàõn liãưn phạt sinh cạc
ma tráûn thüc låïp lỉu trỉỵ thỉa ca MATLAB. Hm
ny cọ thãø gi våïi 1, 2, 3, 5 hồûc 6 âäúi säú
S = SPARSE(X) chuøn ma tráûn thỉa hồûc âáưy â
sang dảng thỉa bàòng cạch b âi cạc pháưn tỉí 0
S = SPARSE(i,j,s,m,n,nzmax) dng cạc dng ca
[i,j,s] âãø phạt sinh mäüt ma tráûn thỉa cåỵ mxn våïi
khäng gian phán bäú cho nzmax pháưn tỉí khạc 0. Hai
vectå chè säú ngun, i v j, v vectå thỉûc hồûc
phỉïc, s, táút c cng âäü di, nnz, l säú pháưn
tỉí khạc 0 trong ma tráûn thỉa kãút qu. Cọ mäüt säú
cạch gi âån gin 6 âäúi säú ny
S = SPARSE(i,j,s,m,n) dng nzmax = length(s).
S = SPARSE(i,j,s) dng m = max(i) v n = max(j).
S = SPARSE(m,n) cạch tàõt ca
SPARSE([],[],[],m,n,0). Lãûnh ny phạt sinh ma tráûn
thỉa cå bn cåỵ mxn gäưm táút c cạc säú 0. Âäúi
säú s v mäüt trong hai âäúi säú i v j cọ thãø l
âải lỉåüng vä hỉåïng, trong trỉåìng håüp ny chụng
âỉåüc bung ra âãø c 3 âäúi säú âáưu cọ cng âäü
di. Vê dủ, trêch ra v sau âọ rạp lải mäüt ma
tráûn thỉa:
[i,j,s] = find(S);
[m,n] = size(S);
S = sparse(i,j,s,m,n);
Båíi váûy, nhỉ cạc lãûnh ny, nãúu dng v cäüt
cúi cng cọ cạc pháưn tỉí khạc 0:
[i,j,s] = find(S);
S = sparse(i,j,s);
Táút c cạc thao tạc gàõn liãưn ca MATLAB vãư
säú hc, logic v vãư chè säú âãưu cọ thãø ạp dủng
cho cạc ma tráûn thỉa, hồûc cho cạc ma tráûn vỉìa
thỉa vỉìa âáưy â. Cạc thao tạc trãn ma tráûn thỉa
tr vãư ma tráûn thỉa, âáưy â tr vãư âáưy â.
Trong háưu hãút cạc trỉåìng håüp thç cạc thao tạc
trãn cạc ma tráûn vỉìa thỉa vỉìa âáưy â tr vãư
âáưy â. Ngoải trỉì trỉåìng håüp cọ âỉa vo, kãút
Phụ lục-Lệnh và hàm 226
Phan Thanh Tao - 2004
qu ca cạc thao tạc träün thỉa våïi âáưy â cọ
cáúu trục thỉa, nghéa l A .* S êt nháút thỉa nhỉ S .
Mäüt säú thao tạc, nhỉ S >= 0, phạt sinh cạc ma
tráûn thỉa låïn ("Big Sparse", hay "BS" ) ma tráûn
thüc täø chỉïc lỉu trỉỵ thỉa nhỉng êt pháưn tỉí 0
FULL
Chuøn ma tráûn thỉa sang låïp lỉu trỉỵ âáưy â
A = FULL(X) l hm gàõn liãưn chuøn mäüt ma tráûn
thỉa sang cå cáúu lỉu trỉỵ âáưy â v cho ra mäüt ma
tráûn âáưy â khäng thay âäøi
FIND
Tçm cạc chè säú ca cạc pháưn tỉí khạc 0
I = FIND(X) tr vãư chè säú ca cạc pháưn tỉí
khạc 0 ca vectå X
Vê dủ, I = FIND(A>100) , tr vãư cạc chè säú ca
cạc pháưn tỉí låìn hån 100 ca A. Xem RELOP
[I,J] = FIND(X) tr vãư cạc chè säú dng v cäüt
ca cạc pháưn tỉí khạc 0 trong ma tráûn X. Lãûnh
ny thỉåìng dng våïi cạc ma tráûn thỉa
[I,J,V] = FIND(X) cng tr vãư mäüt vectå cäüt
gäưm cạc pháưn tỉí khạc 0 ca X. Lỉu ràòng
find(X) v find(X~=0) s cho ra cng I v J, nhỉng
hm sau cho V våïi táút c cạc säú 1
SPCONVERT
SPCONVERT Chuøn dảng thỉa måí räüng
S = SPCONVERT(D) chuøn mäüt mng (nnz hồûc
nnz+1)x (3 hồûc 4) våïi cạc dng chỉïa [i,j,s] hồûc
[i,j,real(s(i,j)),imag(s(i,j))] sang ma tráûn thỉa
tỉång ỉïng. Mäüt dng báút k trong D cọ dảng [m n
0] hồûc [m n 0 0] cọ thãø dng âãø chè âiûnh kêch
thỉåïc ca S. Nãúu D â thỉa räưi thç khäng chuøn,
vç váûy SPCONVERT cọ thãø dng sau khi D âỉåüc nảp
tỉì tãûp MAT hồûc tãûp ASCII
Phụ lục-Lệnh và hàm 227
Phan Thanh Tao - 2004
Lm viãûc våïi cạc pháưn tỉí khạc 0 ca ma
tráûn thỉa
NNZ
Säú pháưn tỉí khạc 0
nz = NNZ(S) l säú pháưn tỉí khạc 0 trong S
NONZEROS
NONZEROS Cạc pháưn tỉí khạc 0
NONZEROS(S) l mäüt vectå cäüt âáưy â cạc pháưn
tỉí khạc 0 trong S. Hm ny cho s, nhỉng khäng cho
i v j nhỉ [i,j,s] = find(S)
NZMAX
Täøng säú khäng gian lỉu trỉỵ cạc pháưn tỉí khạc 0
Âäúi våïi ma tráûn thỉa, NZMAX(S) l säú vë trê lỉu
trỉỵ phán bäú cho cạc pháưn tỉí khạc 0 trong S. Våïi
ma tráûn âáưy â, NZMAX(S) l prod(size(S)).
Trong c hai trỉåìng håüp, nnz(S) <= nzmax(S) <=
prod(size(S))
SPONES
Thay thãú cạc pháưn tỉí khạc 0 våïi cạc säú 1
R = SPONES(S) phạt sinh mäüt ma tráûn våïi cáúu
trục thỉa giäúng S, nhỉng våïi cạc säú 1 tải vë trê
khạc 0
SPALLOC
SPALLOC Phán bäú bäü nhåï cho cạc pháưn tỉí khạc 0
s = SPALLOC(m,n,nzmax) tảo mäüt ma tráûn thỉa cåỵ
mxn táút c cạc pháưn tỉí 0 våïi chäù träúng âãø lỉu
nzmax pháưn tỉí khạc 0. Vê dủ:
s = spalloc(n,n,3*n);
for j = 1:n
s(:,j) = (mäüt vectå cäüt thỉa gäưm 3 pháưn
tỉí khạc 0);
end
ISSPARSE
ISSPARSE Âụng nãúu ma tráûn l ma tráûn thỉa
ISSPARSE(S) bàòng 1 nãúu låïp lỉu trỉỵ ca S l
thỉa v ngỉåüc lải thç bàòng 0
SPFUN
Ạp dủng mäüt hm chè cho cạc pháưn tỉí khạc 0
F = SPFUN('fun',S) ỉåïc lỉåüng hm fun(s) trãn cạc
pháưn tỉí khạc 0 ca S. Nghéa l
F = SPFUN('exp',S) cọ cng máùu thỉa nhỉ S (trỉì
trỉåìng håüp trn dỉåïi), ngỉåüc lải EXP(S) cọ giạ
trë 1 tải nåi S cọ giạ trë 0
Xem cạc ma tráûn thỉa
SPY
Trỉûc quan họa cáúu trục thỉa
Phụ lục-Lệnh và hàm 228
Phan Thanh Tao - 2004
SPY(S) v máùu thỉa ca ma tráûn S báút k
SPY(S,color) dng mu âạnh dáúu chè âënh thay cho
mu vng
SPY(S,marksize) dng kêch thỉåïc âạnh dáúu chè âënh
thay cho kêch thỉåïc phủ thüc vo kêch thỉåïc hçnh
nh v kêch thỉåïc ma tráûn
SPY(S,color,marksize) v SPY(S,marksize,color) l
cho phẹp
GPLOT
V âäư thë theo “l thuút âäư thë ”
GPLOT(A,xy) v âäư thë chè âënh båíi A v xy. Mäüt
âäư thë, G, gäưm mäütì táûp cạc nụt (âènh) âỉåüc
âạnh säú tỉì 1 âãún n, v mäüt táûp cạc cung, hồûc
cảnh, näúi cạc âènh lải. Âãø v âäư thë G, cáưn 2
ma tráûn. Ma tráûn kãư, A, cọ a(i,j) khạc 0 nãúu v
chè nãúu âènh i âỉåüc näúi våïi âènh j. Mng ta
âäü, xy, l mäüt ma tráûn cåỵ nx2 våïi vë trê cho âènh
i tải dng thỉï i xy(i,:) = [x(i) y(i)]
GPLOT(A,xy,lc) dng kiãøu âỉåìng v mu thay cho
ngáưm âënh l 'r-'. Vê dủ, lc = 'g:' . Xem PLOT
[X,Y] = GPLOT(A,xy) tr vãư cạc vectå âạnh dáúu
NaN X v Y m khäng v. Cạc vectå ny cọ thãø
dng âãø phạt sinh âäư thë sau ny nãúu mún
Cạc thût toạn sàõp xãúp lải
COLMMD
Báûc täúi thiãøu vãư cäüt
p = COLMMD(S). Báûc täúi thiãøu vãư cäüt ca S.
Âäúi våïi mäüt ma tráûn khäng âäúi xỉïng S, hm ny
tr vãư mäüt cäüt hoạn vë p âãø S(:,p) cọ cạc nhán
tỉí LU thỉa hån S
SYMMMD
Báûc âäúi xỉïng täúi thiãøu
p = SYMMMD(S), âäúi våïi mäüt ma tráûn xạc âënh
dỉång âäúi xỉïng S thç tr vãư mäüt hoạn vë âãø
S(p,p) cọ nhán tỉí Cholesky thỉa hån S. Âäi khi
SYMMMD cng lm viãûc täút âäúi våïi cạc ma tráûn
âäúi xỉïng khäng xạc âënh
SYMRCM
Âo thỉï tỉû Cuthill-McKee
p = SYMRCM(S) tr vãư mäüt hoạn vë p âãø S(p,p)
cọ profile nh hån S. Hm ny sàõp trỉåïc täút cho
viãûc tạch nhán tỉí LU hồûc Cholesky âäúi våïi cạc
ma tráûn nháûn âỉåüc tỉì cạc bi toạn di v gáưy
("long, skinny"). Nọ lm viãûc cho c hai loải S
âäúi xỉïng v khäng âäúi xỉïng
COLPERM
COLPERM Bác cạc cäüt dỉûa vo cạch âãúm cạc pháưn
tỉí khạc 0
Phụ lục-Lệnh và hàm 229
Phan Thanh Tao - 2004
p = COLPERM(S) phạt sinh mäüt hoạn vë âãø sàõp lải
cạc cäüt ca ma tráûn S thỉa (hồûc âáưy â) theo
thỉï tỉû khäng tàng ca viãûc âãúm cạc pháưn tỉí
khạc 0. Thỉåìng sàõp trỉåïc viãûc tạch nhán tỉí LU:
lu(S(:,p)). Khäng phi täút nháút trong thỉûc hnh
thäng thỉåìng, nhỉng tênh trãn mạy nhanh v thỉûc
hiãûn cäng viãûc khạ âẻp
RANDPERM
RANDPERM Vectå hoạn vë ngáùu nhiãn
RANDPERM(n) l mäüt hoạn vë ngáùu nhiãn ca cạc
säú ngun tỉì 1 âãún n. Vê dủ, RANDPERM(6) cọ thãø
l [2 4 5 6 1 3]. Lỉu ràòng RANDPERM gi hm RAND
v do âọ thay âäøi giạ trë khåíi tảo ngáùu nhiãn
ca hm RAND
DMPERM
Tạch Dulmage-Mendelsohn ca ma tráûn A
p = DMPERM(A) tr vãư mäüt ph håüp täúi âa; nãúu
A cọ hảng cäüt âáưy â thç A(p,:) vng våïi âỉåìng
chẹo khạc 0
[p,q,r,s] = DMPERM(A) tr vãư cạc hoạn vë âãø âàût
A(p,q) vo dảng khäúi tam giạc trãn:
Âäúi våïi A vng hảng âáưy â, A(p,q) cọ âỉåìng
chẹo khạc 0 v thnh pháưn Hall mảnh thỉï i l
khäúi thỉï i (bi,bi) ca A(p,q), våïi bi =
r(i):r(i+1)-1. Våïi A chỉỵ nháût täøng quạt, thnh
pháưn Hall mảnh thỉï i l khäúi (r(i):r(i+1)-1,
s(i):s(i+1)-1)
Chøn, säú âiãưu kiãûn, v hảng
NORMEST
NORMEST Ỉåïc lỉåüng chøn 2 (2-norm)
NORMEST(S) l mäüt ỉåïc lỉåüng chøn-2 ca ma
tráûn S
NORMEST(S,tol) dng sai säú tỉång âäúi tol thay cho
1.e-6
[nrm,cnt] = NORMEST(S) cng cho säú láưn dng làûp
ly thỉìa
CONDEST
CONDEST Ỉåïc lỉåüng säú âiãưu kiãûn chøn-1. Cạch
sỉía âäøi ca Higham tỉì phỉång phạp ca Hager
[C, V] = CONDEST(A) tênh giåïi hản dỉåïi C cho säú
âiãưu kiãûn chøn-1 ca A, v vectå V âãø
NORM(A*V)=NORM(A)*NORM(V)/C. V l vectå xáúp xè 0
nãúu C låïn
SPRANK
Hảng cáúu trục thỉa
r = SPRANK(A) hảng vãư cáúu trục ca ma tráûn thỉa
A. Cn gi l lưng cỉûc âải, phán cäng cỉûc âải,
v kêch thỉåïc ca mäüt ph håüp cỉûc âải trong
âäư thë phán âäi ca A. Ln ln cọ sprank(A) >=
Phụ lục-Lệnh và hàm 230
Phan Thanh Tao - 2004
rank(A), v trong säú hc sprank(A) ==
rank(sprandn(A)) våïi säú hc xạc sút
Cạc thao tạc trãn cáy
TREELAYOUT
TREELAYOUT Trçnh by mäüt cáy hồûc rỉìng
[x,y,h,s] = treelayout(parent,post) våïi parent l
vectå cạc nụt cha, våïi 0 cho gäúc. post l hoạn vë
háûu tỉû trãn cạc nụt ca cáy (nãúu b qua post
thç tênh nọ åí âáy). x v y l cạc vectå gäưm
cạc ta âäü trong hçnh vng âån vë m åí âọ trçnh
by cạc nụt ca cáy âãø tảo ra mäüt hçnh nh âẻp
màõt. Cạc âäúi säú ty chn, h l âäü cao ca cáy
v s l säú nụt con ca nụt gäúc
TREEPLOT
TREEPLOT V hçnh nh ca mäüt cáy
TREEPLOT(p,c,d) p l vectå cạc âiãøm cha, våïi
p(i) == 0 cho gäúc. c l mu v k tỉû cho cạc
nụt, hồûc c='' âãø khäng v nụt. d l mu v
k tỉû cho cạc cảnh, hồûc d='' âãø khäng v cảnh.
c hồûc d cọ thãø b qua, v cạc giạ trë ngáưm
âënh håüp l âỉåüc sỉí dủng
ETREE
Cáy khỉí ca mäüt ma tráûn
p = etree(A) tr vãư mäüt cáy khỉí âäúi våïi mäüt
ma tráûn vng âäúi xỉïng cọ tam giạc trãn l tam
giạc trãn ca A. p(j) l cha ca cäüt j trãn cáy,
hồûc 0 nãúu j l gäúc
p = etree(A,'col') tr vãư cáy khỉí ca A'*A
p = etree(A,'sym') giäúng p = etree(A)
[p,q] = etree( ) cng tr vãư hoạn vë háûu tỉû
q trãn cáy
ETREEPLOT
ETREEPLOT V mäüt cáy khỉí
etreeplot(A): V cáy khỉí ca A (hồûc A+A', nãúu
A khäng âäúi xỉïng)
etreeplot(A,c,d): Xem treeplot cho cạc tham säú
ty chn c v d
Phụ lục-Lệnh và hàm 231
Phan Thanh Tao - 2004
Cạc thao tạc linh tinh
SYMBFACT
SYMBFACT Phán têch nhán tỉí Symbol
count = SYMBFACT(A) tr vãư vectå gäưm säú âãúm
dng ca nhán tỉí tam giạc trãn nhán tỉí Cholesky
ca mäüt ma tráûn âäúi xỉïng cọ tam giạc trãn l
tam giạc trãn ca A, gi sỉí b qua trong tiãún
trçnh phán têch thỉìa säú. Phủc vủ ny nhanh hån
chol(A)
count = SYMBFACT(A,'col') phán têch A'*A (m khäng
tảo tảo nọ mäüt cạch r rng)
count = SYMBFACT(A,'sym') giäúng nhỉ p = symbfact(A).
Cọ mäüt säú giạ trë tr vãư ty chn:
[count,h,parent,post,R] = symbfact( ) cng tr vãư
âäü cao ca cáy khỉí, chênh cáy khỉí, mäüt hoạn vë
ca cáy khỉí, v ma tráûn 0-1 R cọ cáúu trục
ca chol(A)
SPPARMS
SPPARMS Âàût cạc tham säú cho cạc phủc vủ ma tráûn
thỉa
SPPARMS('key',value) âàût mäüt hồûc nhiãưu tham säú
"tunable" dng cho cạc toạn tỉí phỉång trçnh tuún
tênh thỉa, l \ v /, v cạc sàõp xãúp báûc âäúi
xỉïng täúi thiãøu, COLMMD v SYMMMD
SPPARMS, in ra mä t cạc ci âàût hiãûn thåìi.
Nãúu khäng cọ âäúi säú nháûp thç values = SPPARMS
tr vãư mäüt vectå cọ cạc thnh pháưn cho trong
cạc ci âàût hiãûn thåìi
[keys,values] = SPPARMS tr vãư vectå âọ, v cng
tr vãư mäüt ma tráûn k tỉû cọ cạc dng l cạc
tỉì khọa cho cạc tham säú
SPPARMS(values), khäng cọ âäúi säú xút, âàût táút
c cạc tham säú vo cạc giạ trë chè âënh båíi
vectå âäúi säú
value = SPPARMS('key') tr vãư ci âàût hiãûn thåìi
ca mäüt tham säú
SPPARMS('default') âàût táút c cạc tham säú vãư
cạc ci âàût màûc âënh ca nọ
SPPARMS('tight') âàût cạc tham säú báûc täúi thiãøu
vãư cạc ci âàût chàût ch ca chụng, chụng cọ
thãø âáùn âãún cạc báûc êt hån báûc thay thãú, nhỉng
lm cho cạc hm thỉûc hiãûn nhiãưu láưn hån. Cạc
tham säú våïi cạc giạ trë ngáưm âënh v cạc giạ
trë chàût ch l:
tỉì khọa
ngáưm âënh chàût
values(1) 'spumoni' 0
values(2) 'thr_rel' 1.1
1.0
values(3) 'thr_abs' 1.0
0.0
values(4) 'exact_d' 0
1