国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

層次分析法(MATLAB)

這篇具有很好參考價值的文章主要介紹了層次分析法(MATLAB)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

對之前的學(xué)習(xí)進行總結(jié),整個比賽下來好像就用到了這個方法,最后也不知道對不對,反正最后還有點趕,就是很懵的那種,對于層次分析話的還是有點了解了,由于是純小白,有錯誤的地方希望各位大佬能夠指出。

目錄

數(shù)據(jù)提取

歸一化處理

判斷矩陣

一致性檢驗

?算術(shù)平均法求權(quán)重

加權(quán)求和

過程體會


數(shù)據(jù)提取

有些題目就會自己提供數(shù)據(jù),數(shù)據(jù)是存儲在Excel里面的,要導(dǎo)入的話我是用xlsread來實現(xiàn)的,因為是只用到了數(shù)值部分,所以另外兩個參數(shù)就用~替代了。假設(shè)就是要提取“數(shù)學(xué)建模.xls”里面sheet1表中的內(nèi)容,前面跟著的文件的絕對路徑,用相對路徑應(yīng)該也可以吧,我這里沒嘗試了。

%[num, txt, raw] = xlsread(filename, sheet, range)
[num,~,~]=xlsread('C:\Users\25496\Desktop\數(shù)學(xué)建模.xls','sheet1');

一般這種數(shù)據(jù)也是有規(guī)律的,集中在一塊上面,直接就可以截取出來存在一個矩陣里面。如截取num中的1到10行,且5到14列的數(shù)據(jù)。如果有多組相同指標的數(shù)據(jù),看是通過直接相加還是什么變成一組數(shù)據(jù)。

data=num(1:10,5:14);

這里有一個要注意的地方,因為不同指標之間的數(shù)量級不同,如果直接放在同一個矩陣里面,很小的數(shù)和一個更小的數(shù)放在一起,可能就會導(dǎo)致更小的整個指標的數(shù)據(jù)直接變成0,這顯然是不被允許的,我當時的處理是把他們沒個指標的數(shù)據(jù)放在集合中,因為后面要歸一化處理,等處理之后在放在同一個矩陣里面,現(xiàn)在的話可以直接給他們整體乘以一個倍數(shù),就可以讓他們不至于被忽略了。

層次分析法(MATLAB),matlab,開發(fā)語言,數(shù)學(xué)建模

?層次分析法(MATLAB),matlab,開發(fā)語言,數(shù)學(xué)建模

歸一化處理

因為不同指標之間的數(shù)量級可以不用,指標內(nèi)部的單位一致,但是指標和指標之后的值不同,這肯定是要進行歸一化處理的,不然一個很大的數(shù)但是這個指標的權(quán)重卻比較小,這不歸一化處理這整個的誤差就很大了。這里采用的是通過先求得整個指標數(shù)據(jù)的總和,再用每一個指標的數(shù)據(jù)除以整個總和,假設(shè)指標是一列一列的,就是用這一個數(shù)據(jù)除以這一列的總和得到一個數(shù)值。這樣處理之后不同指標數(shù)量級一致,指標內(nèi)部之間的排名沒有發(fā)生改變。

這個計算的話,我比較擔(dān)心的就是精度的問題了,然后可以直接通過循環(huán)來完成整個過程。這個除數(shù)的話習(xí)慣寫還是用./,用/也行。

matlab中乘法“*”和點乘“.*”;除法“/”和點除“./”的聯(lián)系和區(qū)別。_matlab 矩陣乘法_xiaotao_1的博客-CSDN博客https://blog.csdn.net/xiaotao_1/article/details/79026406

%歸一化處理
[mm,nn]=size(data);%數(shù)據(jù)行數(shù)和列數(shù)

for j=1:nn    %針對每一列
    msum=sum(data(:,j));    %求這一列元素之和
    for i=1:mm
        data(i,j)=data(i,j)./msum;    %每一個元素的值都除以這行的和
    end
end

?我當時是轉(zhuǎn)換成元胞數(shù)組了,然后運算之后要變成矩陣的形式。

%歸一化處理
[~,nn]=size(ingredient);
[mm,~]=size(ingredient{1});

for j=1:nn
    msum=sum(ingredient1{j});
    for i=1:mm
        ingredient{j}(i)=ingredient{j}(i)./msum;
    end
end

%元胞數(shù)組轉(zhuǎn)矩陣
ing=cell2mat(ingredient);

判斷矩陣

因為不同指標之間的含義不同,所以側(cè)重點也不同,所以一般是通過指標數(shù)值乘以權(quán)重再相加來區(qū)分重要性的,指標我們之前已經(jīng)統(tǒng)一在同一個數(shù)量級了,現(xiàn)在我們要求的就是權(quán)重了。

首先就要人為設(shè)定一個判斷矩陣,來表示指標之間的重要性,那么可以隨便設(shè)定嗎,這顯然是不可以的,但是為什么不可以呢,因為我們對指標的重要性進行兩兩比較構(gòu)造的判斷矩陣,這可能就會導(dǎo)致出現(xiàn)不一致的情況,所以矩陣是否滿足要求,就是要看他是否可以通過一致性檢驗。

一致性檢驗

計算一致性比例CR,CR=CI/RI,其中CI=(λmax-n)/(n-1),λmax為判斷矩陣的最大特征值,n為指標數(shù)(判斷矩陣行數(shù)),RI為平均隨機一致性指標,通過查表可得到不同n對應(yīng)的RI。

