层次分析模型

一、正互反阵最大特征根和特征向量的实用算法

在这里插入图片描述

  1. 用给出的幂法函数求 A 的最大特征根和特征向量。
    在这里插入图片描述

代码

%9-1 层次分析模型——正互反阵最大特征根和特征向量的幂法
%文件名: MIfun.m
%输入参数:A 为正互反方阵,精度 e
%输出参数:lamda 为最大特征根,w 为其归一化特征列向量
function [lamda w]=MIfun(A,e)
if(nargin==1) %如果只输入一个变量(即 A),则 e 取 0.000001
e=0.000001;
end
n=size(A,1); %A 的行数
w0=ones(n,1)/n; %归一向量
while 1
ww=A*w0;
w=ww/sum(ww); %归一化
if all(abs(w-w0)<e)
break;
end
w0=w;
end
lamda=sum(ww./w0)/n;
  1. 用给出的和法函数求 A 的最大特征根和特征向量。
    在这里插入图片描述
    在这里插入图片描述

代码

 %9-1 层次分析模型——正互反阵最大特征根和特征向量的和法
%文件名: HEfun.m
%输入参数:A 为正互反方阵
%输出参数:lamda 为最大特征根,w 为其归一化特征列向量
function [lamda w]=HEfun(A)
n=size(A,1);
for k=1:n %a.A 的每一列向量归一化
AA(:,k)=A(:,k)./sum(A(:,k));
end
ww=sum(AA,2); %b.AA 按行求和,ww 为列向量
w=ww./sum(ww); %c.归一化,得 w 为近似特征列向量
lamda=sum(A*w./w)/n; %d.计算最大特征根的近似值λ

前两问原题给了函数,直接矩阵带入求解即可

3. 编写根法函数 RTfun.m,用该函数求 A 的最大特征根和特征向量。

在这里插入图片描述
与前面的与和法不同的地方就是b步按行求积并开n次方,修改函数并开方即可
ww=prod(AA,2); %b.对 AA 按行求积,ww 为列向量
ww=ww.^(1/n);
代码

function [lamda w]=RTfun(A)
n=size(A,1);
for k=1:n %a.A 的每一列向量归一化
AA(:,k)=A(:,k)./sum(A(:,k));
end
ww=prod(AA,2); %b.AA 按行求积,ww 为列向量
ww=ww.^(1/n);
w=ww./sum(ww); %c.归一化,得 w 为近似特征列向量
lamda=sum(A*w./w)/n; %d.计算最大特征根的近似值λ

二、旅游决策问题

TR函数,用和法求出特征根、特征向量,
由书上公式可知CI=(lamda-n)/(n-1),CR=CI/R1
一般情况下CR<0.1即为通过一致性检验

%9-1 层次分析——求 A 的最大特征根及归一化特征列向量、一致性指标值 CI、一致性比率值 CR
%文件名:TRfun.m
%输入参数:A 为成对比较阵(正互反方阵)
%输出参数:
% lamda 为最大特征根值
% w 为 A 的归一化特征列向量(权向量)
% CI 为一致性指标值
% CR 为一致性比率值
function [lamda w CI CR]=TRfun(A)
[lamda w]=HEfun(A); %求 A 的最大特征根及归一化特征列向量
%随机一致性指标 RI 的数值(下标对应成对比较方阵的阶数):
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
n=size(A,1);
CI=(lamda-n)/(n-1); %一致性指标,CI=0 时 A 为一致阵;CI 越大 A 的不一致程度越严重
CR=CI/RI(n); %一致性比率,CR<0.1 时认为 A 的不一致程度在容许范围之内 

1. 显示第 2 层的以下数据:

在这里插入图片描述

1.最大特征根λ;特征向量(权向量)w;一致性指标 CI;一致性比率 CR。

(与 p254 对应数据相比较)
A将矩阵带入函数TR得到f返回值并输出

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 ];
[lamda2 w2 CI2 CR2]=TRfun(A);
lamda2
w2
CI2
CR2

2. 显示第 3 层的以下数据:

特征向量(权向量)w (3) k ;最大特征根λ k ;一致性指标 CI k 。
(与 第四版p255 表 3 对应数据相比较)(思路参考第五版课本p244)

B1=[1 2 5 ; 1/2 1 2 ; 1/5 1/2 1];
B2=[1 1/3 1/8; 3 1 1/3; 8 3 1];
B3=[1 1 3 ; 1 1 3 ; 1/3 1/3 1];
B4=[1 3 4 ; 1/3 1 1 ; 1/4 1 1];
B5=[1 1 1/4; 1 1 1/4; 4 4 1];
[lamda3_1 w3_1 CI3_1 CR3_1]=TRfun(B1);
[lamda3_2 w3_2 CI3_2 CR3_2]=TRfun(B2);
[lamda3_3 w3_3 CI3_3 CR3_3]=TRfun(B3);
[lamda3_4 w3_4 CI3_4 CR3_4]=TRfun(B4);
[lamda3_5 w3_5 CI3_5 CR3_5]=TRfun(B5);
%4.计算组合权向量并做组合一致性检验
w3=[w3_1,w3_2,w3_3,w3_4,w3_5]
CI3=[CI3_1 CI3_2 CI3_3 CI3_4 CI3_5]
lamda2=[lamda3_1 lamda3_2 lamda3_3 lamda3_4 lamda3_5]

