全部版块 我的主页
论坛 休闲区 十二区 灌水吧
663 1
2017-04-22
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循环就出错了。
附件列表
D5VAG12TQ5EJBKUV6[)8U9D.png

原图尺寸 3.1 KB

D5VAG12TQ5EJBKUV6[)8U9D.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-4-22 12:34:24
lindahc 发表于 2017-4-22 12:17
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);
matlab自己完全不懂,羡慕你们能学习该软件。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群