2013-07-25 2 views
1

У меня есть 3 цикла вложенных циклов, которые создают вектор, но каждый раз, когда он проходит через циклы, вектор, который создается, меняет размер. Мне нужно сохранить каждый из этих векторов при завершении циклов for, поэтому я подумывал использовать mat2cell и хранить их в ячейке. Но я не знаю, как код вытащил вектор клетки, который будет содержать каждый из этих векторов разного размера.Сохранение векторов разных размеров из вложенного цикла цикла в MATLAB

Я приведу пример кода

for ip = n_low:n_up 
    for jx = x_low:x_up 
     for jphi = phi_lowx:phi_upx 
      lx = find_path(ip,jx,jphi,0,1); 
      . 
      . 
      . 
      A_r = volumeintegrate(integr_final_r , r , z , phi); 
     end 
    end 
end 

Очевидно, что вы не знаете, что эти переменные или цифры, но я думаю, что его не нужно, чтобы решить эту проблему. Anyways A_r - это то, что выплевывается в конце циклов, но A_r меняется по размеру, когда цикл повторяется. Мне нужно сохранить каждый вектор A_r.

ответ

2

Добавить счетчик и сохранить в гальванического элемента, например:

counter=0 
for ... 
    for ... 
     for ... 
      counter=counter+1; 
      A_r{counter} = volumeintegrate(integr_final_r , r , z , phi); 

затем извлечь п-й вектор просто написать A_r{n}

+0

Не забудьте инициализировать 'A_r' в массив ячеек правильного сначала. – Floris

2

Просто создать массив ячеек:

A_r = cell(Ni, Nj, Nk) 

Затем создайте циклы - заметьте, что я индексирую по целым числам, которые я буду использовать в качестве индекса в массиве ячеек, а затем вычисляю фактическое значение для переменных, которые вам нужны, глядя в массиве iVec и т.д.:

iVec = n_low:n_up; 
Ni = numel(iVec); 
jVec = x_low:x_up; 
Nj = numel(jVec); 
kVec = phi_lowx:phi_upx; 
Nk = numel(kVec); 

A_r = cell(Ni, Nj, Nk); 

for ii = 1:Ni 
    ip = iVec(ii); 
    for jj = 1:Nj 
    jx = jVec(jj); 
    for kk = 1:Nk 
     jphi = kVec(kk); 
     lx = find_path(ip,jx,jphi,0,1); 
     .... 
     A_r{ii,jj,kk} = volumeintegrate(integr_final_r , r , z , phi);; 
    end 
    end 
end 

Теперь вы можете получить доступ к каждому массиву таким же образом, что он был назначен:

A_r{ii,jj,kk} 
+0

Флорис, спасибо за помощь, которую у меня на самом деле уже было, я просто предпочел бы работать в векторе клетки, а не в массиве ячеек. Должен помочь в будущих расчетах, которые мне нужно сделать. –

+1

Если вы хотите «вектор клетки», то, я думаю, ответ Натана делает именно то, о чем вы просите. – Floris