层次分析法原理简单,matlab实现起来也较容易。
对于matlab新手而言,主要在判断矩阵未通过一致性检验的时候,需要重新输入,重新计算。clc;
clear;% 清除所有命令窗口,清除所有变量
while true %无条件进入循环
A=input('请输入判断矩阵A=');
[m,n]=size(A); %获取指标个数
RI=[ 0 0 0.58 0.901.121.261.361.411.46];
[V,D]=eig(A); %求判断矩阵的特征值和特征向量,V特征值,D特征向量;
tz=max(D);
B=max(tz); %最大特征值
[row, col]=find(D==B); %最大特征值所在位置
C=V(:,col); %对应特征向量
CI=(B-n)/(n-1); %计算一致性检验指标CI
CR=CI/RI(1,n);
if CR<0.10
disp('CI=');disp(CI);
disp('CR=');disp(CR);
disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');
break;
else
disp('对比矩阵A未通过一致性检验,需对对比矩阵A重新构造');
continue;
end
end
Q=zeros(n,1);
for i=1:n
Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量标准化
end
Q %最后输出权重值