2012年高教社杯全国大学生数学建模竞赛A题全国一等奖论文 下载本文

31.99 39.36 30.23 27.98 6346.83 2566.61 2380.81 1638.83 216.9 234.7 208.8 203.3 89.282 74.027 172.626 144.881 8.941 6.199 12.529 5.394 8.7937 4.4666 12.6821 6.8689 10.090 7.105 10.888 5.747 22.81 1409.70 194.6 49.643 42.74 851.17 195.7 58.469 29.67 1116.61 206.9 34.190

白葡萄

24.30 1279.30 199.9 45.03 1870.93 210.3 56.20 5022.14 214.9 34.87 2085.76 209.1 30.47 2658.04 219.6 25.15 1847.12 196.4 23.50 1721.58 174.4 41.17 1273.22 174.8 56.22 1927.42 228.9 32.88 2095.61 219.4 56.98 1566.97 188.8 47.39 1724.16 211.4 29.67 664.96 187.1 34.00 1542.17 201.1 22.03 2669.22 172.7 51.39 991.92 192.0 39.10 1167.29 194.2 22.80 1289.93 186.3 59.32 817.81 202.2 26.03 2045.24 220.7 30.73 1554.02 211.4 38.55 1457.67 209.1 45.71 1522.52 221.8 35.00 3068.34 231.1 45.00 2350.79 224.1 42.83 2073.33 226.4 52.59 2475.21 212.6 37.76 3785.57 226.6

2.2计算标准化矩阵

%cwstd.m,用总和标准化法标准化矩阵 functionstd=cwstd(vector)

cwsum=sum(vector,1);%对列求和

[a,b]=size(vector);%矩阵大小,a为行数,b为列数 fori=1:a

25

4.425 2.5789 3.889 2.7369 4.734 4.7758

1.264 0.3090 1.104 0.2154 1.820 0.3484 1.485 0.1119 1.537 0.3127 1.176 0.1757 1.202 0.3711 0.472 0.5844 1.287 0.1993 1.325 0.0324 1.276 0.1074 1.998 0.4335 1.356 0.5871 1.320 1.2058 1.807 0.3542 1.307 0.5635 1.269 0.1350 1.343 0.4211 1.343 0.0825 1.315 0.4259 1.029 0.3599 1.380 1.2596 1.114 0.1524 3.434 0.2662 1.459 0.2594 1.258 0.7478 2.539 0.1539 1.544 0.0838 5.406 3.615 5.961

1.620 1.233 2.009 2.017 1.595 1.289 1.374 1.513 1.844 2.058 1.415 2.307 1.515 1.320 2.530 1.279 1.549 1.330 1.963 2.676 1.204 1.897 1.330 4.473 1.505 1.569 3.375 2.029

forj=1:b

std(i,j)=vector(i,j)/cwsum(j) end end

2.3计算贡献率 %cwfac.m

functionresult=cwfac(vector); fprintf('相关系数矩阵:\\n')

std=CORRCOEF(vector)%计算相关系数矩阵 fprintf('特征向量(vec)及特征值(val):\\n')

[vec,val]=eig(std)%求特征值(val)及特征向量(vec) newval=diag(val);

[y,i]=sort(newval);%对特征根进行排序,y为排序结果,i为索引 fprintf('特征根排序:\\n') forz=1:length(y)

newy(z)=y(length(y)+1-z); end

fprintf('%g\\n',newy) rate=y/sum(y);

fprintf('\\n贡献率:\\n') newrate=newy/sum(newy) sumrate=0; newi=[];

fork=length(y):-1:1

sumrate=sumrate+rate(k); newi(length(y)+1-k)=i(k); ifsumrate>0.85break; end

end%记下累积贡献率大85%的特征值的序号放入newi中 fprintf('主成分数:%g\\n\\n',length(newi)); fprintf('主成分载荷:\\n') forp=1:length(newi) forq=1:length(y)

result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p)); end

end%计算载荷 disp(result)

2.4计算各成分的得分 %cwscore.m,计算得分

functionscore=cwscore(vector1,vector2); sco=vector1*vector2; csum=sum(sco,2);

26

[newcsum,i]=sort(-1*csum); [newi,j]=sort(i);

fprintf('计算得分:\\n') score=[sco,csum,j]

%得分矩阵:sco为各主成分得分;csum为综合得分;j为排序结果

2.5计算标准矩阵、贡献率、各成分得分之间的关系 %cwprint.m

functionprint=cwprint(filename,a,b);

%filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数) fid=fopen(filename,'r')

vector=fscanf(fid,'%g',[ab]); fprintf('标准化结果如下:\\n') v1=cwstd(vector) result=cwfac(v1); cwscore(v1,result); 运行结果如下:

