2010-07-06 167 views
1

這裏有一個有趣的問題:)在matlab中拼貼矩陣

我有兩個「矩陣向量」,我想要像漢克爾函數一樣平鋪正常頂點。 例如: 列向量:

10 
00 

20 
00 

30 
00 

行向量:

30 40 50 60 
00 00 00 00 

所得矩陣需要是:

10 20 30 40 
00 00 00 00 

20 30 40 50 
00 00 00 00 

30 40 50 60 
00 00 00 00 

注意,0值可以改變,所產生的結構是重要的組成部分。

一個相關的問題: 我看着在命令「編輯repmat」,看到一些有趣的語法我不能爲找到幫助:

A=[1,3;2,4]; 
X=[1,1;2,2]; 
B=A(X,X); 

和B最終被

1 3 1 3 
2 4 2 4 
1 3 1 3 
2 4 2 4 

這基本上是repmat(A,2,2);

所以我的問題是,這是什麼語法:A(X,X)?

非常感謝!

奧弗

回答

0

如果你想瓷磚一套矩陣方式HANKEL瓷磚,這裏是你可以做的一種方式。首先,你可以把你所有的獨特的矩陣中的一個單元陣列:

mat = [1 0; 0 0]; 
cArray = {mat 2.*mat 3.*mat 4.*mat 5.*mat 6.*mat}; %# Your 6 unique matrices 

現在,如果你想第3點矩陣跑下來的第一列和最後4點矩陣跨最後一行運行時,您可以創建使用HANKEL索引矩陣:

>> index = hankel(1:3,3:6); 

index = 

    1  2  3  4 
    2  3  4  5 
    3  4  5  6 

然後索引您的單元陣列與index並使用CELL2MAT到所得的單元陣列轉換成一個矩陣:

>> cell2mat(cArray(index)) 

ans = 

    1  0  2  0  3  0  4  0 
    0  0  0  0  0  0  0  0 
    2  0  3  0  4  0  5  0 
    0  0  0  0  0  0  0  0 
    3  0  4  0  5  0  6  0 
    0  0  0  0  0  0  0  0 



對於你的問題,當你執行像A(X,Y)的索引操作的第二部分中,您使用的是作爲行索引的X元素和Y的元素列索引爲A使用XY中的值的每個組合。所以,如果X = [x1 x2 x3 x4]Y = [y1 y2 y3 y4],然後B = A(X,Y)結果等同於:

B = [A(x1,y1) A(x1,y2) A(x1,y3) A(x1,y4); ... 
    A(x2,y1) A(x2,y2) A(x2,y3) A(x2,y4); ... 
    A(x3,y1) A(x3,y2) A(x3,y3) A(x3,y4); ... 
    A(x4,y1) A(x4,y2) A(x4,y3) A(x4,y4)]; 
+0

嘿, 謝謝回答。也許我不清楚,因爲這不完全是我的意思。 對於第一部分,我不想交錯的東西。我想要hankel結構,但對於矩陣而不是單個標量。 也就是說,而不是hankel會放置一個數字的地方,我想要一個完整的矩陣。 至於第二部分,我想我的問題更加基本 - A(X,X)是做什麼的?其實,A(X,Y)做得更一般嗎? 再次非常感謝你回答:) – Ofer 2010-07-06 18:56:41

+0

@Ofer:我根據你的說明更新了我的答案。 – gnovice 2010-07-06 19:28:51

+0

哇!非常棒!這正是我想要的。謝謝 :) – Ofer 2010-07-08 05:28:46