當前位置:編程學習大全網 - 編程語言 - 如何利用matlab編程計算分層問題

如何利用matlab編程計算分層問題

我寫了壹個程序關於AHP

經檢驗,效果不錯,主要正對三層de

如果是四層的話,自己歸類

PS:四類的應該能解,但是我沒試過

壹下是我的程序

function w=l_ahp(num,g)

% w:最後權重 num:層數 g:行向量(各層準則數量)

% 調運方式:w=l_ahp(num,g)

% EXAMPLE:

disp('-----層次分析系統(AHP)-------')

for i=2:num %控制各層

disp(['第',num2cell(i),'層分析'])

trace_w{i-1}(1:g(i),1:g(i-1))=zeros(g(i),g(i-1));

trace_l{i-1}(1,1:g(i-1))=zeros(1,g(i-1));

CI{i-1}(1:g(i-1))=zeros(1,g(i-1));

CR{i-1}(1:g(i-1))=zeros(1,g(i-1));

for j=1:g(i-1)

disp(['第',num2cell(i),'層','第',num2cell(j),'個判斷矩陣分析'])

A=input('輸入判斷矩陣(按妳的順序)');

[w,l]=eig(A);

ll=(max(l));

[ll,index]=max(ll);

w=w(:,index);

w=abs(w);

w=w./sum(w)

trace_w{i-1}(:,j)=w

trace_l{i-1}(1,j)=ll

end

CI{i-1}(:)=(trace_l{i-1}(:)-g(i))./(g(i)-1);

RI=RI_process(g(i))

CR{i-1}(:)=CI{i-1}(:)./RI

c=find(CR{i-1}(:)>=0.1)

zhi=isempty(c);

if zhi==1

disp('壹致性檢驗結果(層內單派層)')

disp(CR{i-1});

disp('各個判斷矩陣權向量')

disp(trace_w{i-1});

disp('各個判斷矩陣最大特征值')

disp(trace_l{i-1});

else

['請修改第',num2cell(c),'次的比較矩陣']

['以下結果無效']

break;

end

end

disp('層次總排序及其壹致性檢驗')

w=trace_w{num-1}(1:end,1:end)*trace_w{1}(1:end,1:end);

w=abs(w);

w=w./sum(w);

CI=sum(trace_w{1}(:).*CI{2}(:));

CR=CI/RI_process(g(num));

if CR<0.1

disp('綜合壹致性檢驗結果');

disp(num2cell(CR));

disp('最後權重')

disp([num2cell(w)]);

w

else

disp('壹致性檢驗不合格請重新建立判斷矩陣');

end

function RI=RI_process(gs)

switch gs

case 1

RI=0;

case 2

RI=0;

case 3

RI=0.58;

case 4

RI=0.90;

case 5

RI=1.12;

case 6

RI=1.24;

case 7

RI=1.32;

case 8

RI=1.41;

case 9

RI=1.45;

case 10

RI=1.49;

case 11

RI=1.51;

otherwise

disp('超出判斷範圍')

end

  • 上一篇:大壹新生入學買什麽禮物好
  • 下一篇:高分求歐美傷感說唱
  • copyright 2024編程學習大全網