Matlab Замена цикла с выражением диапазона - PullRequest
0 голосов
/ 13 марта 2012

У меня есть функция с именем 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 ]

1 голос
/ 13 марта 2012

Что касается состояния сообщения об ошибке, ваши левое и правое выражения имеют разный размер.Вы не можете сделать это в MATLAB.

Чтобы избежать цикла for, вы можете использовать функцию ARRAYFUN:

rays = arrayfun(@(x) buildRay(particle, ((x-1).*anglePart, rayLength), 1:numRays);
0 голосов
/ 13 марта 2012

Вам нужно изменить buildRays, чтобы принимать вектор (или матрицу) входных аргументов и возвращать матрицу с соответствующим размером (т.е. не всегда 1x4 - если входной вектор N элементов, возвращает матрицу Nx4).

Сейчас вы пытаетесь назначить вектор 1x4 в numRays x 4 месте - отсюда ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...