?? matlab 模糊綜合評判.txt
字號:
模糊綜合評判matlab源程序2008年07月20日 星期日 16:48
1.原理
模糊綜合評判方法即將評價目標看成是由多種因素組成的模糊集合(稱為因素集u),再設定這些因素所能選取的評審等級,組成評語的模糊集合(稱為評判集v),分別求出各單一因素對各個評審等級的歸屬程度(稱為模糊矩陣),然后根據各個因素在評價目標中的權重分配,通過計算(稱為模糊矩陣合成),求出評價的定量解值。它是應用模糊變換原理和最大隸屬度原則,對各因素作綜合評價的。其原理表示為:
B=E×R
式中E={e1,e2,... ,ei,...,em},為模糊向量或稱模糊變換器,是評價因素集X={ x1,x2, ,xi, ,xm }的權重分配。
式中R為評價因素X={ x1,x2, ...,xi, ...,xm }與評判集U={ u1,u2, ,ui, ,un }構成的模糊關系矩陣。
|R1| |r11 r12 ... r1m|
R=|R2|= |r21 r22 ... r2m|
| | | |
|Rn | |rn2 rn2 ... rnm|
其中n為評價集合的個數,m為評價因素(或評判指標)的個數。
2.程序算法
下面是采用環境中的常用的超標加權法計算權重,使用“線性降半階”函數計算隸屬度的matlab程序,供各位參考。
clear;clc;
a=[
48.37611111 26.33277778 819.1455556 334.5933333 1032.364444 262.3716667 2374.722222
15.84 6.430384615 981.3157692 756.1965385 991.7353846 82.82846154 2535.692308
70.7225 29.8525 895.5325 294.5875 1059.1875 462.9525 2724.5
]; %a為評價集標準值
d=[
43.49 28.05 737.98 391.12 1025.66 7.41 2134
2.61 1.82 920.75 636.41 1005.45 74.09 2330
28.66 8.51 774.99 322.78 1013.96 93.84 2001
3.01 1.95 897.53 614.44 889.87 123.27 2200
25.85 5.72 759.59 302.03 1001.96 76.15 1972
2 1.95 1161.68 1003.73 1077.06 110.1 3004
3.81 1.09 820.51 396.61 1004.74 37.04 2019
5.21 2.92 814.08 419.8 1005.8 31.49 2018
4.41 2.8 824.65 449.06 998.36 38.28 2047
3.01 1.58 1220.54 956.14 1244.75 3.91 3071
6.01 2.43 1791.61 2338.17 1278.08 30.87 4362
1.2 2.67 1160.54 821.29 1100.82 85.41 2942
6.61 7.3 865.57 389.31 1065.27 46.51 2244
9.82 3.77 1240.77 939.71 1165.24 177.19 3248
17.64 6.44 884.2 473.49 930.29 218.95 2417
26.65 7.9 839.5 474.71 941.99 184.18 2363
25.25 4.74 808.33 486.31 881.01 191.6 2217
25.45 6.93 852.01 478.37 966.45 182.54 2339
35.27 18.48 785.11 331.32 979.57 4.04 2245
2.81 2.31 1601.02 2533.55 486.73 2.47 3801
4.21 4.86 1815.52 2584.68 963.61 0 4399
15.23 5.35 813.85 787.16 688.79 205.18 2093
67.01 36.65 864.23 357.76 1035.8 426.31 2609
84.65 34.24 892.72 381.19 1060 466.64 2731
15.43 21.52 898.68 88.47 1061.46 414.48 2483
115.8 27 926.5 350.93 1079.49 544.38 3075
]; %b為待判樣品值
[m,n]=size(a);
[x,y]=size(d);
TheResultMoHu=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for s=1:x
for p=1:n
b(p)=d(s,p);
end
for i=1:n %計算每一個列的平均值
ColAverage(i)=0;
for j=1:m
ColAverage(i)=ColAverage(i)+a(j,i);
end
ColAverage(i)=ColAverage(i)/m;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ETotal = 0; %超標加權法計算權重
for j = 1: n
ETotal = ETotal + (b(j) / ColAverage(j));
end
for i = 1: n
EResult(i) = (b(i) / ColAverage(i)) / ETotal; %EResult為計算結果
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%使用隸屬函數,做預處理對每一列進行排序
SortedMatrix=a;
for j=1:n
for i=1:m
for k=i:m
if SortedMatrix(i,j)>SortedMatrix(k,j)
tmp=SortedMatrix(i,j);
SortedMatrix(i,j)=SortedMatrix(k,j);
SortedMatrix(k,j)=tmp;
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%計算單因素隸屬度
c=SortedMatrix;
for j = 1 : n
for i = 1 : m
for k = 1 : m
if a(i, j) == c(k, j)
if k == 1
if b(j) < c(k, j)
LSDResult(j, i) = 1;
end
if b(j) >= c(k, j) & b(j) < c(k + 1, j)
LSDResult(j, i) = ((c(k + 1, j) - b(j)) / (c(k + 1, j) - c(k, j)));
end
if b(j) >= c(k + 1, j)
LSDResult(j, i) = 0;
end
end
if k > 1 & k < m
if b(j) < c(k - 1, j)
LSDResult(j, i) = 0;
end
if b(j) >= c(k - 1, j) & b(j) < c(k, j)
LSDResult(j, i) = ((b(j) - c(k - 1, j)) / (c(k, j) - c(k - 1, j)));
end
if b(j) >= c(k, j) & b(j) < c(k + 1, j)
LSDResult(j, i) = ((c(k + 1, j) - b(j)) / (c(k + 1, j) - c(k, j)));
end
if b(j) >= c(k + 1, j)
LSDResult(j, i) = 0;
end
end
if k == m
if b(j) < c(k - 1, j)
LSDResult(j, i) = 0;
end
if b(j) >= c(k - 1, j) & b(j) < c(k, j)
LSDResult(j, i) = ((b(j) - c(k - 1, j)) / (c(k, j) - c(k - 1, j)));
end
if b(j) >= c(k, j)
LSDResult(j, i) = 1;
end
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%權重乘以單因素隸屬度得到最終結果
R=LSDResult;
E=EResult;
FuzzyEvalution=E*R;
TheResultMoHu=[TheResultMoHu;FuzzyEvalution];
end
TheResultMoHu
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -