2017-08-02 162 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

相关问题