3. 显示最下层(第 3 层)对目标(第 1 层)的组合权向量。

%3[lamda3_1 w3_1 CI3_1 CR3_1]=TRfun(B1);
if CR3_1>0.1 %成对比较阵 B1 的一致性检验
disp(['CR3_1=',num2str(CR3_1),'>0.1,B1 没有通过一致性检查!'])
return;
end
[lamda3_2 w3_2 CI3_2 CR3_2]=TRfun(B2);
if CR3_2>0.1 %成对比较阵 B2 的一致性检验
disp(['CR3_2=',num2str(CR3_2),'>0.1,B2 没有通过一致性检查!'])
return;
end
[lamda3_3 w3_3 CI3_3 CR3_3]=TRfun(B3);
if CR3_3>0.1 %成对比较阵 B3 的一致性检验
disp(['CR3_3=',num2str(CR3_3),'>0.1,B3 没有通过一致性检查!'])
return;
end
[lamda3_4 w3_4 CI3_4 CR3_4]=TRfun(B4);
if CR3_4>0.1 %成对比较阵 B4 的一致性检验
disp(['CR3_4=',num2str(CR3_4),'>0.1,B4 没有通过一致性检查!'])
return;
end
[lamda3_5 w3_5 CI3_5 CR3_5]=TRfun(B5);
if CR3_5>0.1 %成对比较阵 B5 的一致性检验
disp(['CR3_5=',num2str(CR3_5),'>0.1,B5 没有通过一致性检查!'])
return;
end

因为第三层方案层的成对比较矩阵没有问题,所以,归一化的特征向量w2可以作为权向量

w3=[w3_1,w3_2,w3_3,w3_4,w3_5]*w2 %最下层(第 3 层)对目标(第 1 层)的组合权向量

4. 显示第 2 层和第 3 层的组合一致性比率,以及最下层对第 1 层的组合一致性比率。

CR为一致性比率

[lamda2 w2 CI2 CR2]=TRfun(A);//第二层组合一致性比率
B1=[1 2 5 ; 1/2 1 2 ; 1/5 1/2 1];
B2=[1 1/3 1/8; 3 1 1/3; 8 3 1];
B3=[1 1 3 ; 1 1 3 ; 1/3 1/3 1];
B4=[1 3 4 ; 1/3 1 1 ; 1/4 1 1];
B5=[1 1 1/4; 1 1 1/4; 4 4 1];
[lamda3_1 w3_1 CI3_1 CR3_1]=TRfun(B1);
[lamda3_2 w3_2 CI3_2 CR3_2]=TRfun(B2);
[lamda3_3 w3_3 CI3_3 CR3_3]=TRfun(B3);
[lamda3_4 w3_4 CI3_4 CR3_4]=TRfun(B4);
[lamda3_5 w3_5 CI3_5 CR3_5]=TRfun(B5);
CI3=[CI3_1 CI3_2 CI3_3 CI3_4 CI3_5]*w2;
RI3=[RI(3) RI(3) RI(3) RI(3) RI(3)]*w2;
CR3=CI3/RI3;//第三层组合一致性比率
CR=CR2+CR3;
CR2
CR3
CR
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你写一个简单的层次分析模型的Python代码。但是需要先了解层次分析模型的原理和流程。 层次分析模型(Analytic Hierarchy Process,AHP)是一种多准则决策分析方法,用于处理多种因素和不同层次的决策问题。AHP通过构建层次结构模型,将决策问题分解为一系列层次,每个层次对应一个指标或因素,通过对各个层次进行两两比较,得出各因素的权重,从而进行决策。 以下是一个简单的AHP模型Python代码,用于处理两个因素的决策问题: ``` import numpy as np # 构建层次结构模型 criteria = np.array([ [1, 2], # 准则层 [0.5, 1] # 指标层 ]) # 计算准则层权重 criteria_weight = np.sum(criteria, axis=1) / np.sum(criteria) # 计算一致性比率CR eigenvalue, eigenvector = np.linalg.eig(criteria) max_eigenvalue = np.max(eigenvalue) CR = (max_eigenvalue - len(criteria)) / (len(criteria) - 1) / 0.58 # 计算指标层权重 indicator_weight = np.dot(criteria_weight, criteria) # 输出结果 print("准则层权重:", criteria_weight) print("一致性比率CR:", CR) print("指标层权重:", indicator_weight) ``` 以上代码中,我们首先构建了一个层次结构模型,其中准则层包含两个准则,指标层包含两个指标。然后,我们计算了准则层的权重,以及一致性比率CR。最后,我们计算了指标层的权重,并输出结果。 需要注意的是,以上代码仅适用于处理两个因素的决策问题。如果需要处理更多的因素,需要对代码进行适当修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值