馬上就要五一校賽了,作為新手的我在隊伍裡負責了代碼的方面,在學習過程中從b站找到了由清風老師主講的課程,并開始認真學習。在視訊中老師是按照先進行權重計算後進行一緻性檢驗進行課程的,但是老師也說了,這樣隻是為了課程編排,實際的邏輯操作中應該先進行一緻性檢驗後進行權重求和,是以此處就按照後一個順序進行代碼的編寫。
這套課程老師講解的很詳細,在配套的代碼注釋裡還特意提到了這個問題。
步驟一:進行一緻性檢驗
首先求判斷矩陣的最大特征根及其對應的特征向量,再計算一緻性
(1)對矩陣每一列歸一化(這部分的數學公式在網上也有很多,可以百度一下)
每一個元素除以其所在列的和
任務:按列求和
代碼:要是沒學matlab的話就會像C語言一樣寫一個for循環,但matlab就要學會調用各種函數 平時我們指導sum有和的意思,在matlab裡也一樣 指令行輸入一個help sum檢視相關函數
按列求和:sum(A,1)=sum(A)
任務2:相除——處理和
來源help:沿次元 dim 傳回總和。例如,如果 A 為矩陣,則 sum(A,2) 是包含每一行總和的列矢量。而sum(A)就是行向量
1 2 4 6
3 4
首先先讓我們來數一下A矩陣吧,這個在C語言裡會有一個sizeof之類的函數會有數長度之類的功能,在mtalab裡說size,注意,這是矩陣,不是二維數組!!!!從1開始!!!!
help:當 A 是矩陣時,[m,n] = size(A) 傳回行數和列數。
如果想把元素對應相除,先要擴充SUMA矩陣
方法1repmat函數
方法2 for循環拼接
這兩個函數可以help查找使用方法
此處采用for循環
[m n]=size(A);
SUM_A=[];
for x=1:n
SUM_A=[SUM_A;SUM];
end
在這裡插入代碼片
任務3:相除——逐個相除
區分 / 與 ./就好(./是對應的元素之間)
Stand_A=A./SUM_A
(2)對按列歸一化的矩陣,在按行求和
任務:求和-按行
sum
結果:列向量
(3)将向量進行歸一化
對列向量各個元素求和,除一下
SUM_3=sum(SUM_2);
Stand_A_1=Stand_A/SUM_3;
(4)計算最大特征根
特征根:線代的知識
任務1 求特征根
此刻C語言裡貌似找不到相關内容了,但是如果暴力代碼解方程的話又有點,麻煩,是以百度一下有沒有相關函數,得到結果:help eig
e = eig(A) 傳回一個列矢量,其中包含方陣 A 的特征值
[V,D] = eig(A) 傳回特征值的對角矩陣 D 和矩陣 V,其列是對應的右特征矢量,使得 AV = VD。
此處需要使用D矩陣
任務2 求最大值
聯想一下max help一下
M = max(A) 傳回 A 的最大元素。
如果 A 為矢量,則 max(A) 傳回 A 的最大元素。
如果 A 為矩陣,則 max(A) 是包含每一列的最大值的行矢量
此時D為矩陣,max一下是行矢量,那我們就max兩下吧
接下來進行一緻性檢驗
1.根據公式計算CI,注意運算優先級
此時公式裡的n,其實就是一個決策層的一個個數,具體值傳回size(A)的部分分析
2.RI 根據n确定
R=[0 0 0.58 0.9 1.12 1.24 1.38 1.41 1.46];
RI=R(m)
3.計算一緻性比例
CR=CI/RI;
if CR<0.1
disp('OK')
else
disp('NO,you need reset it')
end
步驟二:求權重
方法一:算數平均法
step1 歸一化 在之前已經完成
step2 将歸一化後的行向量按列相加
step3 權重=将standA除以上面那個數
SUM_AVE_1=sum(Stand_A,1);
disp('算數平均法')
disp(Stand_A/SUM_AVE_1)
方法二:幾何平均法(歸一化後
幾何平均數是對各變量值的連乘積開項數次方根。求幾何平均數的方法叫做幾何平均法。
step1 按行相乘 然後開方
step2 把這些數相加
step3 把這些數分别除那個合數
Prod=prod(Stand_A,2);
Prod_A=Prod.^(1/n);
Sum_prod=sum(Prod_A);
disp('幾何平均法')
disp(Prod_A/Sum_prod)
方法三 特征值法求權重(歸一化後
step1 求出最大特征值,已經求了
step2 求出最大特征值對應的特征向量
任務一:找出最大特征值所在的位置
運用find 和==
得到該特征向量V(:,c),此處c為列數,特征向量為一個行向量
對所有特征向量求和,然後相除
sum(V(:,c));
disp('特征值法求權重')
disp(V(:,c)/sum(V(:,c)))
運作結果
Stand_A =
0.1791 0.1791 0.2857 0.1429 0.2857
0.1791 0.1791 0.2857 0.1429 0.2857
0.0448 0.0448 0.0714 0.1429 0.0476
0.5373 0.5373 0.2143 0.4286 0.2857
0.0597 0.0597 0.1429 0.1429 0.0952
RI =
1.1200
OK
算數平均法
0.2145
0.2145
0.0703
0.4006
0.1001
幾何平均法
0.2184
0.2184
0.0664
0.3985
0.0983
特征值法求權重
0.2121
0.2121
0.0679
0.4114
0.0965
>>