%数学建模
%层次分析
clc
clear
co = [1 3 4;1/3 1 1;1/4 1 1];
cp = [1 2 5 1 1/3 1/8 1 1 3;
1/2 1 2 3 1 1/3 1 1 3;
1/5 1/2 1 8 3 1 1/3 1/3 1];
nc = 3;
np = 3;
ocp = cengcifenxi(co,cp,nc,np)
function ocp = cengcifenxi(cu,cp,nc,np)
%层次分析程序
%cu 准则层C对目标层O的成对比较矩阵
%cp 所有方案层P对准则层C的成对比较矩阵
%nc 准则层C的个数
%np 方案层P的个数
%%
for i = 1:nc
pc(1:np,1:np,i) = cp(:,np*(i-1)+1:np*i);
end
%%
ocp = zeros(np+4,nc+1);
%%
[lamatac,wc] = zhenghufanjuzhen_hefa(cu);
ocp(1,1:nc) = wc';
cicr(cu)
for i = 1:nc
[lamata(i),w(1:np,i)] = zhenghufanjuzhen_hefa(pc(1:np,1:np,i));
[ci(i),cr(i)] = cicr(pc(:,:,i));
ocp(2:(np+1),i) = w(1:np,i);
ocp(np+2,i) = lamata(i);
ocp(np+3,i) = ci(i);
ocp(np+4,i) = cr(i);
end
%%
for i = 1:np
ocp(i+1,nc+1) = sum(ocp(1,1:nc).*ocp(i+1,1:nc));
end
%%
ri = [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
ocp(np+4,nc+1) = sum(ocp(1,1:nc).*ocp(np+3,1:nc))/sum(ocp(1,1:nc)*ri(np));
function [ci,cr] = cicr(a)
%一致性检验CI RI
ri = [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
lamata = zhenghufanjuzhen_hefa(a)
n = size(a,2);
ci = (lamata - n)/(n-1)
cr = ci/ri(1,n)
if cr < 0.1
disp('-------------------- CR < 0.1 通过了一致性检验------------------------------')
else
disp('-------------------- CR > 0.1 没能通过一次性检验 ---------------------------')
end
function [lamata,w] = zhenghufajuzhen_hefa(a)
%求解正互反矩阵的最大特征值和特征向量的使用算法
n = size(a,2);
for i = 1:n
for j = 1:n
aa(i,j) = a(i,j)/sum(a(:,j));
end
end
aaa = [sum(aa(1,:)),sum(aa(2,:)),sum(aa(3,:))];
for i = 1:n
w(i) = aaa(i)/sum(aaa);
end
aw = a*w';
lamata = sum(aw'./w)/n;
w = w';
运行结果:
lamata =
3.0092
ci =
0.0046
cr =
0.0079
-------------------- CR < 0.1 通过了一致性检验------------------------------
ans =
0.0046
lamata =
3.0055
ci =
0.0028
cr =
0.0048
-------------------- CR < 0.1 通过了一致性检验------------------------------
lamata =
3.0015
ci =
7.7104e-004
cr =
0.0013
-------------------- CR < 0.1 通过了一致性检验------------------------------
lamata =
3
ci =
0
cr =
0
-------------------- CR < 0.1 通过了一致性检验------------------------------
ocp =
0.6327 0.1924 0.1749 0
0.5949 0.0820 0.4286 0.4671
0.2766 0.2364 0.4286 0.2955
0.1285 0.6816 0.1429 0.2374
3.0055 3.0015 3.0000 0
0.0028 0.0008 0 0
0.0048 0.0013 0 0.0033
>>