如何将两个不同长度的向量相乘

qua*_*oft 1 matlab vector matrix

假设我有两个向量:

A = [1 2 3];

B = [1 2];
Run Code Online (Sandbox Code Playgroud)

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

[
  1 2 3
  2 4 6
]
Run Code Online (Sandbox Code Playgroud)

看起来像是A*B,A*B'或者A.*B不允许的元素数量是不一样的.

我设法做到这一点的唯一方法(我在MATLAB上很新)是用ndgrid两个矩阵来生成具有相同数量的元素,如下所示:

[B1,A1] = ndgrid(B, A);
B1.*A1

ans =
 1     2     3
 2     4     6
Run Code Online (Sandbox Code Playgroud)

如果元素数量很大,这会有很好的表现吗?在MATLAB中有更好的方法吗?

其实我试图用MATLAB解决以下问题:

t = [1 2 3]

y(t) = sigma(i=1;n=2;expression=pi*t*i)
Run Code Online (Sandbox Code Playgroud)

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

nis*_*pio 6

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

A'*B
Run Code Online (Sandbox Code Playgroud)

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

A*B'
Run Code Online (Sandbox Code Playgroud)

*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)
Run Code Online (Sandbox Code Playgroud)

还有四种可能的情况,但它们只是所示案例的转置.现在,由于向量只是一个只有一个非单一维度的矩阵,因此适用相同的规则

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!
Run Code Online (Sandbox Code Playgroud)

同样,还有其他四种可能的情况,但唯一有效的情况B'*A是转置A'*B并产生2x3矩阵.