2015-07-05 3 views
0

У меня возникла следующая проблема: в моем коде требуется матрица -...- матричный вектор в цикле for. В каждом цикле я хочу получить дополнительную матрицу, чтобы умножить ее, например. i = 1: P1 * z и i = 2: P1 * P2 * z и т. д. Это мой код до сих пор. Очевидно, что это просто вычисления: я = 1: P1 * г, г = 2: P2 * г и т.д ...matlab: создание дополнительных переменных в цикле for

for ii = 1:10 
    % Projection on last_z 
    projected_last_z = projection(:,:,ii) * last_z; 
end 

ответ

1

Это, как правило, считается плохой практикой, чтобы создать новые переменные в цикле, как вы хотите. Лучше собрать все результаты в cell array или так:

n = 10; 
results = cell(1, n); % preallocate some space 
for i = 1:n 
    results{i} = some_calculation(i); 
end; 

Вы можете получить результат к-й итерации с использованием results{k}.

+1

Не было бы лучше, чтобы полностью отказаться от цикла? –

+0

Да, но моя проблема немного другая. Я должен снова рассчитать свой результат. проекция 3D-матрицы вычисляется в конце цикла for. –

1

Вы должны делать вычисления значения всегда в одной и той же переменной, если вы хотите сохранить результаты

n = 10; 
projected_last_z = 1; 
for ii = 1:n 
    projected_last_z = projected_last_z * projection(:,:,ii); 
end 
projected_last_z = projected_last_z * last_z; 

Цикл является

петля 1: projected_last_z = P1

петля 2 : projected_last_z = P1 * P2

...

петля 10: projected_last_z = P1 * P2 * ... * P10

Затем умножьте окончательный результат на last_z

Смежные вопросы