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

时间:2016-06-13 18:30:25

标签: matlab matrix vector anonymous-function matrix-multiplication

我无法创建能够实现我想要的功能。我试图创建一个匿名函数,在接受长度为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

最后这应该产生,例如:

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

我可以手动编写上面的最终表达式,并且可以根据需要运行,但是我无法使用循环/矢量化自动执行此过程。感谢。

1 个答案:

答案 0 :(得分:1)

所以我理解你要创建一个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