%参数设定
disp("请输入判断矩阵")
A = input("A=");
Error = 0;%报错参数
[r,c] = size(A);%判断矩阵A的行列数
RI=[0 0.00001 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];
%常见错误提醒
%防止输入矩阵错误
if r ~= c
Error = 1;
end
%检验矩阵A是否为正互反矩阵
for i = 1:r
for j = 1:c
if A(i,j) <= 0 || A(i,j)*A(j,i) ~= 1
Error = 2;
end
end
end
%检验矩阵一致性指标范围
if r >= 15
Error = 3
end
%检验矩阵一致性
if Error == 0
E = eig(A)
max_E = max(max(E))
CI = (max_E - r)/(r - 1)
CR = CI/(RI(1,r))
if CR >= 0.1
Error = 4
end
end
%常见错误分析
if Error == 1
disp("输入错误,请检查输入判断矩阵")
elseif Error == 2
disp("输入判断矩阵不为正互反矩阵")
elseif Error == 3
disp("超出一致性检验指标范围,不建议使用层次分析法,请更改分析方法!")
elseif Error == 4
disp("矩阵一致性不同过,需要更换判断矩阵")
else
Error = 5
disp("判断矩阵符合要求")
end
%计算
if Error == 5
%算术平均法
sum_sh = sum(A)
A_sum_sh = repmat(sum_sh,r,1)
A_sum_sh_zb = A ./ (A_sum_sh)
A_sum_sh_zb_av = (sum(A_sum_sh_zb,2))/r
disp("矩阵的算术平均数为:")
disp(A_sum_sh_zb_av)
%几何平均法
A_jh = prod(A,2)
A_jh_kf = A_jh.^(1/r)
A_jh_kf_av = A_jh_kf/sum(A_jh_kf)
disp("矩阵的几何平均数为:")
disp(A_jh_kf_av)
%特征值平均法
[X,Y] = eig(A)%X是特征向量矩阵,Y是特征值矩阵
[x,y] = find(max(max(Y)))%找到Y中最大元素的位置
A_tz_max = X(:,y)%X的第y列矩阵
A_tz_max_zb_ch = sum(A_tz_max)
A_tz_max_av = A_tz_max./A_tz_max_zb_ch
disp("矩阵的最大特征值权重为:")
disp(A_tz_max_av)
end
%总结
disp("矩阵的最大特征值权重为:")
disp(A_tz_max_av)
disp("矩阵的几何平均数为:")
disp(A_jh_kf_av)
disp("矩阵的算术平均数为:")
disp(A_sum_sh_zb_av)