层次分析法 例题及解法

 题目及答案

代码 

A =input('输入判断矩阵1')
B =input('输入判断矩阵2')
C =input('输入判断矩阵3')
D =input('输入判断矩阵4')

% 输入判断矩阵一致性
tzzA=max(eig(A))
tzzB=max(eig(B))
tzzC=max(eig(C))
tzzD=max(eig(D))% 求特征值的最大值
[n1] =size(A);
n2=size(B)
CIA=(tzzA-n1)/(n1-1)
CIB=(tzzB-n2)/(n2-1)
CIC=(tzzC-n2)/(n2-1)
CID=(tzzD-n2)/(n2-1)
RI=0.52
RI2=0
CRA=CIA/RI
CRB=CIB/RI2
CRC=CIC/RI2
CRD=CID/RI2
% 一致性判断完了都小于0.1




% 计算权重
%首先 归一化
sumcA=sum(A)
% 每一个矩阵按每一列相加,得到一个行向量
sumcB=sum(B)
sumcC=sum(C)
sumcD=sum(D)
cA=A./sumcA
cB=B./sumcB
cC=C./sumcC
cD=D./sumcD
% 1. 算数平均法
% 【优化写法】
% Sum_A = sum(A);% 每一个矩阵按每一列相加,得到一个行向量
% SUM_A = repmat(Sum_A,n,1);% 行向量组成n*n方阵
% Stand_A = A ./ SUM_A;% 归一化求权重
% disp('算术平均法求权重的结果为:');
% disp(sum(Stand_A,2)./n)% 每一行分别相加再除n,得到每一行权重

% 【非优化】
% 将归一化的按行相加相加
% 接着求平均权重
ax=sum(cA,2)
sumaX=sum(ax)
caX=ax./sumaX

bx=sum(cB,2)
sumbx=sum(bx)
cbx=bx./sumbx

cx=sum(cC,2)
sumcX=sum(cx)
ccX=cx./sumcX
% cdX表示权重
dx=sum(cD,2)
sumdX=sum(dx)
cdX=dx./sumdX

tary=zeros(3,3);
% 将二阶矩阵赋值到三阶矩阵
tary(1,1)=cbx(1,1);
tary(2,1)=cbx(2,1);
tary(2,2)=ccX(1,1);
tary(3,2)=ccX(2,1);
tary(1,3)=cdX(1,1);
tary(2,3)=cdX(2,1);

res=tary*caX
disp(['算数平均法矩阵B的权重占',num2str(res(1,1))])
disp(['算术平均法矩阵C的权重占',num2str(res(2,1))])
disp(['算术平均法矩阵D的权重占',num2str(res(3,1))])


% 矩阵B的权重占0.25328
% 矩阵C的权重占0.21893
% 矩阵D的权重占0.52779


% 2. 几何平均法
% 第一步 将判断矩阵按行相乘得到一个新矩阵A'
% 第二步 将新矩阵A'开n次方,得到几何平均数
% 第三步 将每一行几何平均数除以中的几何平均数(各行的几何平均数相加)即权重,得到最终答案向量。
% 第四步 若有多个权重向量,将其拼起来组成新矩阵,和总权重相乘。
% 【
% 标准代码:
% Prduct_A = prod(A,2);
% Prduct_n_A = Prduct_A .^ (1/n);
% disp('几何平均法求权重的结果为:');
% disp(Prduct_n_A ./ sum(Prduct_n_A))
% 】
clc
% 【
% 题目练手:
Product_A=prod(A,2)% 按行相乘
Product_n_A=Product_A.^(1/3)% 每行开根号
tarA=Product_n_A./sum(Product_n_A)%权重

Product_B=prod(B,2)% 按行相乘
Product_n_B=Product_B.^(1/2)% 每行开根号
tarB=Product_n_B./sum(Product_n_B)%权重

Product_C=prod(C,2)% 按行相乘
Product_n_C=Product_C.^(1/2)% 每行开根号
tarC=Product_n_C./sum(Product_n_C)%权重

Product_D=prod(D,2)% 按行相乘
Product_n_D=Product_D.^(1/2)% 每行开根号
tarD=Product_n_D./sum(Product_n_D)%权重

w=zeros(3)
w(1,1)=tarB(1,1);
w(2,1)=tarB(2,1);
w(2,2)=tarC(1,1);
w(3,2)=tarC(2,1);
w(1,3)=tarD(1,1);
w(2,3)=tarD(2,1);
res=w*tarA
disp(['几何平均法矩阵B的权重占',num2str(res(1,1))])
disp(['几何平均法矩阵C的权重占',num2str(res(2,1))])
disp(['几何平均法矩阵D的权重占',num2str(res(3,1))])
% 】

% 3. 特征值法
% 第一步:求出矩阵A的最大特征值以及其对应的特征向量
% 第二步:对求出的特征向量进行归一化即可得到我们的权重


% 【代码:
% 第一步:求出矩阵A的最大特征值以及其对应的特征向量
clc
[V,D] = eig(A)    %V是特征向量, D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
Max_eig = max(max(D)) %也可以写成max(D(:))哦~
% 那么怎么找到最大特征值所在的位置了? 需要用到find函数,它可以用来返回向量或者矩阵中不为0的元素的位置索引。
% 那么问题来了,我们要得到最大特征值的位置,就需要将包含所有特征值的这个对角矩阵D中,不等于最大特征值的位置全变为0
% 这时候可以用到矩阵与常数的大小判断运算
D == Max_eig
[r,c] = find(D == Max_eig , 1)
% 找到D中第一个与最大特征值相等的元素的位置,记录它的行和列。

% 第二步:对求出的特征向量进行归一化即可得到我们的权重
V(:,c)
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )
% 】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

熟人看不到

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

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

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

打赏作者

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

抵扣说明:

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

余额充值