MATLAB-AHP(层次分析法求解)

%层次分析法,AHP 
 
disp('请输入判断矩阵A(n阶)');
A=input('A=');
[n,n]=size(A);
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while k>p
    i=i+1;
    x(:,i)=A*y(:,i-1);
    m(i)=max(x(:,i));
    y(:,i)=x(:,i)/m(i);
    k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp(w);
%以下是一致性检验
% CI=(t-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];
% CR=CI/RI(n);
% if CR<0.10
%     disp('此矩阵的一致性可以接受');
%     disp('CI=');disp(CI);
%     disp('CR=');disp(CR);
% end
j=1;
while j<=n
   
disp('请输入判断矩阵B(n阶)');
B=input('B=');
[n1,n1]=size(B);
W=[];
x=ones(n1,100);
y=ones(n1,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=B*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while k>p
    i=i+1;
    x(:,i)=B*y(:,i-1);
    m(i)=max(x(:,i));
    y(:,i)=x(:,i)/m(i);
    k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
W(j,:)=y(:,i)/a;
t=m(i);
disp(W(j,:));
%以下是一致性检验
% CI=(t-n1)/(n1-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];
% CR=CI/RI(n1);
% if CR<0.10
%     disp('此矩阵的一致性可以接受');
%     disp('CI=');disp(CI);
%     disp('CR=');disp(CR);
% end
j=j+1
end
%求解--看最后是哪个选项的分数最高
disp('最后结果');
u=1;
z=zeros(1,15);
while u<=n1
    for t=1:n
    z(1,u)=w(t)*W(t,u)+z(1,u);
    end
    u=u+1;
end
disp(z);


猜你喜欢

转载自blog.csdn.net/qq_41777527/article/details/80586353