创建矢量输入变量的矩阵函数(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
我在创建满足我要求的函数时遇到问题。我正在尝试创建一个匿名函数,该函数在接受长度为 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