1 % % X 數據矩陣 2 % % n 數據矩陣行數即評價對象數目 3 % % m 數據矩陣列數即經濟指標數目 4 % % B 乘以熵權的數據矩陣 5 % % Dist_max D+ 與最大值的距離向量 6 % % Dist_min D- 與最小值的距離向量 7 % % e 熵值列表 8 % % d 信息熵冗余度 9 % % w 權值表 10 % % stand_S 歸一化矩陣 11 % % sorted_S 按照降序排列的數據矩陣 12 13 %% 第一步:把數據復制到工作區,並將這個矩陣命名為X 14 clear;clc 15 load jingjizhibiao.mat; 16 17 [n,m] = size(X); 18 disp(['共有' num2str(n) '個地區, ' num2str(m) '個經濟指標']) ; 19 20 21 %% 第二步:熵權法賦權 22 %%計算第j個指標下,第i個樣本占該指標的比重p(i,j) 23 for i=1:n 24 for j=1:m 25 p(i,j)=X(i,j)/sum(X(:,j)); 26 end 27 end 28 %%計算第j個指標的熵值e(j) 29 k=1/log(n); 30 for j=1:m 31 e(j)=-k*sum(p(:,j).*log(p(:,j))); 32 end 33 d=ones(1,m)-e; %計算信息熵冗余度 34 w=d./sum(d); %求權值w 35 disp('最后的權重為 ; w =') 36 w 37 B=X.* repmat(w,n,1);%%每個元數據乘以對應指標的熵權值, 38 39 disp('加入熵權的矩陣 B = '); 40 disp(B); 41 42 clear i j;%%釋放無關變量 43 % % Z = B ./ repmat(sum(B.*B) .^ 0.5, n, 1); 44 % % disp('標准化矩陣 Z = ') 45 % % disp(Z) 46 47 %% 第三步 計算與最大值的距離和最小值的距離,並算出得分,(topsis分析) 48 49 Dist_max = sum([(B - repmat(max(B),n,1)) .^ 2 ],2) .^ 0.5; % D+ 與最大值的距離向量 50 Dist_min = sum([(B - repmat(min(B),n,1)) .^ 2 ],2) .^ 0.5; % D- 與最小值的距離向量 51 disp('D + 為') 52 Dist_max 53 54 disp('D - 為') 55 Dist_min 56 57 S = Dist_min ./ (Dist_max+Dist_min); % 未歸一化的得分 58 disp('最后的得分為:') 59 stand_S = S / sum(S) 60 [sorted_S,index] = sort(stand_S ,'descend')
matlab