Matlab用范围表达式替换循环

时间:2012-03-13 18:23:27

标签: matlab for-loop replace range

我有一个名为buildRay的函数,它返回1x4矩阵。我这样称呼它多次:

rays = zeros(numRays, 4);
for j = 1:numRays
    rays(j, :) = buildRay(particle, (j-1)*anglePart, rayLength);
end

如果我尝试用以下代码替换循环:

rays(1:numRays, :) = buildRay(particle, ((1:numRays)-1).*anglePart, rayLength);

我收到以下错误

  

???订阅的分配维度不匹配。

我不明白为什么。

有人可以告诉我我做错了吗?

感谢。

2 个答案:

答案 0 :(得分:1)

作为错误消息状态,您的左右表达式具有不同的大小。你不能在MATLAB中做到这一点。

为避免for循环,您可以使用ARRAYFUN函数:

rays = arrayfun(@(x) buildRay(particle, ((x-1).*anglePart, rayLength), 1:numRays);

答案 1 :(得分:0)

您需要更改buildRays以接受输入参数的向量(或矩阵)并返回适当大小的矩阵(即不总是1x4 - 如果输入向量是N元素,则返回{ {1}}矩阵)。

现在,您正在尝试将Nx4向量分配到1x4点 - 因此出错。