数学建模算法笔记(3)——层次分析法

原理

建立递阶层次结构模型;

(i)最高层:这一层次中只有一个元素,一般它是分析问题的预定目标或理想结 果,因此也称为目标层
(ii)中间层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干 个层次组成,包括所需考虑的准则、子准则,因此也称为准则层
(iii)最底层:这一层次包括了为实现目标可供选择的各种措施、决策方案等, 因此也称为措施层或方案层
(每一层次中各元素所支配的元素一般不要超过 9 个)

构造出各层次中的所有判断矩阵;

以 aij 表示 xi 和 xj 对Z 的影响大小之比,全部比较 结果用矩阵A=(aij)n*n表示,称 A为Z-X 之间的成对比较判断矩阵(简称判断矩 阵
定义:正互反矩阵:aij>0;aij=1/aji;

层次单排序及一致性检验;
层次单排序:
   判断矩阵 A对应于最大特征值  λmax的特征向量W ,经归一化后即为同一层次相 应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。
 定义  **一致矩阵** :满足关系式  aij*ajk=aik   的正互反矩阵称为一致矩阵。 
 A为一致矩阵时才能接受A。
一致性检验

定理2: 若 A为一致矩阵,则 A的最大特征值为 n,其中n为矩阵 A的阶。对应的特征向量W=(w1,w2,…,wn)’ ,则aij=wi/wj,A的其余特征根均为零。
定理3: n阶正互反矩阵 A为一致矩阵当且仅当其最大特征根为 n,非一致时,最大特征根大于n。
判断矩阵的一致性检验的步骤
CI=( λmax-n)/(n-1); CR=CI/RI; CR<0.1时,可以接受。
(RI=[0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.45])

层次总排序及一致性检验。

A层:m个元素,层次总排序权重:a1,a2,…,an
B层:n个元素,关于Aj层次单排序总权重分别为b1j,…,bnj
B层各因素的层次总排序权重:bi=(1-n求和)bij*aj
CR=(求和)CI(j)*aj/(求和)RI(j)a(j);

代码

fid=fopen(‘txt3.txt’,‘r’);
n1=6;n2=3;
a=[];
for i=1:n1
tmp=str2num(fgetl(fid));
a=[a;tmp]; %读准则层判断矩阵
end
for i=1:n1
str1=char([‘b’,int2str(i),’=[];’]);
str2=char([‘b’,int2str(i),’=[b’,int2str(i),’;tmp];’]);
eval(str1);
for j=1:n2
tmp=str2num(fgetl(fid));
eval(str2); %读方案层的判断矩阵
end
end
ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
[x,y]=eig(a);
lamda=max(diag(y));
num=find(diag(y)==lamda);
w0=x(:,num)/sum(x(:,num));
cr0=(lamda-n1)/(n1-1)/ri(n1)
for i=1:n1
[x,y]=eig(eval(char([‘b’,int2str(i)])));
lamda=max(diag(y));
num=find(diag(y)==lamda);
w1(:,i)=x(:,num)/sum(x(:,num));
cr1(i)=(lamda-n2)/(n2-1)/ri(n2);
end
cr1, ts=w1w0, cr=cr1w0
函数注释

  • fopen“fopen”打开文件,赋予文件代号。FID=FOPEN(filename,permission)用指定的方式打开文件FID=+N(N是正整数):表示文件打开成功,文件代号是N.FID=-1 : 表示文件打开不成功。(FID在此次文件关闭前总是有效的。)“permission”是打开方式参数。打开方式: r 读出

  • eval eval函数的功能是将字符串转换为matlab可执行语句。
    如a=’b=1’; eval(a) , 执行eval(a)相当于执行a的内容,相当于执行b=1

  • eig [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。

习题

修正不一致的判断矩阵
  1. 方法一

已知判断矩阵A, λmax及其对应的特征向量w,令aij*=wi/wj;dij=|aij-aij*|,对dij最大的aij进行修改,即aij=aij*,aji=aji*。

  1. 方法二
    第n列系数归一。各行除以第n列数,若某列数相差较大,则修改该列数使之相近,若某行数出现偏大或偏小则修改该行最后一个数。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值