行列があるとします。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, :);
によって与えられるであろう。
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
アップデートに基づいて、@ jodagの答えは正しいです。 'C = A * B'はあなたのmatlabコードと同じです。 – Jonathan