关联矩阵古林法的matlab代码,[转载][原创]灰色关联分析及Matlab程序实现
灰色系統理論由我國著名學者鄧聚龍教授于1982提出?;疑P聯分析是灰色系統理論的一個分支,應用灰色關聯分析方法對受多種因素影響的事物和現象從整體觀念出發進行綜合評價是一個被廣為接受的方法。
一、灰色關聯分析法的建模過程
灰色關聯分析法的基本思想是根據各比較數列集構成的曲線族與參考數列構成的曲線之間的幾何相似程度來確定比較數列集與參考數列之間的關聯度,比較數列構成的曲線與參考數列構成的曲線的兒何形狀越相似,其關聯度越大。
參考數據列應該是一個理想的比較標準,可以以各指標的最優值 (或最劣值)構成參考數據列,也可根據評價目的選擇其它參照值。例如,在某多屬性綜合評價問題中,可將各屬性的最優值組成一個參考數列,各個評價方案(對象)構成比較數列集,若關聯度越大,該方案(對象)越優,反之越劣。利用灰色關聯分析進行綜合評價的步驟如下。
1、根據評價目的確定評價指標體系,收集評價數據,確定原始評價矩陣及參考數列。
2、對指標數據進行標準化處理,并記標準化處理后的數據序列為:
對于不同的指標類型(如正向型、逆向型、最優值為給定區間的指標,等等),應采取不同的標準化處理策略。常用的幾種標準化處理的方法見http://blog.sina.com.cn/s/blog_b3509cfd0101bsky.html,這里不贅述。
3、對標準化處理的數據序列,逐個計算每個被評價對象指標序列(比較序列)與參考數列對應元素的絕對差值,即:
4、確定
與
。
5、計算每個比較序列與參考數列對應元素的關聯系數:
6、計算關聯度。
7、依據各觀察對象的關聯度,得出綜合評價結果。如果參考數列由各指標的最優值組成,則關聯度越大,該評價對象與理想的比較標準越相似,評價結果越優,反之越劣。
二、灰色關聯分析法的Matlab程序實現
首先聲明:不失一般性,以下程序假設所有指標均為正向型指標(越大越好)進行標準化處理,在實際應用中需根據具體情況對不同類型的指標進行標準化處理。另外,這里采用熵權法求客觀權重,詳見:http://blog.sina.com.cn/s/blog_b3509cfd0101bm0f.html。另外,注意程序注釋。
--------------------------------------------以下是程序代碼-------------------------------------
function GreyRelationDegree(stats) %%
stats是一個m×n的評價矩陣,即m個評價對象、n個評價指標
%% [重要]設置參考數列,即各指標的理想最優值組成的行向量,長度必需要與stats列數一致
optArray=max(stats,[],1);
% 這里設置假設所有指標均為正向型指標,各指標的最大值組成參考數列,在實際應用中根據具體情況進行設置
%% 原始評價矩陣及樣本序號
[r,c]=size(stats);
% stats的行數和列數,即評價對象的個數及評價指標的個數
samNo=1:r;
% 樣本序號
%% 數據規范化處理,將各指標數據與參考數列一起規范化到0-1之間
% 這里假設全為正向指標,即假設全部指標值越大越好,在實際應用中根據具體情況分別需對不同類型的指標數據進行標準化處理,然后再這里修改相應的代碼
stdMatrix=zeros(r+1,c); % 給標準化矩陣分配空間,第一行為參考數列的標準化值,第二行至最后一行為原始評價矩陣的標準化值
optArryAndStat=[optArray;stats];
maxOfCols=max(optArryAndStat);
% 包括參考數列在內的各列的最大值
minOfCols=min(optArryAndStat);
% 包括參考數列在內的各列的最小值
for j=1:c
for i=1:r+1
stdMatrix(i,j)=(optArryAndStat(i,j)-minOfCols(j))./(maxOfCols(j)-minOfCols(j));
% 計算標準化指標值
end
end
%% 計算關聯系數
absValue=zeros(r,c);
% 給絕對差值序列分配空間
R_0 = stdMatrix(1,:); % 標準化處理后的參考數列
for i=2:r+1
absValue(i-1,:)=abs(stdMatrix(i,:)-R_0); % 絕對差值序列計算
end
minAbsValueOfCols=min(absValue,[],1);
% absValue每一列的最小值
maxAbsValueOfCols=max(absValue,[],1);
% absValue每一列的最大值
minAbsValue=min(minAbsValueOfCols);
% absValue的最小值
maxAbsValue=max(maxAbsValueOfCols);
% absValue的最大值
defCoeff=0.5;
% 設置分辨系數為0.5
relCoeff=(minAbsValue+defCoeff*maxAbsValue)./(absValue+defCoeff*maxAbsValue);
% 關聯系數計算
%% 計算關聯度
% 在實際應用中可采用不同的方法確定權重,然后再這里修改相應的代碼
weights=EntropyWeight(stdMatrix(2:r,:)); % 權重
P=zeros(r,1);
% 給關聯度序列分配空間
for i=1:r
for j=1:c
P(i,1)=relCoeff(i,j)*weights(j); % 關聯度計算
end
end
%% 權重可視化
[sortW,IXW]=sort(weights,'descend');
% 權重降序排序,IXW確保對應的指標名稱一致
indexes={};
for i=1:c
indexes(i)={strcat('指標',num2str(i))}; % 指標名稱為“指標1”、指標“2”……
end
sortIndex=indexes(IXW);
% 排序后與權重對應的指標名稱
figure;
subplot(1,2,1);
bar(weights);
xlim([0 c+1]);
% 設置x軸范圍
xlabel('指標名稱','FontSize',12,'FontWeight','bold');
set(gca,'xtick',1:c);
set(gca,'XTickLabel',indexes,'FontWeight','light');
ylabel('權重','FontSize',12,'FontWeight','bold');
set(gca,'YGrid','on');
for i=1:c
text(i-0.35,weights(i)+0.005,sprintf('%.3f',weights(i)));
end
title('指標權重可視化');
box off;
subplot(1,2,2);
bar(sortW);
xlim([0 c+1]);
% 設置x軸范圍
xlabel('指標名稱','FontSize',12,'FontWeight','bold');
set(gca,'xtick',1:c);
set(gca,'XTickLabel',sortIndex,'FontWeight','light');
ylabel('權重','FontSize',12,'FontWeight','bold');
set(gca,'YGrid','on');
for i=1:c
text(i-0.35,sortW(i)+0.005,sprintf('%.3f',sortW(i)));
end
title('指標權重可視化(降序排列)');
box off;
%% 關聯度分析結果展示
[sortP,IX]=sort(P,'descend'); % 關聯度降序排序,IX確保對應的樣本序號一致
sortSamNo=samNo(IX);
% 排序后與關聯度對應的樣本序號
figure;
subplot(2,1,1);
plot(P,'--rs',...
'LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10);
xlim([1 r]);
% 設置x軸范圍
xlabel('樣本序號','FontSize',12,'FontWeight','bold');
set(gca,'xtick',1:r);
set(gca,'XTickLabel',samNo,'FontWeight','light');
ylabel('關聯度','FontSize',12,'FontWeight','bold');
title('XXX事物灰色關聯度綜合評價結果');
grid on;
subplot(2,1,2);
plot(sortP,'--rs',...
'LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10);
xlim([1 r]);
% 設置x軸范圍
xlabel('樣本序號','FontSize',10,'FontWeight','bold');
set(gca,'xtick',1:r);
set(gca,'XTickLabel',sortSamNo,'FontWeight','light');
ylabel('關聯度','FontSize',10,'FontWeight','bold');
title('XXX事物灰色關聯度綜合評價結果(降序排列)');
grid on;
hold off;
end
三、程序演示
1、隨機生成一個20×5的評價矩陣,即20個評價對象、5個評價指標,matlab命令窗口中輸入:test=80+12*randn(20,8);
2、調用灰色關聯度函數,命令窗口中輸入:GreyRelationDegree(test)
3、程序運行結果如下:
四、參考文獻
[1] 劉思峰,黨耀國,等. 灰色系統理論及其應用(第5版) [M]. 北京:科學出版社:2010.
[2] 穆瑞,張家泰. 基于灰色關聯分析的層次綜合評價[J]. 系統工程理論與實踐,2008,28(10):125-130.
總結
以上是生活随笔為你收集整理的关联矩阵古林法的matlab代码,[转载][原创]灰色关联分析及Matlab程序实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Studio 一些使用
- 下一篇: matlab入门之旅,MATLAB 入门