clear
A=[1 3 1 5;1/3 1 1 1/3;1 1 1 1/3;1/5 3 3 1];
[n,n]=size(A);
B=zeros(n,n);
flag=0;
while flag==0;
B=ones(4,1)*sum(A);
B=A./B;
w=sum(B,2)/n;
w=w*ones(1,4);
C=B./w;
Ckl=abs(C-1);
[Ck,Cl]=find(Ckl==max(max(Ckl)));
Ckl=C(Ck,Cl);
Akl=A(Ck,Cl);
if Ckl>1 %%4.1
if Akl>1
A(Ck,Cl)=Akl-1;
A(Cl,Ck)=1/A(Ck,Cl); %5
for i=1:n
for j=1:n
if (i==Ck)&(j==Cl);
continue
end
A(i,j)=1/A(j,i);
end
end
else %%4.
A(Ck,Cl)=A(Ck,Cl)/(1+A(Ck,Cl));
A(Cl,Ck)=1/A(Ck,Cl);%5
for i=1:n
for j=1:n
if (i==Ck)&(j==Cl);
continue
end
A(i,j)=1/A(j,i);
end
end
end
else %4.2
if Akl>1
A(Ck,Cl)=Ak1+1;
A(Cl,Ck)=1/A(Ck,Cl);%5
for i=1:n
for j=1:n
if (i==Ck)&(j==Cl);
continue
end
A(i,j)=1/A(j,i);
end
end
else %%4.
A(Ck,Cl)=A(Ck,Cl)/(1-A(Ck,Cl));
A(Cl,Ck)=1/A(Ck,Cl);%5
for i=1:n
for j=1:n
if (i==Ck)&(j==Cl);
break
end
A(i,j)=1/A(j,i);
end
end
end
end
%
[n,n]=size(A);
[v,d]=eig(A);
r=d(1,1);
CI=(r-n)/(n-1);
RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59 1.61];
CR=CI/RI(n);
if(CR<0.10)
result=1;
else
result=0;
end
flag=result;
end
请教各位大神,这个算法的问题出在哪里呀?
如果不要while循环的话,程序是ok的,可是一加while循环就出错了。
附件列表