我无法创建能够实现我想要的功能。我试图创建一个匿名函数,在接受长度为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)]
我可以手动编写上面的最终表达式,并且可以根据需要运行,但是我无法使用循环/矢量化自动执行此过程。感谢。
答案 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