1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 数学建模——层次分析法模型

数学建模——层次分析法模型

时间:2018-11-06 17:37:39

相关推荐

数学建模——层次分析法模型

一、理论知识

1. 运用层次分析法优先考虑的三个问题

(1) 我们评价的目标是什么?

eg: 大学生旅游最佳目的地选择

(2) 为了达到这个目标有哪几种方案?

eg: 北京、上海、杭州

(3) 评价的准则是什么?

eg: 花费、交通、住宿、饮食、风景

2. 正互反矩阵(判断矩阵)与一致矩阵

(1) 正互反矩阵(判断矩阵)满足的条件

对角线的都为1;Aij*Aji=1;Aij>0。

举例:

(2) 一致矩阵

如果正互反矩阵满足Aij*Ajk=Aik,则称之为一致矩阵(或者理解为对应的行或者列成比例)。

举例:

3.计算权重的方法

(1) 算数平均值法求权重

第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)

第二步:将归一化的各列相加(按行求和)

第三行:将相加后得到的向量中的每一个元素除以n即可得到权重向量

总结:假设判断矩阵A= ,那么算数平均值法求得的权重向量为:

示例:已知

按照第一列计算:杭州:1/(1+1/2+1/4)=0.57

上海:(1/2)/(1+1/2+1/4)=0.29

苏州:(1/4)/(1+1/2+1/4)=0.14

按照第二列计算:杭州:2/(2+1+1/2)=0.57

上海:1/(2+1+1/2)=0.29

苏州:(1/2)/(2+1+1/2)=0.14

按照第三列计算:杭州:4/(4+2+1)=0.57

上海:2/(4+2+1)=0.29

苏州:1/(4+2+1)=0.14

所以在景色这一栏三者的权重:杭州:(0.57+0.57+0.57)/3=0.57

上海:(0.29+0.29+0.29)/3=0.29

苏州:(0.14+0.14+0.14)/3=0.14

注意:如果是一致矩阵则只计算一列即可;如果是一般的判断矩阵则需要计算个列在求平均值。

(2) 几何平均法求权重

第一步:将矩阵按照行相乘得到一个新的列向量

第二步:将新的向量的每一个分量开n次方

第三步:对该列向量进行归一化即可得到权重向量

(3) 特征值法求权重

第一步:求出判断矩阵的最大特征值以及其对应的特征向量

第二步:对求出的特征向量进行归一化即可得到权重

例如:

注意:上述三种方法中如果求出的所有权重加起来不为1是一位在计算时约分的缘故!!!

4. 一致性检验的步骤(如果是一致性矩阵就不需要这一步)

(1) 第一步:计算一致性指标CI

(2) 第二步:查找对应的平均随机一致性指标RI

(3) 第三步:计算一致性比例CR

如果CR<0.1,则可以认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修改(修改时可以灵活修改)。

二、解题步骤

第一步:分析系统中各因素之间的关系,建立系统的递阶关系

第二步:对于同一层次的各元素关于上一层中某一准则的重要性进行两两比较,构造判断矩阵

再利用上述的三种求解权重的方法求出指标权重

假设上述得到的权重为:

第三步:有判断矩阵计算被比较元素对于该准则的相对权重,并进行一致性检验(一致性检验通过权重才可以用)

权重的计算方法和上面一样,一致性检验的方法参照上面。

假设上述得到的各项权重为:

第四步:计算各层元素对系统目标的合成权重,并进行排序

北京:0.2636*0.5945+0.4758*0.0819+0.0538*0.4286+0.0981*0.6337+0.1087*0.1667=0.2992604

上海:0.2636*0.2764+0.4758*0.2363+0.0538*0.4286+0.0981*0.1919+0.1087*0.1667=0.24529494

杭州:0.2636*0.1283+0.4758*0.6817+0.0538*0.1429+0.0981*0.1744+0.1087*0.6667=0.45543969

所以,综上所述,杭州最好,北京次之,上海最后。

三、Matlab代码演示——计算出所需要的权重

% 层次分析法——求出给定矩阵的权重% 第一步:输入判断矩阵clear;clc;A=input('Please enter your number:');% A =[1 1 4 1/3 3;% 1 1 4 1/3 3;% 1/4 1/4 1 1/3 1/2;% 3 3 3 1 3;% 1/3 1/3 2 1/3 1];Error=0;[xx,yy]=size(A);% 判断是否为方阵、是否维数小于等于1if xx~=yy || xx<=1Error=1;end% 判断矩阵中的元素是否小于0if Error==0if min(min(A))<=0Error=2;endend% 判断维数是否超过15if Error==0if size(A,1)>15Error=3;endend% 判断是否满足Aij*Aji=1if Error==0if A' .* A~=ones(size(A,1))Error=4;endendif Error==0if size(A,1)~=2 %如果维数大于2才判断一致性,如果为2则不需要判断一致性,因为此时必为一致矩阵% 第二步:判断一致性[E,F]=eig(A); %得到A矩阵的所有特征值构成列向量,E为特征向量矩阵,F为特征值矩阵,对角线为特征值,其余为0Fmax=max(max(F)); %得到最大的特征值n=size(A,1);CI=(Fmax-n)/(n-1);RI=[0 0 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];CR=CI/RI(n);if CR<0.1disp('CI=');disp(CI);disp('CR=');disp(CR);disp('矩阵的一致性可以接受!');elsedisp('矩阵的一致性不可以接受!');endend% 第三步:求出权重% 方法一:算数平均值法求权重Sum_A=sum(A,1); %按列求和得到一个行向量SUM_A=repmat(Sum_A,size(A,1),1); %用repmat函数构造一个元素都为和的矩阵Stand_A=A./SUM_A; %每一个元素除以所在列的和构成归一化矩阵,注意这里是 ./,不是/disp('算数平均值法求得的权重为:');disp(sum(Stand_A,2)/n);% 方法二:几何平均法求权重A_prod=prod(A,2);A_prod=A_prod.^(1/n);disp('几何平均法求得的权重为:');disp(A_prod/sum(A_prod));% 方法三:特征值法求权重[x,y]=find(F~=0,1); %一致矩阵的一个特征值为n,其余均为0%[x,y]=find(F==Fmax,1);disp('特征值法求得的权重为:');disp(E(:,y)/sum(E(:,y)));elseif Error==1disp('输入的矩阵不为方阵或者维数小于等于1 !');elseif Error==2disp('输入的矩阵中有元素小于等于0 !');elseif Error==3disp('输入的矩阵维数大于15 !');elseif Error==4disp('输入的矩阵不满足Aij*Aji=1 !');end

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。