%层次分析法(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('权重为:');
disp(w);
%一致性检验
CI = (t-n)/(n-1);
RI = [0 0 0.52 0.89 1.12 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
% function [Q]=AHP(B)
% %Q为权值,B为对比矩阵
% %导入判别矩阵B
% [n,m]=size(B);
% %判别矩阵具有完全一致性
% for i=1:n
% for j=1:n
% if B(i,j)*B(j,i)~=1
% fprintf('i=%d,j=%d,B(i,j)=%d,B(j,i)=%d\n',i,j,B(i,j),B(j,i))
% end
% end
% end
% %求特征值特征向量,找到最大特征值对应的特征向量
% [V,D]=eig(B);
% tz=max(D);
% tzz=max(tz);
% c1=find(D(1,:)==max(tz));
% tzx=V(:,c1);%特征向量
% %权
% quan=zeros(n,1);
% for i=1:n
% quan(i,1)=tzx(i,1)/sum(tzx);
% end
% Q=quan;
% %一致性检验
% CI=(tzz-n)/(n-1);
% RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59];
% %判断是否通过一致性检验
% CR=CI/RI(1,n);
% if CR>=0.1
% fprintf('没有通过一致性检验\n');
% else
% fprintf('通过一致性检验\n');
% end
% end
11-16
2218
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-16
08-20
5391
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)