层次分析法(迭代逼近法)
算例
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%层次分析法(方法一:迭代逼近法)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输入判断矩阵
clc;
clear;
a=[1 1/2 4 3 3;2 1 7 5 5;1/4 1/7 1 1/2 1/3;1/3 1/5 2 1 1;1/3 1/5 3 1 1];
b=0.001; %设置精度
w=[0 1 0 0 0]' ;%输入初始特征向量,特征向量需要满足一定要求即可
k=(1);
j=2;
w(:,2)=a*w(:,1)./k(1);
k(2)=max(w(:,2));
c=max(abs(w(:,2)./k(2)-w(:,1)./k(1)));
while c>=b
j=i+1;
for i=1:j
w(:,i+1)=a*w(:,i)./k(i);
k(i+1)=max(w(:,i+1));
c=max(abs(w(:,i+1)./k(i+1)-w(:,i)./k(i)));
end
end
%最终值权重归一化
wend=w(:,j+1)./k(j+1)./sum(w(:,j+1)./k(j+1));
%一致性检验
x=[];
d=w(:,size(w,2));
for i=1:size(a,1)
for j=1:size(a,1)
x(i,j)=a(i,j)./(d(i)/d(j));
end
end
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];
y=sum(sum(x))/(size(w,2));
CI=(y-size(w,1))/(size(w,1)-1);
CR=CI/RI(size(w,1));
if CR<=0.1
disp('通过一致性检验')
else
disp('未通过一致性检验')
end
层次分析法(和法)。未进行一致性检验
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear;
a=[1 1/2 4 3 3;2 1 7 5 5;1/4 1/7 1 1/2 1/3;1/3 1/5 2 1 1;1/3 1/5 3 1 1];
for i=1:size(a,1)
for j=1:size(a,1)
b(j)=sum(a(:,j));
d(i)=sum(a(i,j)/b(j));
A(i,j)=a(i,j)/b(j);
e(i)=sum(A(i,:))./(size(a,1));
end
end