文章首发于我的个人博客:欢迎大佬们来逛逛
∣ 1 3 1 1 / 3 1 / 3 1 1 / 2 1 / 5 1 2 1 1 / 3 3 5 5 1 ∣ \left|\begin{array}{cccc}1 & 3 & 1 & 1 / 3 \\1 / 3 & 1 & 1 / 2 & 1 / 5 \\1 & 2 & 1 & 1 / 3 \\3 & 5 & 5 & 1\end{array}\right| 11/313312511/2151/31/51/31
T = [ t 1 t 2 ⋯ t n ] T=\begin{bmatrix}t_1&t_2&\cdots&t_n\end{bmatrix} T=[t1t2⋯tn]
W = [ w 1 w 2 ⋯ w n ] w i = t i ∑ i = 1 n t i \begin{gathered}W=\begin{bmatrix}w_1&w_2&\cdots&w_n\end{bmatrix}\\\\w_i=\frac{t_i}{\sum_{i=1}^nt_i}\end{gathered} W=[w1w2⋯wn]wi=∑i=1ntiti
C I = λ max − n n − 1 C I=\frac{\lambda_{\max }-n}{n-1} CI=n−1λmax−n
C R = C I R I CR = \frac{CI}{RI} CR=RICI
S c o r e = P ⋅ W Score = P \cdot W Score=P⋅W
function [Score,W] = mfunc_levelAnalysis(A,data)
% 层次分析法:求解每个评价对象的综合得分与对应权重
% paramts:
% A: 两两指标之间的自定义的成对对角矩阵 Shape: (n,n)
% data: 原始数据矩阵,(m,n) m为评价对象,n为评价指标
% returns:
% Score:每个评价对象的综合得分
% W: 所有指标的权重
% 成对对角矩阵:A判别矩阵
% A=[1,3,1,1/3;
% 1/3,1,1/2,1/5;
% 1,2,1,1/3;
% 3,5,3,1];
[n,~]=size(data);
%Z=zscore(X);
Z = data ./ repmat(sum(data.*data) .^ 0.5, n, 1); %矩阵归一化
[n,~]=size(A);
%求特征值特征向量,找到最大特征值对应的特征向量
[V,D]=eig(A);
tzz=max(max(D)); %找到最大的特征值
c1=find(D(1,:)==tzz);%找到最大的特征值位置
T=V(:,c1);%最大特征值对应的特征向量
%赋权重
W=zeros(n,1);
for i=1:n
W(i,1)=T(i,1)/sum(T);
end
%一致性检验
CI=(tzz-n)/(n-1);
RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59];
%判断是否通过一致性检验
CR=CI/RI(1,n);
if CR>=0.1
fprintf('没有通过一致性检验\n');
else
fprintf('通过一致性检验\n');
end
score=Z*W;
Score=100*score/max(score);
end
有关成对比较矩阵两两指标之间的的相关重要性的程度参考: