2016-02-10 138 views
0

我寫了一個函數(稱爲F),「好」(即給我我想要的結果),並在裏面我調用完全相同的功能(稱爲G_i)四次(下面其中一個),除了每次改變我索引循環的方式以便能夠覆蓋矩陣中的所有係數對時。我認爲這種方法是窮人,我想知道如果你有想法來改善它,請...更智能的方式來索引循環在Matlab

我這樣做順序檢查矩陣係數的條件(有時按順序(1,2)然後(1,3)然後(2,3)。我繼續檢查不同的順序)。

function G_1=countbackward(a,,,) 
n=a; 
G_1=[]; 


N=1; 
while N>0  
for l=n:-1:1 
    for m=1:l 

     if some condition on generated matrices 
     ... 

     elseif another condition on generated matrices 
     ... 

     else 
      N=0 ; 
     end 
     G_1=[G_1,g_0] ; 
    end 

end 

(對於n = 3 I獲得與以上輸入值:(3,1),(3,2),(2,1))

其他索引我上面的功能完全相同的機身使用:

for l=n:-1:1 
    for m=(l-1):-1:1 

同爲以下幾點:

for l=1:n 
    for m=l+1:n 

同爲以下幾點:

for l=1:n 
    for m=n:-1:l 

謝謝您的幫助。

附錄:

下面

是我的代碼一個簡單的例子:

function H=count2backward(a,g_0,s,e) 
%matrix g_0 is the "start" matrix 
%matrix g_K is the "end" matrix 

n=a; % number of nodes in an undirected graph or size A 
s=mypayoff(n,g_0); 
e=mypayoff(n,g_K); 

H=[]; 


N=1; 
while N>0  
for l=1:n 
    for m=n:-1:l 

     if l~=m && g_0(l,m)==0 && s(l)<=e(l) && s(m)<=e(m) && (s(l)<e(l) || s(m)<e(m)) ; 
      g_0(l,m)=g_0(l,m)+1 ; 
      g_0(m,l)=g_0(m,l)+1 ; 
      g_0 ; 

      s=mypayoff(n,g_0); 

     elseif l~=m && g_0(l,m)==1 && (s(l)<e(l) || s(m)<e(m)) ; 
      g_0(l,m)=g_0(l,m)-1 ; 
      g_0(m,l)=g_0(m,l)-1 ; 
      g_0 ; 

      s=mypayoff(n,g_0); 

     else 
      N=0; 

     end 
     H=[H,g_0] ; 
    end 

end 

+0

http://stackoverflow.com/help/mcve –

+0

謝謝你,我可以給我的完整代碼,但即使在我的條件,我打電話等功能,我寫.. @transversalitycondition – Sha

+1

的一點是要着力構建一個簡單的例子,說明抽象點,以便您的問題對其他成員有價值。你付出更多的努力,你可以在答案中付出更多的努力:) –

回答

1

您可以生成索引,並將其作爲參數傳遞。這可以讓你抽象決定如何循環到另一個函數。

indexes = countbackwardpattern(a); 
G_1=g_i(a, indexes); 
+0

太棒了!作品非常感謝你 – Sha