EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ b' {7 H) b; \0 F7 O& L2 A
# `; @" c* Y( }- e
层次分析法(AHP)—matlab实现 $ g, U3 }% h$ m( X
/ ^6 J) c. _4 J0 }- O3 W 层次分析法是一种主观的决策方法,可以用来确定一些指标权重,辅助决策依据的一种定性分析方法,层次分析法运用前需要构造层次模型:决策层,中间层(指标层),底层(选择层);形成等级层次;然后构造两两对比矩阵,通过9分位数来进行构造;对对比矩阵进行求最大特征值和特征向量,进行一致性检验;最后得到权重向量。具体实现过程如下Matlab程序:% Y: u# P, Q! N) @* ~
clc;! s5 S4 v3 [+ O [
clear;
: K% [7 f( s% V9 F! B) c>> A=[1 1 1 4 1 1/2;
; ?$ ?1 Q$ I6 ]+ T; ^3 n! c1 1 2 4 1 1/2;9 i5 Z a2 h. C9 c. P& T
1 1/2 1 5 3 1/2;
! O- v/ C1 J, d: U9 v8 ^4 Y1/4 1/4 1/5 1 1/3 1/3;
- |, t& ~" o9 A/ }& c3 f) E$ u1 1 1/3 3 1 1/3;! k7 \( v& D* S8 W/ P3 v
2 2 2 3 3 1]+ k/ ~. s& c% Z# T, O3 `5 N0 f
0 W: a) U5 c3 O, t e %因素对比矩阵A,只需要改变矩阵A
1 R; c j! ]2 c% a& l V% H[m,n]=size(A); %获取指标个数
# y* C2 v$ a' y/ w8 P2 I( ~RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];$ _) n b2 Q _/ q! }8 U
R=rank(A); %求判断矩阵的秩9 d. A8 j( T0 |+ V, J9 V
[V,D]=eig(A); %求判断矩阵的特征值和特征向量,V特征值,D特征向量;/ x5 T4 C, Q% J/ Y- x' b
tz=max(D);, A S- ?3 t+ B6 P8 K9 Q
B=max(tz); %最大特征值5 }8 M+ f" u' d5 d/ e
[row, col]=find(D==B); %最大特征值所在位置. E' N# w4 K- e; d
C=V(:,col); %对应特征向量
4 x. h; S4 I2 R; f+ ~" h( m: J; ICI=(B-n)/(n-1); %计算一致性检验指标CI
& v1 Y. z. n+ D7 r3 [7 i7 @CR=CI/RI(1,n);
5 o D" p9 p" \3 W5 v* A* y! x% iif CR<0.10' d2 `# L: h: \/ O& r# U
disp('CI=');disp(CI);4 o1 E; @; t4 N$ v
disp('CR=');disp(CR);
- ~2 v9 d' i0 a. a$ I disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');9 `5 T" u4 |/ V* L& t. y, s! S
Q=zeros(n,1);
T$ F Y/ V* ]5 I( S2 X! L6 \ for i=1:n
& D; o9 |% H2 V9 F% ~0 b$ t- r Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量标准化9 t8 m# q4 s0 U6 L0 x
end3 A( [8 I7 D$ s* g) ?, a
Q %输出权重向量
/ \+ b: p6 x5 D# V6 }7 melse
( a6 G5 q, H# ]% E. n! a& i disp('对比矩阵A未通过一致性检验,需对对比矩阵A重新构造');
1 s9 A) n7 Q) {$ k* ^3 `end
( F; `% K& ^% p0 [8 D9 E |