层次分析法MATLAB程序

作为一个数学人,对于层次分析法,我的评价同下:

这里写图片描述

其主观作用太强,例如,那个矩阵的由来就无根据,仅仅是由若干尺度表主观推出来的,并不是真正定量的严谨的计算推理,类似的还有模糊评价里的专家评定,虽无力吐槽,作为一个知识,还是贴一段代码。

clear
clc
a=[1 3 5;1/3 1 3;1/5 1/3 1];
b1=[1 1/3;3 1];
b2=[1 5;1/5 1];
b3=[1 3;1/3 1];
c1=[1 3;1/3 1]; 
c2=[1 1/3;3 1];
c3=[1 1/5;5 1];
c4=[1 7;1/7 1]; 
c5=[1 1/7;7 1]; 
c6=[1 1/3;3 1];
b=max(eig(a));%b为a矩阵的最大特征值
d=[];
for i=1:(length(a))
c=prod(a(i,:))^(1/length(a));%计算每一行的几何平均值
d(i)=c;
end
for i=1:length(a)
    e=d(i)/sum(d);
    w(i)=e;
end
%w为几何平均值的权重比
CI=(b-length(a))/(length(a)-1);
RI=[0 0 0.58 0.96 1.12 1.24 1.32 1.41 1.45];
CR=CI/RI(length(a))
B=[b1 b2 b3 c1 c2 c3 c4 c5 c6];
d=[];
ss=[];
for j=1:9
f=B(:,(1+(j-1)*length(b1):(j*length(b1))));
for i=1:(length(f))
c=prod(f(i,:))^(1/length(f));
d(i)=c;
end
for k=1:length(f)
    e=d(k)/sum(d);
    s(k)=e;
end
s1=s';
ss=[ss,s1];
end
%ss装的是相应个数的几何平均数的权重比
t1=[];
for i=1:length(w)
    t=w(i)*ss(:,i);
    t1=[t1,t];
end
%此步将第二层的几何权重比按顺序全部乘以一个第一层的几何平均权重比
t3=[];
for i=1:6
t2=ss(:,i+3)*t1(i);
t3=[t3,t2];
end
%同理,将上层打开往下乘
for i=1:length(t3(:,1))
    zong(i)=sum(t3(i,:));
end
zong
%将最后一行的处理后的几何权重比按行相加

一个小例子:层次分析评价交通模型

clc
clear
a=[1 1/6 1/3 1/4;6 1 5 5;3 1/5 1 2;4 1/5 1/2 1]
b1=[1 2 6 4;1/2 1 6 4;1/6 1/6 1 1/3;1/4 1/4 3 1]
b2=[1 2 5 4;1/2 1 5 4;1/5 1/5 1 1/2;1/4 1/4 2 1]
b3=[1 5 3 5;1/5 1 2 2;1/3 1/2 1 1/2;1/5 1/2 2 1]
b4=[1 1/3 1/6 1/7;3 1 1/5 1/4;6 5 1 1/3;7 4 3 1] 
b=cat(3,b1,b2,b3,b4)
lammax_a=max(eig(a));%b为a矩阵的最大特征值
CI=(lammax_a-length(a))/(length(a)-1);
RI=[0 0 0.58 0.96 1.12 1.24 1.32 1.41 1.45];
CR=CI/RI(length(a))  
for i=1:4
    lammax_b(i)=max(eig(b(:,:,i)))
    CI_b(i)=(lammax_b(i)-4)/(4-1)
    CR_b(i)=CI_b(i)/RI(4)
end
for i=1:(length(a))
c=prod(a(i,:))^(1/length(a));%计算每一行的几何平均值
d(i)=c;
end
for i=1:length(a)
    e=d(i)/sum(d);
    w(i)=e;
end
for j=1:4
    for i=1:4
c=prod(b(i,:,j))^(1/4)   %计算每一行的几何平均值
d(i)=c;
end
for i=1:4
    e=d(i)/sum(d);
    wb(j,i)=e;
end
end
m=wb'
for i=1:4
 u=m*w'
zong(i)=sum(u(i,:))
end



虽然主观性太强,奈何还有太多学管理的同学老师偏爱这个,哎……

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页