【发布时间】:2016-05-21 12:18:48
【问题描述】:
我写了一个函数(称之为 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
结束
【问题讨论】:
-
谢谢,我可以给出完整的代码,但即使在我的条件下,我也会调用我编写的其他函数。@transversalitycondition
-
重点是尝试构建一个简单的示例来说明抽象点,以便您的问题对其他成员有价值。您在问题上付出的努力越多,您在回答中所期望的努力就越多:)
-
@transversalitycondition 感谢您的建议,我刚刚编辑了帖子。