如果一致性比例CR=0,說明判斷矩陣是一致矩陣,不會出現(xiàn)任何矛盾的情況。

如果一致性比例CR<0.1,可以認為判斷矩陣一致舉證的“差異”不大,通過一致性檢驗。

如果一致性比例CR>=0.1,需要修改判斷矩陣,直到CR<0.1。

這個當時的話我一直不知道RI是什么意思,查表?到哪里查表,后面發(fā)現(xiàn)這個就是一個固定的東西。

RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49];

然后對于判斷矩陣的話,當時我們選了九個指標吧,可以想象當時的難度多大,不過還好通過一些特殊手段是直接得到了一個判斷矩陣。缺點就是忽略的重要性那個東西,就是求出這個判斷矩陣,通過判斷矩陣來得到他們之間的重要性,調(diào)節(jié)指標在程序中的位置。

A=[1  3/2  3/4  1/5  1/4  3/2  2    3/4  1
  2/3 1    1/2  1/4  1/6  1    3/2  1    1/2
  4/3 2    1    1/3  1/2  2    3/2  1    3/2
  5   4    3    1    2    4    5    2    4
  4   6    2    1/2  1    3    4    2    5
  2/3 1    1/2  1/4  1/3  1    3/2  1    1/2
  1/2 2/3  2/3  1/5  1/4  2/3  1    1/3  2/3
  4/3 1    1    1/2  1/2  2    3/2  1    3/2
  1   2    2/3  1/4  1/5  2    3/2  2/3  1];

那么怎么判斷他對不對呢,就是要看一致性檢驗了。不得不說MATLAB是真的方便,最大特征值就求出來了。

A=[1  3/2  3/4  1/5  1/4  3/2  2    3/4  1
  2/3 1    1/2  1/4  1/6  1    3/2  1    1/2
  4/3 2    1    1/3  1/2  2    3/2  1    3/2
  5   4    3    1    2    4    5    2    4
  4   6    2    1/2  1    3    4    2    5
  2/3 1    1/2  1/4  1/3  1    3/2  1    1/2
  1/2 2/3  2/3  1/5  1/4  2/3  1    1/3  2/3
  4/3 1    1    1/2  1/2  2    3/2  1    3/2
  1   2    2/3  1/4  1/5  2    3/2  2/3  1];

%一致性檢驗
%求矩陣特征值
maxlam=max(eig(A));
[~,n]=size(A);

RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49];

CI=(maxlam-n)/(n-1);
CR=CI/RI(n);

if CR<0.10
    disp("通過一致性檢測")
else
    disp("沒有通過一致性檢測")
    return %終止運行
end

層次分析法(MATLAB),matlab,開發(fā)語言,數(shù)學(xué)建模

?算術(shù)平均法求權(quán)重

這個我最終就是要求權(quán)重,那么每一個指標對應(yīng)的權(quán)重怎么求呢?這里是通過算術(shù)平均法來求解的。

  • 將通過一致性檢驗的判斷矩陣按列歸一化
  • 每一列分別求和,求和的結(jié)果除以n,得到列向量就是權(quán)重向量。
%算數(shù)平均法求權(quán)重
[n,~]=size(A);
Asum=sum(A,1);%按列求和
Aprogress=A./(ones(n,1)*Asum);

%求權(quán)重向量
W=sum(Aprogress,2)./n;

這里要注意的就是sum函數(shù),sum(A,1)是按列求和,sum(Aprogress,2)是按行求和的。默認是按列求和的。

matlab中sum函數(shù)的用法_matlab sum函數(shù)_一只佳佳怪的博客-CSDN博客https://blog.csdn.net/iii66yy/article/details/128474643

層次分析法(MATLAB),matlab,開發(fā)語言,數(shù)學(xué)建模

加權(quán)求和

最后就是對所有的指標進行加權(quán)求和了,得到最后的總評分。

gred=ing*W;

層次分析法(MATLAB),matlab,開發(fā)語言,數(shù)學(xué)建模

?當時我們是14個人,選了9個指標吧,也不知道是不是這樣寫的,最后就得到了這最后的一組數(shù)據(jù),就是他們14個人的綜合打分了,數(shù)值越大的就越優(yōu)秀了。

過程體會

不太知道是否正確,就記錄了整個的過程,下面是我自己對問題的理解:

為什么要對原始的指標進行歸一化處理?

因為不同指標之間的數(shù)量級不同。

為什么要設(shè)定判斷矩陣?

因為不同指標之間的側(cè)重不同,假設(shè)指標A比指標B更加能夠說明問題,那指標A肯定就比指標B更加重要一些。整個的設(shè)定過程本身就是主觀的,好比一道菜肴,有人認為營養(yǎng)更加重要,也有人認為味道更加重要,所以這個設(shè)定就是看個人的傾向,能通過一致性檢驗的矩陣就是滿足的矩陣。

為什么要用算術(shù)平均法求權(quán)重?

這個的話應(yīng)該還有其他的方法,這里用的是算術(shù)平均分求的,先對判斷矩陣進行歸一化之后,就算術(shù)平均得到權(quán)重,當做整個指標的權(quán)重了。最后剛好行列向量相乘,得到最終的得分矩陣。文章來源地址http://www.zghlxwxcb.cn/news/detail-530649.html

到了這里,關(guān)于層次分析法(MATLAB)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包