层次分析法的Matlab代码

层次分析法是确定权重的一种常用方法,但是由于比较矩阵较难获得,所以没有专家打分或者没有权威数据的情况下一般不用。当然,如果想很主观的用,也是可以的,只不过别人问起来就不好说话了。如果缺乏专家打分等数据,可以尝试使用熵值法,也是一种确定权值的不错的方法,这个现在不说,今天给出层次分析法的Matlab代码。

这个代码哪来的我也记不清了,可能是网上直接找的,也可能是书上看来的,反正很好用。而且层次分析法的思路本来就简单,没什么复杂的算法,就是把一些数据计算出来罢了,所以大家自己看一下就懂了,不懂的话先去看看层次分析法的步骤。

下面是Matlab代码:

[code lang=”matlab”]

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

[/code]

调用的时候直接运行代码,然后按照提示输入比较矩阵就行了。

3 thoughts on “层次分析法的Matlab代码

  1. 真是巧。。。当时我还问你要的这个课件你记得么。。
    还有一种叫做ANP的网络分析法,算是层次分析法(AHP)的推广吧(层次分析法认为各个层次中的元素是独立的,网络分析法就)考虑了不独立的情况)当时我做的题目是:垃圾减量分类活动中社会及个体因素的量化分析,你可以查一下,我觉得用网络分析法很贴切的。。就是数学功底和时间有限。
    数模顺利~

发表评论

电子邮件地址不会被公开。 必填项已用*标注