题目:
代码:
% 鏂规牴娉曡绠椢�
function [r,W] = Q(A)
d = size(A);
n = d(1);
if n == 5
W = [1;1;1;1;1];% 鍒濆鍖栨潈閲嶇煩闃�
S = [0 0 0 0 0];
else
W = [1;1;1];% 鍒濆鍖栨潈閲嶇煩闃�
S = [0 0 0];
end
for i = 1:n
for j = 1:n
W(i) = W(i)*A(i,j);
end
W(i) = W(i)^(1/n);% 鏂规牴娉曟眰鍑烘潈閲�
end
s1 = sum(W);
W = W./s1;% 鏉冮噸褰掍竴鍖�
% disp(W)
m = 0;
for i = 1:n
S(i) = (A(i,:)*W)/W(i);
m = m + S(i);
end
% disp(m)
r = m/n;
% 此代码的内容是对矩阵进行一致性检验,并利用算术平均法和几何平均法求出权重,以及最大特征根和CI,RI的值。
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;%C为B的最优传递阵
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*当做一致性矩阵代入计算: