10/31/2006

串接指令之應用

MATLAB Catenation Commands

串接兩矩陣,構成新矩陣之指令如下表:








函數名稱說明
cat沿設定方向串接
horzcat沿水平方向串接
vertcat沿垂直方向串接
repmat依垂直與水平方向倍數串接
blkdiag由現存之矩陣產生對角矩陣


下面為執行這些函數指令之例子:

串接矩陣與陣列



除使用中括號[]作簡單串接外,其他串接指令有cat、horzcat及vertcat等三個函數。這些指令可以交互運用,例如要將AB兩矩陣作垂向串接時,下述三個指令均可得到同樣的結果:

水平串接:

 C = [A B] %使用中括號,相隔用分號。
 C = cat(2, A, B); % 第一參數設定為2。
 C = horzcat(A, B); % 無額外參數。


垂直串接:

 C = [A; B] %使用中括號,相隔用分號。
 C = cat(1, A, B); % 第一參數設定為1。
 C = vertcat(A, B); % 無額外參數。


拷貝串接



使用repmat函數在垂向及水平方向產生不同數量之拷貝矩陣,其指令型式如下:

repmat(M, v, h)

MATLAB 將輸入矩陣垂直方向拷貝v 次;水平方向拷貝h次。下面舉例:


A = [8 1 6; 3 5 7; 4 9 2]
A =
8 1 6
3 5 7
4 9 2

B = repmat(A, 2, 4)
B =
8 1 6 8 1 6 8 1 6 8 1 6
3 5 7 3 5 7 3 5 7 3 5 7
4 9 2 4 9 2 4 9 2 4 9 2
8 1 6 8 1 6 8 1 6 8 1 6
3 5 7 3 5 7 3 5 7 3 5 7
4 9 2 4 9 2 4 9 2 4 9 2


區塊對角矩陣



利用blkdiag函數可以結合矩陣,鉗入對角方向,產生許多區塊對角矩陣,在區塊之外的新建元素位置則設定為零:


A = magic(3);
B = [-5 -6 -9; -4 -4 -2];
C = eye(2) * 8;

D = blkdiag(A, B, C)
D =
8 1 6 0 0 0 0 0
3 5 7 0 0 0 0 0
4 9 2 0 0 0 0 0
0 0 0 -5 -6 -9 0 0
0 0 0 -4 -4 -2 0 0
0 0 0 0 0 0 8 0
0 0 0 0 0 0 0 8

沒有留言: