层次分析法、 MATLAB
- 格式:docx
- 大小:18.57 KB
- 文档页数:4
%基于Matlab的层次分析法程序
%适用于层次分析模型为三层的决策问题
%author:hudi
%copyright:MATLAB7.1
disp ('请输入判断矩阵A');
A=input('A=');
%层次单排序
[n,n]=size(A);
M=ones(n,1);
for i=1:n
for k=1:n
M(i)=A(i,k)*M(i);%计算判断矩阵每一行诸元素的乘积
end
end
RootM=nthroot(M,n);%计算每一行诸元素的乘积的n次方根
W=RootM./sum(RootM);%进行归一化处理,得到各准则相对于目标层的权重max_A=max(eig(A));%计算判断矩阵的最大特征根
%一致性检验
if n-1==0
CI=0;
else
CI=(max_A-n)/(n-1);%计算一致性指标CI
end
%确定判断矩阵平均随机性指标RI
switch n
case 1
RI=0.00
case 2
RI=0.00
case 3
RI=0.58
case 4
RI=0.90
case 5
RI=1.12
case 6
RI=1.24
case 7
RI=1.32
case 8
RI=1.41
case 9
RI=1.45
otherwise
disp('error')
end
if RI==0
CR=0;
else
CR=CI/RI;%计算一致性比例CR
end
%对CR进行检验
if CR<0.1
disp('判断矩阵具有满意一致性');
disp('CI=');
disp(CI);
disp('CR=');
disp(CR);
else
disp('判断矩阵的一致性不能被接受');
end
%层次总排序
B=cell(1,n);
w=cell(1,n);
for i=1:n
B{i}=input(['请输入第三层第',num2str(i),'个判断矩阵']); end
for i=1:n
[m,m]=size(B{i});
M_=ones(m,1);
for x=1:m
for y=1:m
M_(x)=(B{i}(x,y))*M_(x);
end
end
RootM_=nthroot(M_,m);
w{i}=RootM_/sum(RootM_);%组合权向量
end
%判断方案层的组合一致性
MAX_B=ones(1,n);
RI_=ones(1,n);
for i=1:n
MAX_B(i)=max(eig(B{i}));
switch m
case 1
RI_(i)=0.00
case 2
RI_(i)=0.00
case 3
RI_(i)=0.58
case 4
RI_(i)=0.90
case 5
RI_(i)=1.12
case 6
RI_(i)=1.24
case 7
RI_(i)=1.32
case 8
RI_(i)=1.41
case 9
RI_(i)=1.45
otherwise
disp('error')
end
end
CI_=(MAX_B-m)./(m-1);
%第三层的组合一致性比率检验
CI_group=CI_*W;
RI_group=RI_*W ;
if RI_group==0
CR_group=0 ;
else
CR_group=CI_group/RI_group;
end
if CR_group<0.1
disp('第三层的组合一致性检验通过');
disp('CI_group=');
disp(CI_group);
disp('RI_group=');
disp(RI_group);
else
disp('第三层组合一致性检验不通过');
end
%第三层对第一层的一致性比率
CR_total=CR+CR_group;
if CR_total<0.1
disp('第三层对第一层的层次总排序一致性检验通过');
disp('CR_total=');
disp(CR_total);
else
disp('第三层对第一层的层次总排序一致性检验不通过');
end
;%计算第三层各方案相对于总目标所占的权重
w_all=[w{1:n}]*W;
disp('第三层各方案相对于总目标所占的权重为'); disp(w_all);
%确定所占权重最大的方案并输出
a=find(w_all==max(w_all));
disp('所在权重最大的方案为第');disp(a);disp('个方案'); %程序完。