2011-02-17 68 views
1

我想用一個值標記每個循環中出現的值。從循環標記每次迭代的值

說我有每個迭代出來的可變數量的值。我希望這些值被標記爲它們從哪個迭代中出來。

像 1-1,2-1 , 3-1,

1-2,2-2 , 3-2,4-2 ,

其中第一個數字是來自循環的值,第二個數字是來自它的迭代。 我覺得有一種方法,我只是無法找到它。

好吧,所以這裏有一些代碼。

for c=1:1:npoints; 
    for i=1:1:NN; 
     if ((c-1)*spacepoints)<=PL(i+1) && ((c-1)*spacepoints)>=PL(i); 
      local(c)=((c)*spacepoints)-PL(i); 

     end 
     if ((c-1)*spacepoints)>=PL(NN); 
      local(c)=((c)*spacepoints)-PL(NN); 
      element(i)=NN; 
     end 

    end 

我想標記每個本地值與它來自i:NN的迭代。 PL是一個向量,輸出是每次迭代的一組向量。

+0

你目前有什麼類型的價值?發佈一些我們可以使用的代碼! :) – corsiKa 2011-02-17 05:16:27

回答

0

目前,因爲它是在您的內部1:NN循環中,您的local(c)變量正在更新或覆蓋。你從來沒有申請的local以前的值,所以它是不是有些迭代優化算法(?)...

也許一個簡單的解決方案是將尺寸/類型的local矢量更改爲矩陣 。假設local的尺寸爲[npoints 1]。相反,你可以製作尺寸爲[npoints NN]。它現在是一個2d陣列(npoints行和NN列的矩陣)。使用第二維度的每個(假定列)矢量存儲來自內部循環:

local = zeros([npoints NN]); 

%# ... code in bewteen ... 

for c=1:1:npoints; 
    for i=1:1:NN; 
     if ((c-1)*spacepoints)<=PL(i+1) && ((c-1)*spacepoints)>=PL(i); 
      local(c, i)=((c)*spacepoints)-PL(i); 

     end 
     if ((c-1)*spacepoints)>=PL(NN); 
      local(c, i)=((c)*spacepoints)-PL(NN); 
      element(i)=NN; 
     end 

    end 
end 

c'th行您local矩陣然後將對應於從所述內環的NN的值。請注意,我假設你的向量是列向量 - 如果沒有,只需更改大小的順序。

2

對於這種快速的問題,我想創建一個單元陣列:

for k = 1:12 
    results{k} = complicated_function(...); 
end 

如果輸出真的很複雜,然後我返回一個結構與領域有關的輸出:

for k = 1:12 
    results{k}.file = get_filename(...); 
    results{k}.result = ...; 
end