EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- O) z q' j7 U1 P
7 `! q, _5 f/ I1 \层次分析法(AHP)—matlab实现
& ?8 h- r- r K5 H" F8 i# u
& ? o! W; ?- v& ?. T 层次分析法是一种主观的决策方法,可以用来确定一些指标权重,辅助决策依据的一种定性分析方法,层次分析法运用前需要构造层次模型:决策层,中间层(指标层),底层(选择层);形成等级层次;然后构造两两对比矩阵,通过9分位数来进行构造;对对比矩阵进行求最大特征值和特征向量,进行一致性检验;最后得到权重向量。具体实现过程如下Matlab程序:
1 v# w, } M. J$ Q6 W5 X0 rclc;# W: G% f4 N) G1 o. N0 C
clear;
2 I9 \# G1 i9 |+ |: y! Z; L>> A=[1 1 1 4 1 1/2;
" d. f; Y5 v9 v) I3 h) p1 1 2 4 1 1/2;8 p& Z4 x& i; M
1 1/2 1 5 3 1/2;2 q3 K4 e, C: S9 g' }* z
1/4 1/4 1/5 1 1/3 1/3;- P8 _$ X. {! B7 w/ y/ r% p+ M
1 1 1/3 3 1 1/3;
/ H) f2 m1 U5 H- j5 ]: Y) H2 g2 2 2 3 3 1]- \. a! x: ~3 w& {7 b& s
+ |5 p5 z& ^3 V& }# Z6 |% g %因素对比矩阵A,只需要改变矩阵A" }/ O5 A1 P* T) u. t+ p/ {! y' r# t
[m,n]=size(A); %获取指标个数
! }$ o+ v- b f) Y& `8 s s4 `RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
! N% _# \6 O, P$ d1 yR=rank(A); %求判断矩阵的秩
* a6 m) x+ T1 Z& n9 l" ~& A[V,D]=eig(A); %求判断矩阵的特征值和特征向量,V特征值,D特征向量;
7 z$ r7 O0 w& _6 @1 _/ E" A$ ?# Xtz=max(D);( V5 [, z3 v2 D/ M
B=max(tz); %最大特征值
' N# s! E6 F& B9 n* o[row, col]=find(D==B); %最大特征值所在位置
# }, N4 D- ?1 NC=V(:,col); %对应特征向量( G& b( A; C4 {+ z7 `: k( z, x( l
CI=(B-n)/(n-1); %计算一致性检验指标CI
/ |" j9 R8 f. @8 q5 m$ ?' J0 WCR=CI/RI(1,n);
% ^! f# H' g% p1 mif CR<0.10( w1 l1 P g! ^0 K6 n
disp('CI=');disp(CI);: s# A- L/ U# B% D* h2 _. C2 ^
disp('CR=');disp(CR);2 e+ K5 |0 J% G3 W! }
disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');7 w0 ?' A5 o1 i1 ~, K m
Q=zeros(n,1);' ]3 Q8 J8 \' q9 @& @0 b2 F
for i=1:n
# H* h5 H" W( m" Y0 D$ A Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量标准化
/ i8 K2 _# M0 o8 r0 H end
& G4 [7 ]: X! y Q %输出权重向量
: @) ]: Y9 N/ telse) p& G% \( i; ]4 L. L
disp('对比矩阵A未通过一致性检验,需对对比矩阵A重新构造');! ?' B# w% ?9 t7 a' J
end( j6 o$ O: E' K" B) `4 K
|