2013-10-30 30 views
0

比方說,我有兩個向量:如何乘兩個向量長度不同

A = [1 2 3]; 

B = [1 2]; 

而且,我需要類似的A*B乘法產生以下輸出功能:

[ 
    1 2 3 
    2 4 6 
] 

它看起來像A*B,A*B'A.*B這樣的東西是不允許的,因爲元素的數量是不一樣的。

我成功地做到這一點的唯一方法(我很新在MATLAB)使用ndgrid使兩個矩陣具有相同數量的元素是這樣的:

[B1,A1] = ndgrid(B, A); 
B1.*A1 

ans = 
1  2  3 
2  4  6 

請問這有,如果一些績效良好元素很大? 有沒有更好的方法在MATLAB中做到這一點?

其實我試圖解決以下問題MATLAB:

t = [1 2 3] 

y(t) = sigma(i=1;n=2;expression=pi*t*i) 

然而,即使是解決地方實際問題的一個更好的方式,這將是有趣的,知道答案我第一個問題。

回答

5

您正在談論一個outer product。如果A和B都是行向量,那麼你可以使用:

A'*B 

如果它們都列向量,那麼你可以使用

A*B' 

*運營商在MATLAB代表matrix multiplication。矩陣乘法的最基本規則是第一個矩陣的列數必須與第二個矩陣的行數相匹配。假設我有兩個矩陣A和B,分別是MxN和UxV。於是我只能在下列條件下進行矩陣乘法:

A = rand(M,N); 
B = rand(U,V); 

A*B % Only valid if N==U (result is a MxV matrix) 
A'*B % Only valid if M==U (result is a NxV matrix) 
A*B' % Only valid if N==V (result is a MxU matrix) 
A'*B' % Only valid if V==M (result is a UxN matrix) 

有四種可能的情況下,但它們的顯示的情況剛好轉。現在,既然載體都只是一個只有一個非單維矩陣,適用同樣的規則

A = [1 2 3]; % (A is a 1x3 matrix) 
B = [1 2]; % (B is a 1x2 matrix) 

A*B % Not valid! 
A'*B % Valid.  (result is a 3x2 matrix) 
A*B' % Not valid! 
A'*B' % Not valid! 

此外,還有其他四種可能的情況,但只有一個是有效的B'*A是的轉置A'*B,結果爲2x3矩陣。

+0

感謝您的詳細解答,這得到了很好的解釋,確切需要什麼! – quasoft