1.算术平均法
怕大家忘记,这里将理论部分呈现给大家
disp('请输入判断矩阵A') A=input('A='); [n,n] = size(A);%这里n代表的其实就是矩阵的列数 % % % % % % % % % % % % %方法1: 算术平均法求权重% % % % % % % % % % % % % Sum_A = sum(A);%对每一列求和,即最后得到一个1*n的向量 SUM_A = repmat(Sum_A,n,1);%这里就是将上面求解的1*n的向量变成n*n的矩阵,通俗来讲的话,可以理解为将上面求解的1*n的向量看似成一个元素,构造n*1的矩阵,阵中每个元素均为1*n的向量 Stand_A = A ./ SUM_A;%第一步,每个元素对应相除,即完成归一化,即每个元素除以所在列的和 disp('算术平均法求权重的结果为:'); disp(sum(Stand_A,2)./n)%第二步,按行求和,第三步,再除以n
2.几何平均法
% 方法2: 几何平均法求权重% % % % % % % % % % % % % Prduct_A = prod(A,2);%第一步,按行相乘得到一个新向量 Prduct_n_A = Prduct_A .^ (1/n);%第二步,将新向量的每个元素开n次方 disp('几何平均法求权重的结果为:'); disp(Prduct_n_A ./ sum(Prduct_n_A))%第三步,进行归一化
3.特征值求权重法
% % % % % % % % % % % % %方法3: 特征值法求权重% % % % % % % % % % % % % [V,D] = eig(A);%求出特征向量V,这里的V是每个特征值的特征向量构成的矩阵;特征值D,这里的D是由特征值组成的一个矩阵,主对角线为特征值,其余为零 Max_eig = max(max(D));%找到最大的特征值,至于为啥子写了两个max,里面的是求,D中每一列的最大值,组成一个行向量,在对行向量求解最大值 [r,c]=find(D == Max_eig , 1);%D == Max_eig使矩阵中!=Max_eig的元素变成0,等于Max_eig的元素变成1,而find函数的作用是找到矩阵中元素不为0的元素的下标索引,这样我们就可以找到V中哪一列的向量是最大特征值对应的特征向量了 disp('特征值法求权重的结果为:'); disp( V(:,c) ./ sum(V(:,c)) )%进行归一化
4.一致性检验
% % % % % % % % % % % % %下面是计算一致性比例CR的环节% % % % % % % % % % % % % CI = (Max_eig - n) / (n-1); RI=[0 0.0001 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最多支持 n = 15 % 这里n=2时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数 CR=CI/RI(n); disp('一致性指标CI=');disp(CI); disp('一致性比例CR=');disp(CR); if CR<0.10 disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!'); else disp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!'); end
这样层次分析法的分享大体上就结束啦!!
本篇文章是笔者学习清风网课自己的总结,希望对大家有所帮助。