在Matlab中索引循环的更智能方法

时间:2016-02-10 22:26:02

标签: matlab loops indexing

我写了一个函数(称之为F),它工作“很好”(即给我想要的结果),在里面我调用完全相同的函数(称之为G_i)四次(低于其中一个)除外每次我改变我索引循环的方式,以便能够覆盖矩阵中的所有系数对。我认为这种方法很差,我想知道你是否有改进它的想法...

我这样做是为了顺序检查矩阵系数的条件(有时按顺序(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,我得到上面的条目:(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

1 个答案:

答案 0 :(得分:1)

您可以生成索引并将其作为参数传递。这让你抽象决定如何循环到另一个函数。

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