什麼是一致性矩陣?
舉個例子就明白了
下面這個矩陣就是一致性矩陣
1 2 4
1/2 1 2
1/4 1/2 1
比如 a 的座標是(1,2),元素值爲 2
b 的座標是(3,1),元素值爲 1/4
那麼它們相乘得 1/2,而它們平移相交處的座標(3,2)的元素值也是 1/2,說明這對數據滿足一致性
同理,任意座標(i,j)與(j,k)的元素值乘積 等於 它們相交處的座標(i,k)的元素值
則說明這個矩陣爲一致性矩陣
再來舉個反例
下面這個矩陣不是一致性矩陣
1 2 3
1/2 1 2
1/3 1/2 1
比如 a 的座標是(1,3),元素值爲 3
b 的座標是(2,1),元素值爲 1/2
那麼它們相乘得 3/2,而它們平移相交處的座標(2,3)的元素值卻是 2,說明這對數據不滿足一致性
那這個矩陣就不是一致性矩陣
什麼是正互反矩陣?
舉個例子
下面這個矩陣就是正互反矩陣
1 2 4
1/2 1 2
1/4 1/2 1
下面這個矩陣不是正互反矩陣
1 2 3
1/2 1 2
1/4 1/2 1
因爲座標(1,3)乘以座標(3,1)的元素值不爲 1
下面這個矩陣也不是正互反矩陣
1 2 4
1/2 1 2
1/4 1/2 2
因爲座標(1,3)與座標(3,1)所對應的座標(3,3)的元素值不爲 1
結論:當座標(i,j)乘以座標(j,i)的元素值爲 1 ,且對應的座標(j,j)的元素值爲 1 時,該矩陣爲正互反矩陣
作業解答
一、判斷矩陣是否爲正互反矩陣?
if sum(sum(A'.* A ~= ones(n))) > 0
disp('不是正互反矩陣')
end
提示: 在 層次分析法代碼的編寫 視頻中的 1:17:34 中會有詳細的講解
二、輸入二階判斷矩陣會有什麼問題?如何修正?
從圖中我們看出當 n=2 時 RI=0
而計算一致性的公式爲 CR=CI/RI(n)
這顯然是錯誤的,修改方法如下:
RI=[0 0.00001 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];
將 n=2 時 RI=0.00001 即可
判斷矩陣的元素規定
層次分析法的判斷矩陣中,僅能包含 1 – 9 的整數及其倒數,不能出現類似 0.3、4.5、11 等不符合要求的元素
判斷矩陣的順序
① 先進行一致性檢驗(必須通過)
② 再求權重
③ 最後歸一化
注意:準則層都是關聯性較小的
判斷矩陣的代碼部分
disp(' 請輸入判斷矩陣A ')
A=input('A=');
ERROR = 0;
[r,c]=size(A);
if r ~= c || r <= 1
ERROR = 1;
end
if ERROR == 0
[n,n] = size(A);
if sum(sum(A <= 0)) > 0
ERROR = 2;
end
end
if ERROR == 0
if n > 15
ERROR = 3;
end
end
if ERROR == 0
if sum(sum(A' .* A ~= ones(n))) > 0
ERROR = 4;
end
end
if ERROR == 0
% % % % % % % % % % % % %方法1: 算術平均法求權重% % % % % % % % % % % % %
Sum_A = sum(A);
SUM_A = repmat(Sum_A,n,1);
Stand_A = A ./ SUM_A;
disp('算術平均法求權重的結果爲:');
disp(sum(Stand_A,2)./n)
% % % % % % % % % % % % %方法2: 幾何平均法求權重% % % % % % % % % % % % %
Prduct_A = prod(A,2);
Prduct_n_A = Prduct_A .^ (1/n);
disp('幾何平均法求權重的結果爲:');
disp(Prduct_n_A ./ sum(Prduct_n_A))
% % % % % % % % % % % % %方法3: 特徵值法求權重% % % % % % % % % % % % %
[V,D] = eig(A);
Max_eig = max(max(D));
[r,c]=find(D == Max_eig , 1);
disp('特徵值法求權重的結果爲:');
disp( V(:,c) ./ sum(V(:,c)) )
% % % % % % % % % % % % %下面是計算一致性比例CR的環節% % % % % % % % % % % % %
CI = (Max_eig - n) / (n-1);
RI=[0 0.00001 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]; %注意哦,這裏的RI最多支持 n = 15
% 這裏n=2時,一定是一致矩陣,所以CI = 0,我們爲了避免分母爲0,將這裏的第二個元素改爲了很接近0的正數
CR=CI/RI(n);
disp('一致性指標CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10
disp('因爲CR<0.10,所以該判斷矩陣A的一致性可以接受!');
else
disp('注意:CR >= 0.10,因此該判斷矩陣A需要進行修改!');
end
elseif ERROR == 1
disp('請檢查矩陣A的維數是否不大於1或不是方陣')
elseif ERROR == 2
disp('請檢查矩陣A中有元素小於等於0')
elseif ERROR == 3
disp('A的維數n超過了15,請減少準則層的數量')
elseif ERROR == 4
disp('請檢查矩陣A中存在i、j不滿足A_ij * A_ji = 1') % 說明不是正互反矩陣
end
切記不能直接用於論文中,要根據題目適當的修改,避免查重
建議三種求權重的方法都用在論文上,並且強調一句:爲了保證結果的穩健性,本文采用了三種方法分別求出了權重後計算平均值,再根據得到的權重矩陣計算各方案的得分,並進行排序和綜合分析,這樣避免了採用單一方法所產生的偏差,得出的結論將更全面、更有效
層次分析法的評估
層次分析法的優點:層次分析法具有系統性、簡潔實用、所需定量數據信息較少,這種方法尤其可用於對無結構特性的系統評價以及多目標、多準則、多時期等的系統評價,而且結果簡單明確、可信度較高。然而,層次分析法雖然可以簡單地把綜合指標量化,但在權重的確定方面主觀性太強,因此通過構造出來的判斷矩陣所求出來的權值不一定可靠從而不能客觀的評價目標層的影響指標
同理,要做適當修改避免查重