>> cwprint('333.txt',7,27)

Warning: Function call cwprint invokes inexact match C:\\MATLAB7\\work\\cwprint.M. fid = 3

标准化结果如下:

Warning: Function call cwstd invokes inexact match C:\\MATLAB7\\work\\cwstd.M.

> In cwprint at 8 v1 =

0.0441 0.0315 0.0388 0.1434 0.0590 0.0249 0.0562 0.0503 0.0331 0.0392 0.0789 0.0565 0.0372 0.0565 0.0411 0.1304 0.0441 0.0555 0.0505 0.0535 0.0676 0.0326 0.0333 0.0348 0.0280 0.0354 0.0299 0.0330 0.0365 0.0286 0.0365 0.0424 0.0357 0.0510 0.0298 0.0302 0.0533 0.0422 0.0162 0.0346 0.0452 0.0375 0.0296 0.0371 0.0362 0.0214 0.0228 0.0186 0.0205 0.0399 0.0303 0.0388 0.0848 0.0599 0.0104 0.0613 0.0395 0.0351 0.0348 0.0846 0.0669 0.0394 0.0659 0.0310 0.0212 0.0310 0.0155 0.0257 0.0331 0.0284 0.0436 0.0366 0.0360 0.0027 0.0238 0.0039 0.0234 0.0349 0.0397 0.0447 0.0114 0.0285 0.0221 0.0329 0.0271 0.0220 0.0348 0.0230 0.0291 0.0137 0.0325 0.0410 0.0192 0.0332 0.0493 0.0296 0.0221 0.0310 0.0286 0.0338 0.0368 0.0186 0.0240 0.0091 0.0203 0.0477 0.0241 0.0352 0.0213 0.0239 0.0119 0.0246

27

0.0314 0.0266 0.0408 0.0209 0.0365 0.0168 0.0467 0.0322 0.0372 0.0388 0.0141 0.0257 0.0177 0.0227 0.0360 0.0383 0.0368 0.0407 0.0305 0.0921 0.0305 0.0462 0.0353 0.0358 0.0083 0.0287 0.0098 0.0299 0.0365 0.0985 0.0372 0.0314 0.0529 0.0897 0.0514 0.0449 0.0399 0.0402 0.0260 0.0366 0.0456 0.0362 0.0345 0.0370 0.0358 0.0607 0.0741 0.1294 0.0555 0.0319 0.0254 0.0348 0.0509 0.0319 0.0701 0.0293 0.0260 0.0219 0.0333 0.0174 0.0262 0.0263 0.0276 0.0488 0.0132 0.0335 0.0206 0.0230 0.0279 0.0184 0.0339 0.0173 0.0354 0.0120 0.0280 0.0487 0.0304

Warning: Function call cwfac invokes inexact match C:\\MATLAB7\\work\\cwfac.M.

> In cwprint at 9 相关系数矩阵: Warning: Function call CORRCOEF invokes inexact C:\\MATLAB7\\toolbox\\matlab\\datafun\\corrcoef.m.

> In cwfac at 4 In cwprint at 9 std =

1.0000 0.0600 0.0937 0.3306 0.2395 -0.0926 0.2384 0.0600 1.0000 0.5532 0.0807 0.3359 0.3342 0.4962 0.0937 0.5532 1.0000 0.1122 0.2366 0.0071 0.4104 0.3306 0.0807 0.1122 1.0000 0.7735 0.2004 0.7196 0.2395 0.3359 0.2366 0.7735 1.0000 0.4860 0.9210 -0.0926 0.3342 0.0071 0.2004 0.4860 1.0000 0.3312 0.2384 0.4962 0.4104 0.7196 0.9210 0.3312 1.0000 特征向量(vec)及特征值(val): vec =

0.0251 -0.0736 0.0888 0.7007 -0.5814 -0.3519 -0.1824 -0.1402 0.2946 -0.6067 0.2687 -0.0684 0.5887 -0.3192 -0.0408 0.0373 0.6322 -0.2315 -0.4326 0.5375 -0.2601 0.0365 0.7426 0.0338 -0.2778 -0.0261 -0.4343 -0.4239 -0.7046 -0.4051 -0.0096 -0.1127 0.1581 -0.1855 -0.5170 0.1681 0.1038 0.4235 0.4986 0.6664 0.1283 -0.2693 0.6723 -0.4243 -0.2093 -0.2119 -0.0184 -0.0344 -0.5270 val =

0.0372 0 0 0 0 0 0 0 0.1997 0 0 0 0 0 0 0 0.3535 0 0 0 0 0 0 0 0.6845 0 0 0 0 0 0 0 1.1402 0 0

28

match