层次分析法(AHP)—matlab实现
2014-10-17 18:21
309 查看
层次分析法是一种主观的决策方法,可以用来确定一些指标权重,辅助决策依据的一种定性分析方法,层次分析法运用前需要构造层次模型:决策层,中间层(指标层),底层(选择层);形成等级层次;然后构造两两对比矩阵,通过9分位数来进行构造;对对比矩阵进行求最大特征值和特征向量,进行一致性检验;最后得到权重向量。具体实现过程如下Matlab程序:
clc;
clear;
A=[1 1.2 1.5 1.5;
0.833 1 1.2 1.2;
0.667 0.833 1 1.2;
0.667 0.833 0.833 1];
%因素对比矩阵A,只需要改变矩阵A
[m,n]=size(A); %获取指标个数
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
R=rank(A); %求判断矩阵的秩
[V,D]=eig(A); %求判断矩阵的特征值和特征向量,V特征值,D特征向量;
tz=max(D);
B=max(tz); %最大特征值
[row, col]=find(D==B); %最大特征值所在位置
C=V(:,col); %对应特征向量
CI=(B-n)/(n-1); %计算一致性检验指标CI
CR=CI/RI(1,n);
if CR<0.10
disp('CI=');disp(CI);
disp('CR=');disp(CR);
disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');
Q=zeros(n,1);
for i=1:n
Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量标准化
end
Q %输出权重向量
else
disp('对比矩阵A未通过一致性检验,需对对比矩阵A重新构造');
end
clc;
clear;
A=[1 1.2 1.5 1.5;
0.833 1 1.2 1.2;
0.667 0.833 1 1.2;
0.667 0.833 0.833 1];
%因素对比矩阵A,只需要改变矩阵A
[m,n]=size(A); %获取指标个数
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
R=rank(A); %求判断矩阵的秩
[V,D]=eig(A); %求判断矩阵的特征值和特征向量,V特征值,D特征向量;
tz=max(D);
B=max(tz); %最大特征值
[row, col]=find(D==B); %最大特征值所在位置
C=V(:,col); %对应特征向量
CI=(B-n)/(n-1); %计算一致性检验指标CI
CR=CI/RI(1,n);
if CR<0.10
disp('CI=');disp(CI);
disp('CR=');disp(CR);
disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');
Q=zeros(n,1);
for i=1:n
Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量标准化
end
Q %输出权重向量
else
disp('对比矩阵A未通过一致性检验,需对对比矩阵A重新构造');
end
相关文章推荐
- 层次分析法(AHP) 将评判矩阵转化为权重矩阵代码实现 MATLAB
- 层次分析法(AHP)的Matlab实现
- 层次分析法(matlab实现)
- 层次分析法matlab实现代码
- 多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(4)编码过程——排序扫描
- matlab与c#接口的实现
- 如何实现C#与matlab交互
- 声卡虚拟示波器简单功能-使用matlab DAQ工具箱中API实现
- 最优化方法的Matlab实现
- VC与Matlab混合编程的快速实现(3-1)
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(6)解码过程——主程序
- 多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(2)数学表述
- 线性方程数值分析中高斯迭代matlab实现
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(8)实例演示
- 图像放缩 (matlab实现,不用自带的函数)
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(7)解码过程——扫描解码
- 线性方程数值解中jacobi迭代matlab实现
- 利用Matlab引擎实现VC和Matlab的混合编程
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(1)算法概述
- 在MATLAB中实现高斯分布和均匀分布