2017-08-02 140 views
1

假設我有矩陣A = [1 2; 3 4], B = [4 3; 2 1]。我想將矩陣A ([1; 3], [2; 4])中的每列乘以矩陣B ([4 3], [2 1])中的對應行和求和矩陣。我想出了下面的代碼:將矩陣中的每列乘以另一個矩陣中的相應行,並在Matlab中求和結果

C = zeros(size(A)); 
for i = 1 : size(A, 1) 
    C = C + A(:, i) * B(i, :); 
end 

它可以重寫使用一些數學技巧或matlab函數來擺脫for循環?

我看到我的問題關於我想要的結果是不明確的。結果應該完全模仿提供的Matlab代碼,因此我尋求一個矩陣,它是通過將每個列向量與來自兩個矩陣的相應行向量相乘而創建的中間矩陣的矩陣求和而給出的。對於這個具體的例子,它會通過

C = A(:, 1) * B(1, :) + A(:, 2) * B(2, :); 

給予我只是在尋找一個兼容維度的任何矩陣一些通用的,用於循環較少的版本。

+0

我根本不知道matlab,但從我的研究中,這應該工作:'C = A * B',然後'result = sum(C(:))'。這是否提供了您正在尋找的結果?來源:https://www.tutorialspoint.com/matlab/matlab_matrix_multiplication.htm,https://www.mathworks.com/matlabcentral/newsreader/view_thread/51252 – Jonathan

+0

根據您的更新,@ jodag的答案是正確的。 'C = A * B'等價於你的matlab代碼。 – Jonathan

回答

2

我只是嘗試了我的建議的意見,似乎與此octave tester工作:

縮寫形式(只適用於八度):

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

朗形式(Matlab的):

A = [1 2; 3 4] 
B = [4 3; 2 1] 
C = A * B  % Stop here if you want the exact result from your Matlab code 
x = sum(C(:)) % To get the sum of the resulting matrix 

來源:

  1. https://www.tutorialspoint.com/matlab/matlab_matrix_multiplication.htm
  2. https://www.mathworks.com/matlabcentral/newsreader/view_thread/51252

更新,根據您的更新:輸出A * B

8 5 
20 13 

代碼的輸出:

8 5 
20 13 
+1

短的形式不能在Matlab中工作,只在Octav – EBH

+0

謝謝!我剛剛更新了我的答案以反映這一點。 – Jonathan

+0

我不明白這是如何回答這個問題的。問題是要求一個矩陣結果,你的答案的結果是一個標量。 – jodag

0

你也可以在MATLAB中做到這一點,以獲得總和。

C=ones(1,2)*A*B*ones(2,1)

的一般形式是

C=ones(1,size(A,1))*(A*B)*ones(size(B,2),1);

編輯

我看到你更新你的清晰度問題。矩陣產品可以直接計算

C = A*B; 

正如jodag所指出的那樣。

這項工作提供了遵循線性代數的規則,其中矩陣的內部維度是相同的(即,當A中的列數匹配B中的行數時; size(A,2)==size(B,1))。

0

似乎

C = zeros(size(A)); 
for i = 1 : size(A, 1) 
    C = C + A(:, i) * B(i, :); 
end 

相當於矩陣乘法

C = A*B 

爲方陣AB

+0

同意。這也適用於其他維度,只要它們遵循線性代數的規則:矩陣A和B的內部維度是相同的(即,當A中的列數與B中的行數匹配時;當size(A,2 )==大小(B,1)')。 – informaton

相關問題