【数模学习笔记】层次分析法权重计算

本文详细介绍了在进行权重计算前进行一致性检验的必要性,包括算数平均法、几何平均法和特征值法的具体步骤。同时,通过代码示例展示了如何使用这些方法计算权重,并检查矩阵的一致性.
摘要由CSDN通过智能技术生成

进行权重计算之前要先对判断矩阵进行一致性检验
权重的计算有三种方法:
①算数平均法求权重
②几何平均法求权重
③特征值法求权重


一、一致性检验

在这里插入图片描述

二、权重计算

1.算数平均法求权重

①将矩阵按列归一化(每一列加起来等于1)
②将归一化后的矩阵按行相加(每一行的数据相加)
③得到的列向量除以矩阵的阶数n

代码如下(示例):

% 第一步将矩阵按列归一化
ret = sum(A); % 对列求和
A_arith = A./ret;
% 第二步将行求和
A_arith = sum(A_arith, 2);
% 第三步除以n
A_arith = A_arith/row;

2.几何平均法求权重

①矩阵按行相乘(一行上的元素相乘)
②列向量的每个元素开n次方
③得到的新列向量归一化

代码如下(示例):

% 第一步按行相乘
A_geo = prod(A, 2); % 按行求积
% 第二步将每个元素开n次方
A_geo = A_geo.^(1/row);
% 将列向量归一化
A_geo = A_geo/sum(A_geo);

3.特征值法求权重

①求出最大特征值对应的特征向量
②最大值对应的特征向量归一化

代码如下(示例):

% 求最大的特征值对应的特征向量
[a, b] = eig(A); % a是特征向量 b是特征值构成的对角矩阵
max_eig = max(max(b)); % 求最大的特征值
[r, c] = find(b == max_eig); % a == max_eig变成逻辑矩阵,a中元素等于max_eig就变为1,不等就变为0。find查找到1的坐标
A_eig = a(:, c);  % 取出最大特征值对应的特征向量
% 归一化
A_eig = A_eig/sum(A_eig);

总结

由于一致性判断需要求特征值,所以可以先算权重再进行一致性检验(论文里不能这么写),总代码如下

判断是否为方阵、正互反矩阵、非一致性矩阵
clear;clc
A = input("请输入矩阵A的值: ");
[row, col] = size(A);
% 判断是否为方阵
Error = 0;
if row ~= col % 行数和列数不等
    Error = 1;
end
% 判断是否为正互反矩阵(对称矩阵)
if A'.*A ~= ones(row) & Error == 0 % A和A转置的元素相乘
    Error = 2;
end
% 判断是否为一致矩阵
if rank(A) == 1 & Error == 0 % 一致矩阵的秩为1
    Error = 3;
end


算数平均法求权重
% 第一步将矩阵按列归一化
ret = sum(A); % 对列求和
A_arith = A./ret;
% 第二步将行求和
A_arith = sum(A_arith, 2);
% 第三步除以n
A_arith = A_arith/row;


几何平均法求权重
% 第一步按行相乘
A_geo = prod(A, 2); % 按行求积
% 第二步将每个元素开n次方
A_geo = A_geo.^(1/row);
% 将列向量归一化
A_geo = A_geo/sum(A_geo);


特征值法求权重
% 求最大的特征值对应的特征向量
[a, b] = eig(A); % a是特征向量 b是特征值构成的对角矩阵
max_eig = max(max(b)); % 求最大的特征值
[r, c] = find(b == max_eig); % a == ret变成逻辑矩阵,find查找到1的坐标
A_eig = a(:, c);
% 归一化
A_eig = A_eig/sum(A_eig);


进行一致性判断
CI = (max_eig-row)/(row-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]; % 第二个变为0.001是因为
CR = CI/RI(row);
disp('一致性指标CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR < 0.1
    disp("矩阵的一致性可以接受")
    disp("算数平均法求得的权重为: ")
    disp(A_geo)
    disp("几何平均法求得的权重为: ")
    disp(A_geo)
    disp("特征值法求得的权重为:")
    disp(A_eig)

else
    disp("矩阵一致性检验不合格")
    if Error == 1
        disp("矩阵不是方阵")
    elseif Error == 2
        disp("矩阵不是正互反矩阵")
    elseif Error == 3
        disp("矩阵是一致性矩阵")
    end
end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值