Matlab:如何利用层次分析法(升级版)计算具有多重指标的判断矩阵的一致性检验和权重

简介: Matlab:如何利用层次分析法(升级版)计算具有多重指标的判断矩阵的一致性检验和权重

本博客以 许学敏的《层次分析法在太阳镜产品质量评价中的应用》为例进行讲解。

02 论文提供的太阳镜的评价体系

03 建立目标层和准则层的判断矩阵 (论文提供)

我们以该判断矩阵为例说明如何进行判断矩阵的一致性检验和权重计算,至于其它的判断矩阵也是如此。

04 首先需要对判断矩阵进行一致性检验


4.1 一致性检验的一般步骤

4.2 对应上方步骤的变量和代码

% 层次分析法求取权重
% 进行目标层和准则层的判断矩阵的一致性检验
% 获取矩阵的行列号
[row, col] = size(m_z_matrix);
% 获取该判断矩阵的特征值和特征向量
[vec, eig_value] = eig(m_z_matrix);  % vec表示特征向量, eig_value表示特征值
% 获取最大的特征值
max_eig_value = max(max(eig_value))  % 特征值不是给出一个list,而是一个特征值分布在对角线上的矩阵,所以要获取最大值需要两次max
% 计算CI
CI = (max_eig_value - row) / (row - 1);
% RI list
RI_list = [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];
% 计算RI
RI = RI_list(row);
% 计算CR
CR = CI ./ RI  % 若CR小于0.1,那么一致性检验通过
% 最大特征值为6.3674, CR为0.0583<0.1,一致性检验通过,开始计算权重


05 一致性检验通过之后开始计算权重

三种权重的计算方法:算术平均法、几何平均法、特征值法

5.1 算术平均法计算权重-理论部分

5.2 算术平均法计算权重-代码部分

% 算术平均法求取权重
weight1 = sum((m_z_matrix ./ repmat(sum(m_z_matrix, 1), row, 1)), 2) / row


5.3 几何平均法计算权重-理论部分

5.4 几何平均法计算权重-代码部分

% 几何平均法求取权重
temp = prod(m_z_matrix, 2) .^ (1 / row);  % prod(矩阵, dim)若dim=2表示按行计算乘积,1表示按列计算乘积;如果不是矩阵只是向量,那么返回向量所有元素的乘积
% 进行归一化处理
weight2 = temp ./ sum(temp)


5.5 特征值法计算权重-理论部分

 5.6 特征值法计算权重-代码部分

% 特征值法求取权重(论文使用的是该种方法,论文中A-B判断矩阵中的权重与该代码运行结果完全一致)
% 思路:先获取判断矩阵的特征值和特征向量,在获取最大特征值对应的特征向量,最后对该特征向量进行归一化处理
[vec, eig_value] = eig(m_z_matrix);  % V为特征向量,D为特征值
max_eig_value = max(max(eig_value));  % 获取最大的特征值
% 上述两步其实可以不写,因为一致性检验已经写过了
[r, c] = find(eig_value == max_eig_value, 1);  % 获取最大特征值所在的行列号, 参数1表示只取第一个
temp_weight = vec(:, c);  % 获取最大特征值对应的特征向量
disp('特征值法求得的权重为:')
weight3 = temp_weight ./ sum(temp_weight)  % 对特征向量归一化处理即可得到权重


5.7 总结

这是目标层与准则层之间的判断矩阵的计算方法,对于最后我们有三种方法求取得到了准则层的权重,所以最后我们可以对三种方法得到的权重取平均值,或者就使用某一种方法得到的权重也是可以的(一般特征值法比较多,不知道是不是因为matlab求取比较简单所以用的多,其实前两种方法的代码会更难理解)。


06 后续的权重组合思路

之后就是准则层与方案层之间的判断矩阵的权重计算,也是如上类似的,甚至于你只需要修改矩阵变量无需修改其它代码部分。

最后就是对于目标层与方案层之间的权重计算(很简单)


这是关于层次分析法如何求取判断矩阵的的权重的完整代码

% 层次分析法求取权重
% 进行目标层和准则层的判断矩阵的一致性检验
% 获取矩阵的行列号
[row, col] = size(m_z_matrix);
% 获取该判断矩阵的特征值和特征向量
[vec, eig_value] = eig(m_z_matrix);  % vec表示特征向量, eig_value表示特征值
% 获取最大的特征值
max_eig_value = max(max(eig_value))  % 特征值不是给出一个list,而是一个特征值分布在对角线上的矩阵,所以要获取最大值需要两次max
% 计算CI
CI = (max_eig_value - row) / (row - 1);
% RI list
RI_list = [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];
% 计算RI
RI = RI_list(row);
% 计算CR
CR = CI ./ RI  % 若CR小于0.1,那么一致性检验通过
% 最大特征值为6.3674, CR为0.0583<0.1,一致性检验通过,开始计算权重
% 算术平均法求取权重
weight1 = sum((m_z_matrix ./ repmat(sum(m_z_matrix, 1), row, 1)), 2) / row  % 卫东需要提供标准公式(论文或许)
% 几何平均法求取权重
temp = prod(m_z_matrix, 2) .^ (1 / row);  % prod(矩阵, dim)若dim=2表示按行计算乘积,1表示按列计算乘积;如果不是矩阵只是向量,那么返回向量所有元素的乘积
% 进行归一化处理
weight2 = temp ./ sum(temp)
% 特征值法求取权重(论文使用的是该种方法,论文中A-B判断矩阵中的权重与该代码运行结果完全一致)
% 思路:先获取判断矩阵的特征值和特征向量,在获取最大特征值对应的特征向量,最后对该特征向量进行归一化处理
[vec, eig_value] = eig(m_z_matrix);  % V为特征向量,D为特征值
max_eig_value = max(max(eig_value));  % 获取最大的特征值
% 上述两步其实可以不写,因为一致性检验已经写过了
[r, c] = find(eig_value == max_eig_value, 1);  % 获取最大特征值所在的行列号, 参数1表示只取第一个
temp_weight = vec(:, c);  % 获取最大特征值对应的特征向量
disp('特征值法求得的权重为:')
weight3 = temp_weight ./ sum(temp_weight)  % 对特征向量归一化处理即可得到权重


