层次分析法改进代码

题目:
层次分析法改进代码_第1张图片

层次分析法改进代码_第2张图片
代码:

% 此代码的内容是对矩阵进行一致性检验,并利用算术平均法和几何平均法求出权重,以及最大特征根和CIRI的值。
A=[1 1/4 4 3 3;
    4 1 6 5 5;
    1/4 1/6 1 1/2 1/3;
    1/3 1/5 2 1 1;
    1/3 1/5 3 1 1];
%disp('请输入准则层判断矩阵A(n阶)');
%A=input('A=');

% A=[1 1/4 1/8;
%     4 1 1/3;
%     8 3 1];
% 
% A=[1 4 6;
%    1/4 1 3;
%    1/6 1/3 1];
% 
% A=[1 3 4;
%    1/3 1 1;
%    1/4 1 1];
% 
% A=[1 1 1/4;
%    1 1 1/4;
%    4 4 1];

% A=[1 5 7;
%    1/5 1 1/5;
%    1/7 1/5 1];


[n,n]=size(A);

Sum_A=sum(A);
SUM_A=repmat(Sum_A,n,1);
Stand_A=A./SUM_A;
disp('算术平均法求权重的结果为:')
disp(sum(Stand_A,2)./n);

Prduct_A=prod(A,2);
Prduct_n_A=Prduct_A.^(1/n);
disp('几何平均法求权重的结果为:')
disp(Prduct_n_A./sum(Prduct_n_A));


[V,D]=eig(A);%求得特征向量和特征值
            %求出最大特征值和它所对应的特征向量
tempNum=D(1,1);
pos=1;
for h=1:n
    if D(h,h)>tempNum
        tempNum=D(h,h);
        pos=h;
    end
end    
w=abs(V(:,pos));
w=w/sum(w);
t=D(pos,pos);
disp('准则层特征向量w=');disp(w);disp('准则层最大特征根t=');disp(t);
         %以下是一致性检验
CI=(t-n)/(n-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 1.60 1.61 1.615 1.62 1.63];
CR=CI/RI(n);
if CR<0.10
    disp('此矩阵的一致性可以接受!');
    disp('CI=');disp(CI);
    disp('CR=');disp(CR);
else disp('此矩阵的一致性验证失败,请重新进行评分!');
end



% 改进的AHP%由于A的一致性检验不通过,因此通过此改进的AHP法:求出和A的对数距离最短的一致矩阵A*,并且A*的最大特征根就近似为A的最大特征
%A为一致性检验不通过的矩阵
A=[1   5   7;
   1/5 1   5;
   1/7 1/5 1];
k = size(A);%使用size函数求矩阵每个维度的长度
n = k(1);%n求出的是矩阵的行数,但这里矩阵的行数和列数都是相等的

% 使用循环对矩阵A的每一个元素都取对数:
for i=1:n
    for j = 1:n
        B(i,j) = log10(A(i,j));%B=lg(A)
    end
end
disp('B矩阵为:')
disp(B)


for i = 1:n
    for j = 1:n
        t = 0;
        for k = 1:n
             t = t + B(i,k) - B(j,k);
        end
        C(i,j) = t/n;%CB的最优传递阵
    end
end
disp('C矩阵为:')
disp(C)

for i=1:n
    for j = 1:n
        A(i,j) = 10^(C(i,j));%A*=10^C
    end
end
disp('和A对数距离最短的一致矩阵A*为:')
disp(A)
disp('最大特征根:')
[r,~] = Q(A);
disp(r)
CI = (r - n)/(n-1);
disp('一致性指标CI:')
disp(CI)
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 1.60 1.61 1.615 1.62 1.63];
disp('平均随机一致性指标RI:')
disp(RI(n))
CR = CI/RI(n);
disp('一致性比例CR:')
disp(CR)
if CR < 0.1
    disp('一致性检验通过')
end



B5矩阵一致性检验不一致,因此使用B5*当做一致性矩阵代入计算:
层次分析法改进代码_第3张图片
层次分析法改进代码_第4张图片
层次分析法改进代码_第5张图片
层次分析法改进代码_第6张图片

你可能感兴趣的:(【数模比赛】,算法,矩阵,线性代数)