我写过层次分析法的Matlab实现:张敬信:【评价算法】层次分析法zhuanlan.zhihu.com
其中的ahp函数是来自《吴鹏. Matlab高效编程技巧与应用:25个案例分析》,我只是增加或改写了注释说明。但是该函数对大家使用不太友好,非常复杂难用,倒不是函数定义的不好,只是因为它是将整个多层次的层次结构模型,一次代入该函数,一次完成全部的计算,所以就变得很复杂和难用。
这次重写一个简单易用的,一次只解决一个层次结构的层次分析法计算,多个结构多用几次就好了。层次分析法原理见上篇文章,这里不再赘述。
以么焕民老师在智慧树平台的数学建模课程中的,层次分析法案例为基础,来具体阐述。
问题描述:某人要出去旅游,有 3 个备选景点,需要从景色、费用、居住条件、饮食、旅途共5 个因素来考量。
一. 构建层次结构
二. 构造成对比较矩阵
5个因素分别记为X1,X2,X3,X4,X5
某人根据自己的考量,给出的成对比较矩阵:
以
为例,表示在某人看来费用比景色的相对重要程度是
,即认为费用是景色的
倍重要,其它矩阵元素的解释类似。
A = [ 1 1/2 4 3 3;
2 1 7 5 5;
1/4 1/7 1 1/2 1/3;
1/3 1/5 2 1 1;
1/3 1/5 3 1 1];
三. 计算权向量及一致性检验
么老师是用方根法近似计算的,实际上完全没有必要,直接用eig()函数算精确的就行了。两种方法我都实现一下。方根法近似计算
W = prod(A, 2) % 计算每一行乘积
n = size(A, 1); % 矩阵行数
W = nthroot(W, n) % 计算n次方根
W = W / sum(W) % 归一化处理, 计算特征