我写了一个函数(称之为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
端
答案 0 :(得分:1)
您可以生成索引并将其作为参数传递。这让你抽象决定如何循环到另一个函数。
indexes = countbackwardpattern(a);
G_1=g_i(a, indexes);