创建矢量输入变量的矩阵函数(Matlab)

create matrix function of vector input variable (Matlab)

我在创建满足我要求的函数时遇到问题。我正在尝试创建一个匿名函数,该函数在接受长度为 N 的向量时生成一个 NxN 矩阵。我想填充矩阵的每个元素(即,用一个循环)。一个更具体的简短示例:

N = 2;
Qjk = @(x,y) x * y;

for j = 1:N
  for k = 1:N

     Q(j,k) =@(x) Qjk(x(k),rand);

  end
end

最后应该会产生,eg.:

Q = @(x) [.23*x(1), .16*x(2); .95*x(1), .62*x(2)]

我可以手写上面的最终表达式,它可以按要求工作,但我无法使用 loop/vectorization 自动执行此过程。谢谢

据我了解,您想创建一个 N x N 元素矩阵,其中输入是一个长度为 N 的向量?...更具体地说,您希望将每个输入向量 x 中的元素并生成一个新的 1 x N 向量,其中 x 中的每个元素都被这个新的 1 x N 向量缩放?

您可以使用 bsxfun:

来避免循环
Q = bsxfun(@times, x(:).', rand(numel(x)));

我不确定 x 是什么形状,是行向量还是列向量,但我不打算做任何假设。 x(:).' 将确保您的向量成为行向量。但是,如果您想让您的代码像它一样工作,请在实际循环本身中去掉匿名函数声明。此外,您可能希望调用 Qjk 因为这是您声明的函数,而不是 Q 因为这是您要填充的矩阵。

只需执行:

N = 2;
Q = zeros(N); % New - Allocate to be more efficient
Qjk = @(x,y) x * y;

for j = 1:N
  for k = 1:N

     Q(j,k) = Qjk(x(k),rand); % Change

  end
end