EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
% U5 \% I" r: j8 D, E
5 y- C/ l7 d* l5 A4 X5 s/ g [: V层次分析法(AHP)—matlab实现
2 g: y. Q& {1 p2 P* I+ K7 H
, {& G# E! U0 {- _, Y9 }$ G 层次分析法是一种主观的决策方法,可以用来确定一些指标权重,辅助决策依据的一种定性分析方法,层次分析法运用前需要构造层次模型:决策层,中间层(指标层),底层(选择层);形成等级层次;然后构造两两对比矩阵,通过9分位数来进行构造;对对比矩阵进行求最大特征值和特征向量,进行一致性检验;最后得到权重向量。具体实现过程如下Matlab程序:
& d& R; ]/ L( t3 W& Z/ d* ^clc;* I' l8 G N: K* V* C) R
clear;
& v7 Y- J$ _" l) h7 X( X>> A=[1 1 1 4 1 1/2;; a5 ]4 U+ P8 Y, U$ H
1 1 2 4 1 1/2;
/ M# c7 o. C2 o1 `1 1/2 1 5 3 1/2;
" [/ a0 v% ?! j- H1 P1/4 1/4 1/5 1 1/3 1/3;4 r6 k( I5 R# \$ p
1 1 1/3 3 1 1/3;4 g0 o8 F ~# Z5 {' K4 Q; }
2 2 2 3 3 1]
0 {/ ~2 c& j1 b5 w- g8 o 7 Z6 ~5 C( x. C9 L
%因素对比矩阵A,只需要改变矩阵A
r- o2 Z! u) k# n. |$ i[m,n]=size(A); %获取指标个数
% `* f, W6 H$ ^, n4 F5 a' c8 ]RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
; p% D' c0 Q: n- ^* }% mR=rank(A); %求判断矩阵的秩
8 m7 X( V( l5 }* q- y# x[V,D]=eig(A); %求判断矩阵的特征值和特征向量,V特征值,D特征向量;
' L- e& B; M" j" s/ atz=max(D);
* a- u/ f5 `$ }7 n6 ZB=max(tz); %最大特征值
# n0 S; F6 B# f# J# u- K0 J[row, col]=find(D==B); %最大特征值所在位置
5 o2 Q1 X k* g# K3 }3 {) |3 k9 gC=V(:,col); %对应特征向量
& V) E* P( i$ b2 PCI=(B-n)/(n-1); %计算一致性检验指标CI
, {4 u/ X# l$ r( z! g* L) lCR=CI/RI(1,n);
$ m2 U' i% @! r0 S, ]if CR<0.109 Y3 i* ?7 f" p5 O |
disp('CI=');disp(CI);
* v1 c7 h( r7 i7 ]0 `: G disp('CR=');disp(CR);
0 b$ w; t& h- a. k) |# f% q( i disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');4 q/ ], G, Z( A& k# L5 q
Q=zeros(n,1);7 M) c c/ L' i! p3 H3 w3 L
for i=1:n `- n* X2 {2 e% [# H
Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量标准化
7 X: q; W$ x! b6 N9 Q end
2 J$ {. n* A) w* v, Q6 ?3 o Q %输出权重向量7 a% P6 I5 B1 b$ N! x
else0 M u* a' S0 r K
disp('对比矩阵A未通过一致性检验,需对对比矩阵A重新构造');$ b% V* L& z; ^+ Y: i
end: X5 m) E2 D- ]: N- w+ S
|