【Matlab数学建模】层次分析法

一、通过权重表格求解评价类问题

  层次分析法主要用于评价类问题,比如说小明要去旅游,纠结去苏航还是北戴河、还是桂林。

  我们可以弄这样一张权重表格。
权重表
  将这张表格记作矩阵:
A = ( a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 a 51 a 52 a 53 a 54 ) A = \begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14}\\ a_{21} & a_{22} & a_{23} & a_{24}\\ a_{31} & a_{32} & a_{33} & a_{34}\\ a_{41} & a_{42} & a_{43} & a_{44}\\ a_{51} & a_{52} & a_{53} & a_{54} \end{pmatrix} A=a11a21a31a41a51a12a22a32a42a52a13a23a33a43a53a14a24a34a44a54
  取m为权重表矩阵的行数,n为权重表矩阵的列数,则对于权重矩阵而言,需满足:
∑ i = 1 m a i 1 = 1 对 于 ∀ i ∈ [ 1 , m ] , 有 ∑ j = 2 n a i j = 1 \sum\limits_{i = 1}^{m}a_{i1} = 1\\ 对于\forall i \in \left[1, m\right],有\sum\limits_{j = 2}^{n}a_{ij}=1 i=1mai1=1i[1,m]j=2naij=1
  而我们计算权重值也很简单,例如计算第j列对应的权重值。
w j = ( a 11 , a 21 … a m 1 ) × ( a 1 j , a 2 j … a m j ) T w_{j}=\left(a_{11}, a_{21}\dots a_{m1}\right) \times \left(a_{1j}, a_{2j}\dots a_{mj}\right)^T wj=(a11,a21am1)×(a1j,a2jamj)T
  然后我们比较w2、w3……wn。获得其中的最大值,即是最终答案。

  例如在上面那个例子中
A = ( a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 a 51 a 52 a 53 a 54 ) w 苏 杭 = ( a 11 , a 21 , a 31 , a 41 , a 51 ) × ( a 12 , a 22 , a 32 , a 42 , a 52 ) T w 北 戴 河 = ( a 11 , a 21 , a 31 , a 41 , a 51 ) × ( a 13 , a 23 , a 33 , a 43 , a 53 ) T w 桂 林 = ( a 11 , a 21 , a 31 , a 41 , a 51 ) × ( a 14 , a 24 , a 34 , a 44 , a 54 ) T A = \begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14}\\ a_{21} & a_{22} & a_{23} & a_{24}\\ a_{31} & a_{32} & a_{33} & a_{34}\\ a_{41} & a_{42} & a_{43} & a_{44}\\ a_{51} & a_{52} & a_{53} & a_{54} \end{pmatrix}\\ w_{苏杭} = (a_{11}, a_{21}, a_{31}, a_{41}, a_{51}) \times (a_{12}, a_{22}, a_{32}, a_{42}, a_{52})^T\\ w_{北戴河} = (a_{11}, a_{21}, a_{31}, a_{41}, a_{51}) \times (a_{13}, a_{23}, a_{33}, a_{43}, a_{53})^T\\ w_{桂林} = (a_{11}, a_{21}, a_{31}, a_{41}, a_{51}) \times (a_{14}, a_{24}, a_{34}, a_{44}, a_{54})^T A=a11a21a31a41a51a12a22a32a42a52a13a23a33a43a53a14a24a34a44a54w=(a11,a21,a31,a41,a51)×(a12,a22,a32,a42,a52)Tw=(a11,a21,a31,a41,a51)×(a13,a23,a33,a43,a53)Tw=(a11,a21,a31,a41,a51)×(a14,a24,a34,a44,a54)T
  计算完成后,比较三者大小选最大的。

  用matlab程序可以表示为:

function res = func(mat)
	[~, n] = size(mat);
	a = sum(repmat(mat(:, 1), 1, n - 1) .* mat(:, 2 : n));
	res = find(a == max(a));
end

二、如何获得权重表

  首先,例子评价的指标有五个:景色、花费、居住、饮食、交通。构建一个五行五列方阵:
方阵
  我们问问小明觉得景色和花费哪个重要,小明说觉得景色比花费重要两倍,所以 a 12 = 1 a 21 = 2 a_{12} = \frac{1}{a_{21}} = 2 a12=a211=2,小明还说居住比景色重要四倍。那么 a 31 = 1 a 13 = 4 a_{31} = \frac{1}{a_{13}} = 4 a31=a131=4

  显然地,对于我们构建的这个矩阵,满足:
对 于 ∀ i , j ∈ [ 1 , n ] , 有 a i j × a j i = 1 对于\forall i, j\in[1, n],有a_{ij} \times a_{ji} = 1 i,j[1,n]aij×aji=1
  所有满足这个条件的矩阵都被成为正互反矩阵。可以用下面的的程序来判断:

function res = func(mat)
	a = mat .* mat';
	a = a(:);
	res = all(a == 1);
end

  对于某个正互反矩阵,若满足秩为一,即:
{ a i j > 0 a 11 = a 22 = ⋯ = a n n = 1 [ a i 1 , a i 2 , … , a i n ] = k i [ a 11 , a 12 , … , a 1 n ] \left\{ \begin{aligned} a_{ij}>0 \\ a_{11} = a_{22} = \dots = a_{nn} = 1\\ [a_{i1}, a_{i2}, \dots, a_{in}] = k_i[a_{11}, a_{12}, \dots, a_{1n}] \end{aligned} \right. aij>0a11=a22==ann=1[ai1,ai2,,ain]=ki[a11,a12,,a1n]
  则称该矩阵为一致性矩阵。

  而检验一个正互反矩阵是否接近于一致性矩阵的过程叫做一致性检验。其过程如下:
一致性检验

function [res, CR] = func(mat)
	RI =	[0.00	0.00	0.52	0.89	1.12	1.26	1.36	1.41	1.46	1.49	1.52	1.54	1.56	1.58	1.59];
	[n, ~] = size(mat);
	lambda = max(eig(mat));
	CI = (lambda - n) / (n - 1);
	CR = CI / RI(n);
	res = CR < 0.1;	
end

三、求权重的三种方法

  假设对于景色这一评判标准,对应的矩阵是:
矩阵

① 算术平均法求权重

数学符号表述
结合实例表述

function res = func(mat)
	[n, ~] = size(mat);
	res = sum((mat ./ repmat(sum(mat), n, 1)), 2) / n;
end
② 几何平均法

几何平均法

function res = func(mat)
	[n, ~] = size(mat);
	res = prod(mat, 2) .^ (1 / n);
	res = res / sum(res);
end
③ 特征值法(最常用)

特征值法

function res = func(mat)
	[v, d] = eig(mat);
	d = diag(d);
	a = v(:, d == max(d));
	res = a / sum(a);
end
  • 6
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九死九歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值