数学建模·层次分析法基本步骤及参考代码

层次分析法步骤:

1. 分析系统中各因素之间的关系建立系统的递阶层次结构:
(1) 最高层
(2) 中间层
(3) 最低层
2. 构造两两成对比的判断矩阵。
3. 层次单排序及其一致性检验。
4. 层次总排序。

参考代码(博主xddc总结):

disp('请输入判断矩阵A(n阶)');
A=input('A=');
[n,n]=size(A);
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while  k>p
  i=i+1;
  x(:,i)=A*y(:,i-1);
  m(i)=max(x(:,i));
  y(:,i)=x(:,i)/m(i);
  k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp(w);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];
CR=CI/RI(n);
if CR<0.10
    disp('此矩阵的一致性可以接受!');
    disp('CI=');disp(CI);
    disp('CR=');disp(CR);
end

 

执行示例:

请输入判断矩阵A(n阶)
A=[1 1/2 4 3 3;
      2 1   7 5 5;
    1/4 1/7 1 1/2 1/3;
      1/3 1/5 2 1 1;
     1/3 1/5 3 1 1]
    0.2636
    0.4758
    0.0538
    0.0981
    0.1087
    5.0721
此矩阵的一致性可以接受!
CI=
    0.0180
CR=
    0.0161

根据数模培训对层次分析的讲解,只是懂了思路,要翻译成matlab语言还是磕磕绊绊

 

代码2:

这里设计了3层,最后要把每层的权重叠乘一下:

function ahpactor

A = [1/1  2/1  5/1  3/1 
     1/2  1/1  3/1  1/2 
     1/5  1/3  1/1  1/4
     1/3  2/1  4/1  1/1];
[w, CR] = AHP(A);

% face
A1 = [1/1  1/2  3/1
      2/1  1/1  5/1
      1/3  1/5  1/1];
[w1, CR1] = AHP(A1);

% body
A2 = [1/1  1/3  2/1
      3/1  1/1  5/1
      1/2  1/5  1/1];
[w2, CR2] = AHP(A2);

% voice
A3 = [1/1  2/1  1/5
      1/2  1/1  1/7
      5/1  7/1  1/1];
[w3, CR3] = AHP(A3);

% acting
A4 = [1/1  2/1  1/3
      1/2  1/1  1/5
      3/1  5/1  1/1];
[w4, CR4] = AHP(A4);


CRs = [CR1 CR2 CR3 CR4]
P = [w1 w2 w3 w4] * w

 % ------------------------------------------------------------------------
 
function [w, CR] = AHP(A)
% n= [ 1    2    3    4    5    6    7    8    9
RI = [ 0.00 0.00 0.58 0.90 1.12 1.24 1.32 1.41 1.45];

n = size(A,1);
[V, D] = eig(A);

[lamda, i] = max(diag(D));
CI=(lamda-n)/(n-1);
CR = CI/RI(n);

W = V(:,i);
w = W/sum(W);

你可能感兴趣的:(matlab,数学建模)