您的位置:首页 > 编程语言 > MATLAB

层次分析法MATLAB程序

2017-08-13 22:09 183 查看
作为一个数学人,对于层次分析法,我的评价同下:



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

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


虽然主观性太强,奈何还有太多学管理的同学老师偏爱这个,哎……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: