|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
首先,在matlab里面,图形化一个矩阵的命令为spy。/ h0 X8 m Y# F6 V' {6 G$ ?! D
假如我们有一个矩阵A,保存在A.mat文件中。
' D* v, ~2 d3 V5 {1 \load A;
4 O, S; q$ y, h2 y( o7 i' fspy(A);
`' M5 O \/ N7 F4 i会生成如下图形,蓝色的点代表非零元素。# N# Q6 W; P6 Z2 c& Q! a
|6 i" N; k7 I# f. n9 _; F可以看到矩阵中的元素零散分布,bandwidth很大,这样利用迭代法求解时,收敛速度会降低。
' J1 ~2 r# @" r但如果我们将矩阵的元素都重新排序,会如何呢?
* T8 R" v) w4 u) B5 P3 |% j* [. ~# h我们利用三种方法:
# \' i) w/ q6 v; L9 H1 i4 kfigure;5 r' `% C- K* s
subplot(2,2,1);# v% g! X5 U: o# x% j( Z
spy(A);' q/ `5 D0 g' t6 f
title('original');, t% [) s p3 F# k5 I
subplot(2,2,2);# j: x5 E/ t3 ]/ J
p = symrcm(A);
1 K5 r* C! r; n9 |7 P; ]" h8 s$ h% zspy(A(p,p));# m3 e/ e( c$ w( d9 x
title('symrcm');! b. Q+ ?/ l. O
3 K/ m# P, O( U# n% P
subplot(2,2,3);7 E* I) E1 y Y* N9 A% }2 ^
q = colperm(A);
5 \& q# {" i) v/ }4 S3 ^+ \/ K" w! Aspy(A(q,q));" t6 l0 h# ?+ u" _, l
title('colperm');
( b. a# p, `' p8 ]4 M6 ^+ `0 K9 o
6 b5 V% O9 t, y; w5 |! w' J* f- msubplot(2,2,4);9 l6 @3 m# K5 R6 P% d
r = symamd(A);
+ w+ Q8 q2 N4 O3 G; Dspy(A(r,r));2 h7 a$ U" ?+ _' {) D; A! H! I
title('symamd');, ?1 ? x, o2 Y# H- c6 A! S
结果如下:
5 u0 i! C5 ]7 d0 S$ B. \1 F
& x s3 [4 ^* H t; u
5 y) g3 x* o, [( k
' b' o+ c( {( C2 D7 \' t可以看到,重新排序后矩阵的结构变的更规则,bandwidth变小,尤其是sysrcm方法。2 ]3 j7 h( i- \+ G( I5 h8 x4 A
文件下载:
* B: c6 |5 b! _; I4 Jhttp://cid-b505e89fcbf74c29.office.live.com/self.aspx/File^_Storer/Matlab/matrix^_reorder.7z
7 j K3 `0 l# c! Y& A* X' X稍后会给出rcm方法的fortran调用界面。
/ h9 Z3 G! t; ]/ b
% `( _( ^2 |6 H( E |
|