2017-08-02 2 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関数を使用して書き換えることができますか?

私が望む結果について私の質問には不倫があります。結果は、提供されたMatlabコードを正確に模倣する必要があります。したがって、各列ベクトルに両方の行列の対応する行ベクトルを掛けて生成される中間行列の行列合計によって与えられる1つの行列を求めます。この特定の例では、それは私がちょうど互換性のある任意の次元の行列のためのいくつかの一般的な、forループレスバージョンを探しています

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);

EDIT

だろう。 jodagにより指摘したように行列積を直接

C = A*B; 

算出することができます。

これは、線形代数の規則に従えば、行列の内寸が同じ(つまり、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 

は正方行列ABため

C = A*B 

行列の乗算と等価であることが表示されます。

+0

合意。これは、線形代数の規則に従えば、他の次元でも機能します。行列AとBの内寸は同じです(つまり、Aの列の数がBの行の数に一致したとき、 )==サイズ(B、1) ')。 – informaton

関連する問題