如果有问题,欢迎一起探讨。

目录
相关文章
空心电抗器的matlab建模与性能仿真分析
空心电抗器是一种无铁芯的电感元件,通过多层并联导线绕制而成。其主要作用是限制电流、滤波、吸收谐波和提高功率因数。电抗器的损耗包括涡流损耗、电阻损耗和环流损耗。涡流损耗由交变磁场引起,电阻损耗与电抗器半径有关,环流损耗与各层电流相关。系统仿真使用MATLAB2022a进行。
基于粒子滤波器的电池剩余使用寿命计算matlab仿真
本研究基于粒子滤波器预测电池剩余使用寿命(RUL),采用MATLAB2022a实现。通过非线性动力学模型模拟电池老化过程,利用粒子滤波器处理非线性和非高斯问题,准确估计电池SOH变化趋势,进而预测RUL。系统仿真结果显示了良好的预测性能。
|
18天前
|
算法 数据安全/隐私保护
数字通信中不同信道类型对通信系统性能影响matlab仿真分析,对比AWGN,BEC,BSC以及多径信道
本项目展示了数字通信系统中几种典型信道模型(AWGN、BEC、BSC及多径信道)的算法实现与分析。使用Matlab2022a开发,提供无水印运行效果预览图、部分核心代码及完整版带中文注释的源码和操作视频。通过数学公式深入解析各信道特性及其对系统性能的影响。
|
2月前
|
算法
MATLAB符号计算
【10月更文挑战第9天】MATLAB不仅擅长数值计算,还具备强大的符号计算功能,支持代数运算、方程求解、微积分等。本文介绍如何使用MATLAB的符号工具箱进行符号变量定义、方程求解、微分积分及矩阵运算,并通过多个实际应用案例展示了其在机械系统、电路分析、经济优化和物理运动学等领域的应用。此外,文章还提供了符号计算的最佳实践和未来展望。
88 2
|
2月前
|
安全 调度
电力系统的负荷损失和潮流计算matlab仿真,对比最高度数,最高介数以及最高关键度等节点攻击
本课题研究节点攻击对电力系统稳定性的影响,通过模拟最高度数、最高介数和最高关键度攻击,对比不同攻击方式下的停电规模。采用MATLAB 2022a 进行系统仿真,核心程序实现线路断开、潮流计算及优化。研究表明,节点攻击会导致负荷损失和系统瘫痪,对电力系统的安全构成严重威胁。通过分析负荷损失率和潮流计算,提出减少负荷损失的方法,以提升电力系统的稳定性和安全性。
|
2月前
|
Serverless
MATLAB中的矩阵与向量运算
【10月更文挑战第2天】本文全面介绍了MATLAB中的矩阵与向量运算,包括基本操作、加减乘除、转置、逆矩阵、行列式及各种矩阵分解方法。通过丰富的代码示例,展示了如何利用矩阵运算解决线性方程组、最小二乘法拟合、动态系统模拟和电路分析等问题。掌握这些运算不仅提升编程效率,还能在工程计算和科学研究中发挥重要作用。
107 1
|
2月前
|
编解码 算法 数据安全/隐私保护
基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,turbo码以及BCH码
本程序系统基于BP译码的LDPC误码率MATLAB仿真,分析不同码长、码率、信道对译码性能的影响,并与卷积码、Turbo码及BCH编译码进行对比。升级版增加了更多码长、码率和信道的测试,展示了LDPC码的优越性能。LDPC码由Gallager在1963年提出,具有低复杂度、可并行译码等优点,近年来成为信道编码研究的热点。程序在MATLAB 2022a上运行,仿真结果无水印。
59 0
|
3月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
191 19
|
4月前
|
算法 Perl
【光波电子学】基于MATLAB的多模光纤模场分布的仿真分析
本文介绍了基于MATLAB的多模光纤模场分布仿真分析,详细阐述了多模光纤的概念、实现方法、仿真技术,并利用模式耦合方程分析方法,通过理论和仿真模型设计,展示了不同模式下的光场分布及其受光纤参数影响的分析结果。
166 4
【光波电子学】基于MATLAB的多模光纤模场分布的仿真分析
|
3月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。

热门文章

最新文章

下一篇
DataWorks