matlab实现层次分析法
生活随笔
收集整理的這篇文章主要介紹了
matlab实现层次分析法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
層次分析法步驟:
??1.列出目標層,準則層,措施層
??2.完成相鄰兩層間判斷矩陣
??3.對每個判斷矩陣使用AHP進行一致性檢驗
??(記錄AHP結果Q為權值,同時在對上中兩層時記錄CI)
??4.全部通過AHP對結果使用AHP1進行檢驗
??5.列出表格給出權值排序表
AHP代碼如下:
%本程序使用了特征值法,其余方法還有幾何平均法、算數平均法 %最后可輸出權值矩陣,多決策對一準則 function [Q]=AHP(B) %Q 為權值,B 為對比矩陣 %導入判別矩陣 B [n,m]=size(B); %判別矩陣具有完全一致性 for i=1:nfor j=1:nif B(i,j)*B(j,i)~=1fprintf('i=%d,j=%d,B(i,j)=%d,B(j,i)=%d\n',i,j,B(i,j),B(j,i)) endend end %求特征值特征向量,找到最大特征值對應的特征向量 [V,D]=eig(B); %特征值組成對角陣 D,V 是特征向量(列) max_eig_hang=max(D); %max_eig_hang 代表最大特征值所在行向量 max_eig_value=max(max_eig_hang); %max_eig_value 代表最大特征值 c1=find(D(1,:)==max(max_eig_hang));%c1 代表最大特征值對應的列向量編號 tzx=V(:,c1); %特征向量 %權 quan=zeros(n,1); for i=1:nquan(i,1)=tzx(i,1)/sum(tzx); end Q=quan; %一致性檢驗 CI=(max_eig_value-n)/(n-1) RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59];%RI 的值是固定的有表可查 size(RI); %判斷是否通過一致性檢驗 CR=CI/RI(1,n); if CR>=0.1fprintf('沒有通過一致性檢驗\n'); elsefprintf('通過一致性檢驗\n'); end endAHP1代碼如下:
%A 代表 A 層(目標-決策)形成的權重,是對A層每次運行AHP后得到的結果,單次作為列向量%B 的列向量是 B 層(決策-方案)各個權重,同A function AHP1(A,B,CI,n)%size(B)是n x 決策層個數%ending即為方案層相較于目標層的權重ending = ones(n,1);for i=1:nending(i)=B(i,1)*A(1,1)+B(i,2)*A(2,1);endfprintf("結果權重為:");endingRI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59];CR1 = 0;CR2 = 0;size(A)for i=1:size(A)CR1 = CR1 + CI(i)* A(i);CR2 = CR2 + RI(1,n)* A(i);endCR = CR1/CR2;if CR>=0.1fprintf('未通過一致性檢驗\n');elsefprintf('通過一致性檢驗\n'); end總結
以上是生活随笔為你收集整理的matlab实现层次分析法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC静态文本超链件
- 下一篇: 十二、程序返回、数据类型表示、代码注释