灰色关联法 —— matlab
目錄
1.簡介
2.算法詳解
2.1 數據標準化
2.2?計算灰色相關系數
2.3 計算灰色關聯度系數?
3.實例分析
3.1 讀取數據
3.2 數據標準化
3.3?繪制 x1,x4,x5,x6,x7 的折線圖
3.4?計算灰色相關系數
完整代碼
1.簡介
????????對于兩個系統之間的因素,其隨時間或不同對象而變化的關聯性大小的量度,稱為關聯度。在系統發展過程中,若兩個因素變化的趨勢具有一致性,即同步變化程度較高,即可謂二者關聯程度較高;反之,則較低。因此,灰色關聯分析方法,是根據因素之間發展趨勢的相似或相異程度,亦即“灰色關聯度”,作為衡量因素間關聯程度的一種方法。
????????灰色關聯分析可以用于衡量因素相關程度的同時,也有論文將其用于綜合評價,其原理思想和TOPSIS法是比較相似的。?
2.算法詳解
2.1 數據標準化
?因為每個指標的數量級不一樣,需要把它們化到同一個范圍內再比較。標準化的方法比較多,這里僅用最大最小值標準化方法。
????????設標準化后的數據矩陣元素為rij,由上可得指標正向化后數據矩陣元素為?(Xij)'
2.2?計算灰色相關系數
我們常見的灰色相關系數表達式如下:
? ?Xo(k)為參考列,p為分辨系數。它的范圍為(0~1),它的作用為控制區分度,它的值越小,區分度越大,它的值越大,區分度越小。??常常取0.5。乍一看這個公式還是有些難懂,接下來詳細介紹一下它的原理。
2.3 計算灰色關聯度系數?
- 參考向量的選擇
????????例如研究x2指標與x1指標之間的灰色關聯度。所以將x1列作為參考向量,即要研究與誰的關系,就將誰作為參考。設參考向量為Y1=x1,生成新的數據矩陣 X1=x2.
- 生成絕對值矩陣?
設生成的絕對值矩陣為A
A=[X1-Y1],亦是A=[x2-x1]
設dmax為絕對值矩陣A的最大值,dmin為絕對值矩陣A的最小值。
-
計算灰色關聯矩陣
設灰色關聯矩陣為B
- 計算灰色關聯度
3.實例分析
其中指標,x1:貨物運輸量;x2:港口貨物吞吐量;x3:貨物周轉量;x4:GDP;x5:財政收入x6:城市居民人均可支配收入;x7:農村居民人均凈收入。現研究x4-x7指標與x1指標之間的灰色關聯度。數據表格如下:
| 年份 | x1 | x2 | x3 | x4 | x5 | x6 | x7 |
| 2007 | 22578 | 27569 | 4987 | 2567.7 | 267.98 | 1.5429 | 1.172 |
| 2008 | 25698 | 29484 | 5048 | 3131 | 348.51 | 1.8546 | 1.2514 |
| 2009 | 27896 | 31589 | 5129 | 3858.2 | 429.1 | 2.0369 | 1.0254 |
| 2010 | 29540 | 34894 | 5569 | 4417.7 | 541.29 | 2.2589 | 1.189 |
| 2011 | 31058 | 36478 | 5783 | 5158.1 | 647.25 | 2.4276 | 1.4213 |
| 2012 | 35980 | 38695 | 6045 | 6150.1 | 736.45 | 2.5678 | 1.5304 |
| 2013 | 39483 | 40746 | 6259 | 7002.8 | 850 | 2.8546 | 1.7421 |
3.1 讀取數據
data=xlsread('D:\桌面\huiseguanlian.xlsx')返回:
3.2 數據標準化
%數據標準化 data1=mapminmax(data',0.002,1) %標準化到0.002-1區間?返回:
3.3?繪制 x1,x4,x5,x6,x7 的折線圖
figure(1) t=[2007:2013]; plot(t,data1(:,1),'LineWidth',2) hold on for i=1:4plot(t,data1(:,3+i),'--')hold on end xlabel('year') legend('x1','x4','x5','x6','x7') title('灰色關聯分析')返回:
從圖中可以看出,這幾個指標的趨勢大致相同
3.4?計算灰色相關系數
3.4.1?得到其他列和參考列相等的絕對值
%得到其他列和參考列相等的絕對值 for i=4:7data1(:,i)=abs(data1(:,i)-data1(:,1)); end3.4.2?得到絕對值矩陣的全局最大值和最小值
%得到絕對值矩陣的全局最大值和最小值 data2=data1(:,4:7); d_max=max(max(data2)); d_min=min(min(data2));3.4.3 定義分辨系數
a=0.53.4.4 計算灰色關聯矩陣
data3=(d_min+a*d_max)./(data2+a*d_max); xishu=mean(data3); disp(' x4,x5,x6,x7 與 x1之間的灰色關聯度分別為:') disp(xishu)返回:
完整代碼
clc;clear; %讀取數據 data=xlsread('D:\桌面\huiseguanlian.xlsx'); %數據標準化 data1=mapminmax(data',0.002,1); %標準化到0.002-1區間 data1=data1'; %%繪制 x1,x4,x5,x6,x7 的折線圖 figure(1) t=[2007:2013]; plot(t,data1(:,1),'LineWidth',2) hold on for i=1:4plot(t,data1(:,3+i),'--')hold on end xlabel('year') legend('x1','x4','x5','x6','x7') title('灰色關聯分析')%%計算灰色相關系數 %得到其他列和參考列相等的絕對值 for i=4:7data1(:,i)=abs(data1(:,i)-data1(:,1)); end%得到絕對值矩陣的全局最大值和最小值 data2=data1(:,4:7); d_max=max(max(data2)); d_min=min(min(data2)); %灰色關聯矩陣 a=0.5; %分辨系數 data3=(d_min+a*d_max)./(data2+a*d_max); xishu=mean(data3); disp(' x4,x5,x6,x7 與 x1之間的灰色關聯度分別為:') disp(xishu)總結
以上是生活随笔為你收集整理的灰色关联法 —— matlab的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没有bug队——加贝——Python 练
- 下一篇: 层次分析法之matlab