1

假设我有两个向量:

A = [1 2 3];

B = [1 2];

我需要一个类似于乘法的函数A*B来产生以下输出:

[
  1 2 3
  2 4 6
]

似乎A*B, A*B'or之类的东西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)

尽管如此,即使有更好的方法来解决实际问题,知道我的第一个问题的答案也会很有趣。

4

1 回答 1

6

您在谈论外部产品。如果 A 和 B 都是行向量,那么您可以使用:

A'*B

如果它们都是列向量,那么您可以使用

A*B'

*matlab中的运算符表示矩阵乘法。矩阵乘法最基本的规则是第一个矩阵的列数必须与第二个矩阵的行数匹配。假设我有两个矩阵 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矩阵。

于 2013-10-30T21:27:17.057 回答