├── README.md ├── quantification.m ├── ARMA.m ├── BP.m ├── ARMA.py ├── data_process.m ├── ranking.m ├── Cellular.m ├── Graph.txt └── Algorithm.txt /README.md: -------------------------------------------------------------------------------- 1 | # Mathematical-Modeling 2 | 2018年3月数学建模美赛代码,涉及到ARMA预测等。 3 | -------------------------------------------------------------------------------- /quantification.m: -------------------------------------------------------------------------------- 1 | function G = quantification(X) 2 | n = length(X) 3 | x_aver = sum(X)/n; 4 | a = []; 5 | b = []; 6 | for i = 1:n 7 | a(i) = (X(i)-x_aver)/(max(X)-min(X)); 8 | temp = [abs(X(i)-x_aver),X(i),x_aver]; 9 | b(i) = abs(X(i)-x_aver)/max(temp); 10 | G(i) = X(i)*b(i)/100 + a(i); 11 | end 12 | 13 | -------------------------------------------------------------------------------- /ARMA.m: -------------------------------------------------------------------------------- 1 | clear 2 | clc 3 | a = nonzeros([4.351 4.342 4.261 4.150 3.887 3.923 3.678 3.637 3.755 3.676 3.327 3.256 3.659 3.401 3.171 3.169 3.239 3.144 2.998]); 4 | r11=autocorr(a); 5 | r11' 6 | r12=parcorr(a); 7 | r12' 8 | da=diff(a); 9 | r21=autocorr(da); 10 | r21' 11 | r22=parcorr(da); 12 | r21' 13 | n=length(da); 14 | for i=0:3 15 | for j=0:3 16 | spec=garchset('R',i,'M',j,'Display','off'); 17 | [coeffX,errorsX,LLFX] = garchfit(spec,da); 18 | num=garchcount(coeffX); 19 | [aic,bic]=aicbic(LLFX,num,n); 20 | fprintf('R=%d,M=%d,AIC=%f,BIC=%f\n',i,j,aic,bic); 21 | end 22 | end 23 | r=input('???? R=');m=input('???? M='); 24 | spec2= garchset('R',r,'M',m,'Display','off'); 25 | [coeffX,errorsX,LLFX] = garchfit(spec2,da) 26 | [sigmaForecast,w_Forecast] = garchpred(coeffX,da,5) 27 | x_pred=a(end)+cumsum(w_Forecast) -------------------------------------------------------------------------------- /BP.m: -------------------------------------------------------------------------------- 1 | P = [ 2 | 2.0 1.9 5.1 3.2 0.9 0.9 8.9 4.1 8.0 5.1 7.1 8.2 3.2 3.5 1.0 2.0 6.0 5.1 5.1 5.1 5.1 1.0 7.0 3.2 1.9 1.9 7.1 11.0 5.1 11.0 8.9 2.0 3.2 1.9 0.0 1.9 1.9 1.9 7.1 7.1 7.1 5.1 5.1 7.1 ; 3 | 4.702 2.939 1.264 2.518 2.517 1.715 2.016 4.041 2.450 5.043 2.641 6.481 1.722 2.634 1.845 2.352 5.220 2.738 2.415 2.975 2.056 1.296 3.022 2.179 3.070 1.419 5.777 5.942 3.352 4.734 5.673 1.648 1.841 2.392 3.520 2.713 2.037 1.864 2.511 6.161 6.195 1.396 2.058 1.994 ; 4 | 4.395 1.837 0.912 5.603 1.952 6.271 1.348 1.703 2.384 6.214 1.862 3.650 0.807 0.809 1.714 4.181 4.357 0.344 0.747 1.010 0.390 0.984 5.497 2.138 6.492 1.629 3.294 6.427 3.115 5.566 3.115 0.983 1.433 3.322 1.127 1.696 1.625 1.938 1.988 3.935 3.904 1.757 1.949 1.766 ; 5 | 5.036 1.412 0.873 2.238 2.255 1.167 3.171 3.150 2.858 3.833 1.787 2.244 0.770 0.912 4.678 2.852 2.243 6.606 4.586 1.710 1.825 0.996 1.533 1.513 1.477 6.094 2.324 2.999 2.650 3.565 1.519 5.900 5.088 1.881 2.404 0.997 6.056 4.837 1.825 1.455 1.556 1.858 2.435 1.253 ; 6 | 7 7 2 7 2 4 4 5 5 5 7 9 2 2 2 4 7 2 2 5 2 4 7 4 4 5 9 9 7 7 9 2 2 4 2 4 2 4 9 9 9 7 7 9; 7 | 4 9 5 7 4 7 2 5 4 7 7 9 2 2 2 7 9 2 2 4 2 7 7 4 2 4 9 9 5 7 7 2 4 7 4 4 4 5 9 9 9 9 5 2; 8 | 10.32 207.65 162.95 43.85 16.39 31.57 16.58 48.65 31.77 46.44 127.54 66.90 78.74 5.13 8.73 80.28 60.60 55.57 48.46 92.70 20.67 185.99 144.34 17.80 9.51 21.20 65.64 323.13 55.91 24.13 36.29 27.58 39.58 32.28 37.20 40.61 35.28 95.69 1408.67 82.67 126.99 1324.17 31.19 0.42; 9 | 3.46 2.97 -0.14 3.13 -0.13 1.34 1.61 0.76 -0.19 3.33 2.47 3.32 -5.28 -1.42 -1.65 2.29 3.32 -4.77 -3.22 1.12 -4.01 -2.40 2.46 1.13 3.23 2.60 3.32 3.09 1.44 3.32 3.26 -5.51 -5.41 2.67 -0.15 -0.64 -0.29 3.24 2.57 3.32 3.32 2.07 3.02 3.02 ; 10 | 5.0 5.0 -5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 -5.0 -5.0 5.0 -5.0 -5.0 2.0 -5.0 -5.0 2.0 2.0 2.0 -5.0 5.0 5.0 5.0 5.0 5.0 -5.0 -5.0 -5.0 -5.0 -5.0 -5.0 -5.0 -5.0 2.0 -5.0 2.0 5.0 5.0 ; 11 | ]; 12 | T = [9.4 182 189 48 16 34 19 55 35 49 148 75.9 35 35 5.3 54 63.4 6.1 7.7 68 25 181 171 8.9 8.7 17.1 66 330 5.1 25 32 252 17 267 15.4 28.8 23.1 46.2 1302 99.9 128 260 60.6 2.3]; 13 | [p1,minp,maxp,t1,mint,maxt]=premnmx(P,T); 14 | net=newff(minmax(P),[6,1],{'tansig','tansig','purelin'},'trainlm'); 15 | net.trainParam.epochs = 5000; 16 | net.trainParam.goal=0.000000000000000000000000001; 17 | [net,tr]=train(net,p1,t1); 18 | net.iw{1,1} 19 | net.b{1} 20 | net.lw{2,1} 21 | net.b{2} 22 | net.numLayers -------------------------------------------------------------------------------- /ARMA.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import pandas as pd 3 | import numpy as np 4 | from scipy import stats 5 | import matplotlib.pyplot as plt 6 | import statsmodels.api as sm 7 | from statsmodels.graphics.api import qqplot 8 | from numpy.random import randn 9 | 10 | dta=[44.234 ,45.114 ,46.630 ,48.737 ,49.914 ,50.708 ,51.836 ,53.577 ,54.971 ,57.106 ,57.815 ,57.639 ,57.678 ,58.075 ,59.924 ,61.458 ,62.412 ,63.36259079,62.41079712,64.967 ,66.068 ,67.169 ]; 11 | 12 | dta=np.array(dta,dtype=np.float); 13 | 14 | dta=pd.Series(dta); 15 | dta.index = pd.Index(sm.tsa.datetools.dates_from_range('1996','2017')); 16 | dta.plot(figsize=(12,8)); 17 | #plt.show(); 18 | 19 | fig = plt.figure(figsize=(12,8)); 20 | ax1= fig.add_subplot(111); 21 | diff1 = dta.diff(1); 22 | diff1.plot(ax=ax1); 23 | 24 | #plt.show(); 25 | 26 | diff1= dta.diff(1); 27 | fig = plt.figure(figsize=(12,8)); 28 | ax1=fig.add_subplot(211); 29 | fig = sm.graphics.tsa.plot_acf(dta,lags=20,ax=ax1); 30 | ax2 = fig.add_subplot(212); 31 | fig = sm.graphics.tsa.plot_pacf(dta,lags=20,ax=ax2); 32 | #plt.show(); 33 | 34 | try: 35 | arma_mod00 = sm.tsa.ARMA(dta,(0,0)).fit(); 36 | except ValueError,e: 37 | print ("Error"); 38 | else: 39 | print(arma_mod00.aic); 40 | 41 | try: 42 | arma_mod01 = sm.tsa.ARMA(dta,(0,1)).fit(); 43 | except ValueError,e: 44 | print ("Error"); 45 | else: 46 | print(arma_mod01.aic); 47 | 48 | try: 49 | arma_mod02 = sm.tsa.ARMA(dta,(0,2)).fit(); 50 | except ValueError,e: 51 | print ("Error"); 52 | else: 53 | print(arma_mod02.aic); 54 | 55 | try: 56 | arma_mod10 = sm.tsa.ARMA(dta,(1,0)).fit(); 57 | except ValueError,e: 58 | print ("Error"); 59 | else: 60 | print(arma_mod10.aic); 61 | 62 | try: 63 | arma_mod11 = sm.tsa.ARMA(dta,(1,1)).fit(); 64 | except ValueError,e: 65 | print ("Error"); 66 | else: 67 | print(arma_mod11.aic); 68 | 69 | try: 70 | arma_mod12 = sm.tsa.ARMA(dta,(1,2)).fit(); 71 | except ValueError,e: 72 | print ("Error"); 73 | else: 74 | print(arma_mod12.aic); 75 | 76 | try: 77 | arma_mod20 = sm.tsa.ARMA(dta,(2,0)).fit(); 78 | except ValueError,e: 79 | print ("Error"); 80 | else: 81 | print(arma_mod20.aic); 82 | 83 | try: 84 | arma_mod21 = sm.tsa.ARMA(dta,(2,1)).fit(); 85 | except ValueError,e: 86 | print ("Error"); 87 | else: 88 | print(arma_mod21.aic); 89 | 90 | try: 91 | arma_mod22 = sm.tsa.ARMA(dta,(2,2)).fit(); 92 | except ValueError,e: 93 | print ("Error"); 94 | else: 95 | print(arma_mod22.aic); 96 | 97 | 98 | predict_dta = arma_mod10.predict('2017', '2020', dynamic=True); 99 | print(predict_dta); 100 | 101 | fig, ax = plt.subplots(figsize=(12, 8)); 102 | ax = dta.ix['1996':].plot(ax=ax); 103 | fig = arma_mod10.plot_predict('2017', '2020', dynamic=True, ax=ax, plot_insample=False); 104 | plt.show(); 105 | -------------------------------------------------------------------------------- /data_process.m: -------------------------------------------------------------------------------- 1 | Y=[ 2 | 9.241 ,13.282 ,29.995 ,29.425 ,17.098 ,12.334 ,21.230 ,1.140 ,10.250 ,55.441 ,49.001 ,71.483 ,58.203 ,58.203 ,59.127 ,82.053 ,16.348 ,65.774 ,2.012 ,3.236 ,28.594 ,14.758 ,69.448 ,72.842 ,58.030 ,22.059 ,25.195 ,4.385 ,3.765 ,55.476 ,68.692 ,31.332 ,16.931 ,59.503 ,38.534 ,66.831 ,34.324 ,23.608 ,55.476 ,16.671 ,20.498 ,11.541 ,57.106 ,7.122 3 | 10.573 ,14.985 ,36.515 ,30.900 ,11.334 ,14.414 ,29.835 ,1.470 ,9.479 ,65.660 ,40.249 ,80.917 ,57.541 ,57.541 ,59.067 ,94.228 ,16.348 ,66.204 ,2.131 ,4.423 ,37.135 ,15.655 ,79.421 ,75.965 ,46.046 ,22.693 ,42.606 ,7.159 ,7.835 ,57.127 ,78.670 ,39.409 ,17.629 ,78.210 ,39.274 ,73.939 ,40.513 ,26.166 ,59.215 ,22.688 ,23.948 ,17.911 ,58.075 ,11.901 4 | 9.671 ,16.321 ,61.112 ,31.679 ,7.132 ,25.125 ,34.594 ,1.813 ,8.709 ,65.607 ,49.280 ,90.307 ,56.878 ,56.878 ,56.477 ,86.664 ,19.288 ,63.096 ,3.790 ,6.427 ,27.605 ,31.725 ,88.857 ,78.653 ,48.475 ,24.475 ,65.958 ,7.282 ,10.079 ,64.390 ,89.072 ,53.279 ,18.326 ,78.210 ,41.098 ,82.917 ,46.700 ,29.941 ,65.474 ,30.478 ,39.390 ,25.535 ,63.36259079,13.441 5 | 9.582 ,16.321 ,63.066 ,36.229 ,7.163 ,28.144 ,36.922 ,1.864 ,7.938 ,61.874 ,50.605 ,90.307 ,56.713 ,56.713 ,56.477 ,85.796 ,19.797 ,62.496 ,3.721 ,6.131 ,26.074 ,30.845 ,87.941 ,80.394 ,46.040 ,26.375 ,71.881 ,7.281 ,9.899 ,66.456 ,89.670 ,55.657 ,21.847 ,78.210 ,41.716 ,73.939 ,48.247 ,26.166 ,68.266 ,28.836 ,43.392 ,26.875 ,63.36259079,13.455 6 | 10.489 ,18.185 ,56.610 ,30.679 ,12.528 ,22.647 ,24.259 ,1.963 ,10.440 ,70.732 ,28.349 ,85.440 ,56.547 ,56.547 ,58.569 ,95.660 ,21.266 ,70.540 ,1.348 ,6.589 ,35.473 ,26.693 ,95.251 ,82.997 ,45.327 ,25.539 ,66.109 ,7.063 ,7.554 ,62.378 ,92.203 ,25.025 ,17.931 ,89.078 ,39.534 ,84.842 ,46.474 ,30.567 ,65.539 ,10.671 ,37.959 ,26.244 ,64.967 ,9.061 7 | 10.541 ,18.899 ,58.920 ,35.307 ,12.965 ,23.482 ,25.472 ,2.046 ,10.571 ,72.088 ,30.296 ,86.458 ,56.382 ,56.382 ,58.574 ,97.019 ,23.581 ,71.615 ,1.450 ,6.922 ,36.061 ,27.677 ,97.820 ,85.603 ,44.394 ,26.006 ,69.457 ,7.809 ,7.835 ,62.949 ,94.410 ,25.691 ,17.105 ,95.101 ,36.274 ,86.904 ,47.408 ,31.353 ,66.44504005,10.988 ,39.781 ,27.389 ,66.068 ,9.416 8 | 10.644 ,20.325 ,63.540 ,31.700 ,12.786 ,25.152 ,27.899 ,2.212 ,10.832 ,74.801 ,34.189 ,88.496 ,56.050 ,56.050 ,58.584 ,99.738 ,20.911 ,73.765 ,1.653 ,7.587 ,37.237 ,29.644 ,102.959 ,90.815 ,42.527 ,26.940 ,76.153 ,9.302 ,10.333 ,64.092 ,98.824 ,27.022 ,19.376 ,107.146 ,39.274 ,91.029 ,49.275 ,32.926 ,68.25787311,11.624 ,43.425 ,29.679 ,68.269 ,10.127 9 | 10.700 ,26.745 ,84.329 ,33.568 ,2.787 ,32.667 ,42.251 ,2.962 ,10.110 ,87.006 ,56.172 ,97.664 ,54.560 ,54.560 ,58.631 ,111.971 ,26.252 ,83.440 ,2.694 ,10.580 ,42.527 ,38.497 ,126.082 ,114.266 ,34.128 ,31.142 ,106.285 ,11.542 ,11.177 ,69.235 ,118.687 ,70.691 ,21.124 ,96.917 ,39.274 ,109.591 ,57.675 ,40.003 ,76.416 ,36.627 ,59.824 ,39.984 ,78.176 ,13.326 10 | 11.415 ,33.164 ,107.428 ,35.228 ,19.281 ,41.017 ,26.653 ,3.794 ,10.253 ,100.569 ,53.218 ,106.832 ,52.904 ,52.904 ,58.678 ,125.564 ,32.483 ,94.190 ,2.565 ,13.906 ,48.405 ,48.334 ,151.774 ,124.689 ,24.795 ,35.811 ,139.765 ,14.528 ,7.835 ,74.949 ,140.757 ,31.017 ,23.221 ,191.463 ,50.348 ,128.153 ,67.009 ,47.080 ,85.47978717,13.848 ,78.044 ,51.434 ,88.082 ,14.748 11 | 11.724 ,40.297 ,130.526 ,37.304 ,-8.236 ,49.368 ,43.675 ,4.626 ,6.120 ,114.131 ,51.709 ,117.019 ,51.248 ,51.248 ,58.731 ,139.157 ,38.713 ,104.940 ,3.723 ,17.232 ,54.282 ,58.170 ,177.467 ,75.965 ,15.462 ,40.480 ,173.246 ,17.514 ,12.865 ,80.664 ,162.827 ,105.361 ,25.318 ,221.577 ,54.972 ,148.777 ,76.344 ,54.944 ,94.544 ,53.637 ,96.265 ,62.884 ,99.089 ,11.901 12 | 12.033 ,46.717 ,153.625 ,38.964 ,2.383 ,57.718 ,59.047 ,5.459 ,12.789 ,127.693 ,74.503 ,126.187 ,49.592 ,49.592 ,58.778 ,152.750 ,44.944 ,115.691 ,3.579 ,20.557 ,60.160 ,68.007 ,203.159 ,161.169 ,6.130 ,45.149 ,206.726 ,20.500 ,13.554 ,86.378 ,184.897 ,35.677 ,27.415 ,251.690 ,59.597 ,167.338 ,85.678 ,62.021 ,103.6081178,16.389 ,114.486 ,74.334 ,108.996 ,19.725 13 | 12.121 ,53.136 ,176.724 ,32.917 ,15.592 ,66.068 ,26.653 ,6.291 ,13.049 ,141.255 ,71.973 ,136.374 ,47.936 ,47.936 ,58.830 ,166.343 ,51.175 ,126.441 ,3.032 ,23.883 ,66.038 ,77.844 ,228.851 ,91.362 ,-3.203 ,49.818 ,240.206 ,23.486 ,14.554 ,92.093 ,206.968 ,140.031 ,18.326 ,103.432 ,64.222 ,187.962 ,95.012 ,69.885 ,112.672 ,70.647 ,132.706 ,85.784 ,120.003 ,13.916 14 | ]; 15 | for i=1:12 16 | X = Y(i,:) 17 | G(i,:) = quantification(X) 18 | end 19 | xlswrite('/Users/CheneyWu/Downloads/result.csv',G,'data1') -------------------------------------------------------------------------------- /ranking.m: -------------------------------------------------------------------------------- 1 | Y =[ 2 | 9200000,22747,264010,182000000,28600000,40542318.54,2000000,1139405.305,67499686.15,349804723.2,1404494000,1972287332,6957118229,1070615302,10074681106,25577000000,265882903.8,5520246121,218042,36900044.49,1369655659,9316764775,19500000,1512385256,30903834,335600,181187,2100000,6186464726,1019024,118088950,49400000,239000000,42857302.3,650640000,81628000,1933348460,7211777195,265882903.8,5321253863,671829366.3,14653524495,4370238.875 3 | -4800000,1297124,369671,284500000,400000,49157198.31,17088438.14,1990739.711,208410822.1,561846599.1,2512044100,2832316675,8911522147,1658023465,9195268869,31297000000,412169786.8,6137421707,22318,21238102.94,1133119333,13227092048,76000000,1855773289,65089100,82800,330461,34300000,8380491516,1464040,298569416,86197730,352000000,47457318.4,1526895361,152419000,278542963,7002485174,412169786.8,11065271082,1860070100,16834677241,8385816.874 4 | 4800000,55602.66695,77528539.28,327500000,400000,30432451.13,162112437.3,98066.46675,258580865.7,517719869.1,4566857589,3913990517,11805191192,1936791712,9873867731,38860000000,529353929,5387725755,2719346.667,77528539.28,1395327002,22566291057,145100000,2787187425,147894953.5,256193,77528539.28,20300000,11054891066,4514423091,560551643.3,103203800,394000000,125980953.7,2329270062,336283524.4,235141772.8,8697402739,529353929,21033078371,3903908830,17831143180,20488449.15 5 | 4800000,3211552.85,147498167,241500000,1000000,41349877.49,144049904,98066.46675,250794180.3,680328168.3,5922655347,3973566695,11633497768,1731992059,10420007243,41983000000,547026079.2,5178268489,1098666.333,77528539.28,1423860804,20546860818,237300000,3845419141,166057185,299541,147498167,10736427.23,12761325990,4473459917,525973319.7,175215100,400000000,110557408,2098996166,299512180.6,239769766.6,10687353375,547026079.2,22613800782,4848711889,20941598563,30127601.64 6 | 4800000,1171769,146182787.7,213800000,1400000,56844992.81,246868436.3,281372.3118,258155847.4,699908004.9,5250459024,3526073729,9869946161,1708385694,12939584312,39858000000,612611626,4319050930,2007390,77528539.28,1294968669,18697943375,132700000,4172708008,149088505,297732.75,146182787.7,15518213.62,14363469847,4518881898,467357889,243253434.4,382000000,72456488.63,2178066124,302156767.9,259558174.6,9761018928,612611626,22022366055,5009034407,17033762146,24374495.85 7 | 4800000,10.626703,144483967.3,187700000,1600000,73902813.79,152906916.1,1990739.711,252039513.1,820944287.6,5140803656,3346181892,9622203968,2011960630,11952636299,44392000000,546410232.4,4672532302,1402980,77528539.28,1343090048,19276153664,125300000,3115778852,126873674.7,280605,144483967.3,15518213.62,13167025206,4986909042,438586639.1,169600000,258000000,46324537.67,2057489641,323577217.7,276717752.8,10488719461,546410232.4,23979580208,5466041710,19671972628,46519737.98 8 | 4800000,55602.66695,91756553.58,294522261.9,2500000,95600829.85,242155647.1,775116.2393,323139980.9,781758092.8,5553086185,4534490565,13186882714,2499553468,12674560778,48362744589,649910099.7,7251701675,702059.0745,91756553.58,1695497044,24505552901,175080676.7,3482537296,175683579.3,311697.1083,91756553.58,24505042.68,14414416139,5135426429,572060457.9,203860043.7,429851879.7,78461962.81,2544338515,341669607.8,315276790.9,10404761762,646757440.9,25124130641,5175927353,22303867890,29153033.7 9 | 8408666.667,1455114.433,184725525.8,362051190.5,6100000,45524494.37,424657921.1,976835.5339,467892100,1043982557,7853591086,6141240834,17817348052,3513234391,15404957932,65243588745,890435055.8,9242859553,-20903.77448,119389493.3,2195104741,34544133720,263547293.2,4734558545,263223614.5,366102.1458,184725525.8,19836427.23,19664948732,6452018278,826105296.5,319336366.6,551392481.2,91391108.86,3573453704,487071747.2,33692669.99,13337902426,883877525.4,37241820779,7766518929,27961562233,42254535.03 10 | 12108666.67,1344935.75,231405532.8,437083333.3,10100000,33123235.09,627438225.5,1133728.319,628727788,1335343072,10409707643,7926518910,22962309538,4639546528,18438732548,84000082251,1157685007,11455257196,-824195.8289,150092759.8,2750224404,45698112409,361843533.8,6125693267,360490320.2,426552.1875,231405532.8,59136396.42,25498873835,7914898111,1108377339,447643391.9,686437594,105756826.7,4716915025,648629679.9,-279178575.4,16596947608,1147344286,50705920932,10644954014,34247889280,56811758.72 11 | 15808666.67,1187537.632,278085539.8,512115476.2,14100000,20721975.8,830218529.9,7118841.909,789563475.9,1626703587,12965824200,9711796987,28107271025,5765858664,21472507163,1.02757E+11,1424934958,13667654838,-1627487.883,180796026.2,3305344067,56852091097,460139774.4,7516827988,457757025.9,487002.2292,278085539.8,75433504.06,31332798938,9377777944,1390649382,575950417.3,821482706.8,120122544.5,5860376347,810187612.6,-592049820.8,19855992789,1410811046,64170021085,13523389099,40534216327,71368982.41 12 | 19508666.67,1077358.948,324765546.8,587147619,18100000,8320716.52,1032998834,1514753.653,950399163.8,1918064103,15521940757,11497075063,33252232512,6892170801,24506281778,1.21513E+11,1692184909,15880052480,-2430779.938,211499292.6,3860463729,68006069786,558436015,8907962709,555023731.6,547452.2708,324765546.8,91730611.7,37166724040,10840657777,1672921425,704257442.7,956527819.5,134488262.4,7003837668,971745545.3,-904921066.2,23115037971,1674277807,77634121237,16401824183,46820543374,85926206.1 13 | 22838666.67,982920.0772,366777553.1,654676547.6,21700000,-2840416.835,1215501108,1649233.183,1095151283,2180288567,17822445659,13103825332,37882697850,7905851724,27236678932,1.38394E+11,1932709865,17871210358,-3153742.787,239132232.3,4360071426,78044650606,646902631.6,10159983959,642563766.7,601857.3083,366777553.1,105990580.9,42417256633,12157249626,1926966264,819733765.6,1078068421,147417408.4,8032952857,1117147685,-1186505187,26048178634,1911397891,89751811375,18992415760,52478237716,99027707.43 14 | ]; 15 | X = Y; 16 | P = []; 17 | Y(1,:) 18 | for i = 1:12 19 | P(i,:) = sort(Y(i,:)) 20 | end 21 | for i=1:12 22 | for j = 1:43 23 | if X(i,j) <= P(i,10) 24 | X(i,j) = 2; 25 | elseif P(i,11)<=X(i,j)&&X(i,j)<=P(i,20) 26 | X(i,j) = 4; 27 | elseif P(i,21)<=X(i,j)&&X(i,j)<=P(i,25) 28 | X(i,j) = 5; 29 | elseif P(i,26)<=X(i,j)&&X(i,j)<=P(i,35) 30 | X(i,j) = 7; 31 | elseif P(i,36)<=X(i,j)&&X(i,j)<=P(i,43) 32 | X(i,j) = 9; 33 | else 34 | X(i,j) = 0; 35 | end 36 | end 37 | end 38 | xlswrite('/Users/CheneyWu/Downloads/result.csv',X,'data1') 39 | X -------------------------------------------------------------------------------- /Cellular.m: -------------------------------------------------------------------------------- 1 | clf 2 | %define the plot button 3 | plotbutton=uicontrol('style','pushbutton',... 4 | 'string','Run', ... 5 | 'fontsize',12, ... 6 | 'position',[100,400,50,20], ... 7 | 'callback', 'run=1;'); 8 | %define the stop button 9 | erasebutton=uicontrol('style','pushbutton',... 10 | 'string','Stop', ... 11 | 'fontsize',12, ... 12 | 'position',[200,400,50,20], ... 13 | 'callback','freeze=1;'); 14 | %define the Quit button 15 | quitbutton=uicontrol('style','pushbutton',... 16 | 'string','Quit', ... 17 | 'fontsize',12, ... 18 | 'position',[300,400,50,20], ... 19 | 'callback','stop=1;close;'); 20 | number = uicontrol('style','text', ... 21 | 'string','1', ... 22 | 'fontsize',12, ... 23 | 'position',[20,400,50,20]); 24 | 25 | n = 128; 26 | z = zeros(n,n); 27 | cell = z; 28 | count = z; 29 | cell = rand(n,n); 30 | for i = 1:n; 31 | for j = 1:n; 32 | if cell(i,j) <= 0.9 33 | cell(i,j) = 0; 34 | else 35 | cell(i,j) = 1; 36 | end 37 | end 38 | end 39 | 40 | cell(23:28,1:80) = 1; 41 | cell(45:128,59:64) = 1; 42 | 43 | %???????? 44 | imh = image(cat(3,cell,z,z)); 45 | set(imh, 'erasemode', 'none') 46 | axis equal 47 | axis tight 48 | 49 | num = 0; 50 | X = []; 51 | Y = []; 52 | for x = 1:n 53 | for y = 1:n 54 | if ((23<=x&&x<=28&&1<=y&&y<=80) || (45<=x&&x<=128&&59<=y&&y<=64)) 55 | continue; 56 | elseif cell(x,y)==1 57 | num = num + 1; 58 | X(num) = x; 59 | Y(num) = y; 60 | end 61 | end 62 | end 63 | r = []; 64 | max = 1; 65 | rmax = 1; 66 | %=========== ?????? =============== 67 | stop= 0; 68 | run = 0; 69 | freeze = 0; 70 | while (stop == 0) 71 | while (run == 1) 72 | % =========== ?????? =============== 73 | for i = 1:50 74 | for k = 1:num 75 | for d = 1:4 76 | r(d) = Pr(X(k),Y(k),d,66,66); 77 | if r(d)>rmax 78 | rmax = r(d); 79 | max = d; 80 | end 81 | end 82 | switch(max) 83 | case 1 84 | if cell(X(k),Y(k)+1) == 1 85 | cell(X(k),Y(k)) = 1; 86 | elseif cell(X(k),Y(k)+1) == 0 87 | cell(X(k),Y(k)) = 0; 88 | cell(X(k),Y(k)+1) = 1; 89 | Y(k) = Y(k)+1; 90 | end 91 | case 2 92 | if cell(X(k)+1,Y(k)) == 1 93 | cell(X(k),Y(k)) = 1; 94 | elseif cell(X(k)+1,Y(k)) == 0 95 | cell(X(k),Y(k)) = 0; 96 | cell(X(k)+1,Y(k)) = 1; 97 | X(k) = X(k)+1; 98 | end 99 | case 3 100 | if cell(X(k),Y(k)-1) == 1 101 | cell(X(k),Y(k)) = 1; 102 | elseif cell(X(k),Y(k)-1) == 0 103 | cell(X(k),Y(k)) = 0; 104 | cell(X(k),Y(k)-1) = 1; 105 | Y(k) = Y(k)-1; 106 | end 107 | case 4 108 | if cell(X(k)-1,Y(k)) == 1 109 | cell(X(k),Y(k)) = 1; 110 | elseif cell(X(k)-1,Y(k)) == 0 111 | cell(X(k),Y(k)) = 0; 112 | cell(X(k)-1,Y(k)) = 1; 113 | X(k) = X(k)-1; 114 | end 115 | end 116 | end 117 | for x = 1:n 118 | for y = 1:n 119 | if cell(x,y)==1 120 | if ((23<=x<=28&&1<=y<=80) || (45<=x<=128&&59<=y<=64)) 121 | continue; 122 | end 123 | count(x,y) = count(x,y) + 1; 124 | end 125 | end 126 | end 127 | set(imh, 'cdata', cat(3,cell,z,z)); 128 | end 129 | 130 | % ============ ???? =============== 131 | for k = 1:num 132 | for d = 1:4 133 | r(d) = (Pr(X(k),Y(k),d,66,66) + Pc(X(k),Y(k),d,count))/2; 134 | end 135 | for d = 1:4 136 | if r(d)>rmax 137 | rmax = r(d); 138 | max = d; 139 | end 140 | end 141 | switch(max) 142 | case 1 143 | if cell(X(k),Y(k)+1) == 1 144 | cell(X(k),Y(k)) = 1; 145 | elseif cell(X(k),Y(k)+1) == 0 146 | cell(X(k),Y(k)) = 0; 147 | cell(X(k),Y(k)+1) = 1; 148 | Y(k) = Y(k)+1; 149 | end 150 | case 2 151 | if cell(X(k)+1,Y(k)) == 1 152 | cell(X(k),Y(k)) = 1; 153 | elseif cell(X(k)+1,Y(k)) == 0 154 | cell(X(k),Y(k)) = 0; 155 | cell(X(k)+1,Y(k)) = 1; 156 | X(k) = X(k)+1; 157 | end 158 | case 3 159 | if cell(X(k),Y(k)-1) == 1 160 | cell(X(k),Y(k)) = 1; 161 | elseif cell(X(k),Y(k)-1) == 0 162 | cell(X(k),Y(k)) = 0; 163 | cell(X(k),Y(k)-1) = 1; 164 | Y(k) = Y(k)-1; 165 | end 166 | case 4 167 | if cell(X(k)-1,Y(k)) == 1 168 | cell(X(k),Y(k)) = 1; 169 | elseif cell(X(k)-1,Y(k)) == 0 170 | cell(X(k),Y(k)) = 0; 171 | cell(X(k)-1,Y(k)) = 1; 172 | X(k) = X(k)-1; 173 | end 174 | end 175 | end 176 | for x = 1:n 177 | for y = 1:n 178 | if cell(x,y)==1 179 | if ((23<=x&&x<=28&&1<=y&&y<=80) || (45<=x&&x<=128&&59<=y&&y<=64)) 180 | continue; 181 | end 182 | count(x,y) = count(x,y) + 1; 183 | end 184 | end 185 | end 186 | set(imh, 'cdata', cat(3,cell,z,z)); 187 | %????? 188 | stepnumber = 1 + str2double(get(number,'string')); 189 | set(number,'string',num2str(stepnumber)); 190 | end 191 | if (freeze==1) 192 | run = 0; 193 | freeze = 0; 194 | end 195 | drawnow 196 | end -------------------------------------------------------------------------------- /Graph.txt: -------------------------------------------------------------------------------- 1 | % 从excel中读入数据到命令行 2 | [number,txt,raw]=xlsread('test.xlsx') 3 | 4 | % 看矩阵分布 5 | spy(S) 6 | spy(S,'*',16) %用符号*、字号16看矩阵分布 7 | 8 | % X,Y为同维向量时,绘制以X、Y元素为横,纵坐标的一条线;X为列向量,Y为矩阵时,按Y列绘制多条不同颜色的曲线,X为这些曲线共同的横坐标 9 | plot(X,Y) 10 | plot(X,Y,LineSpec) %参数LineSpec用于指出线条的类型,标记符号和颜色 11 | plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2...) %当Xi和Yi成对出现时,将分别按顺序取两数据Xi和Yi进行画图 12 | plot(..., ‘PropertyName’,PropertyValue,...)%对图形对象中指定的属性进行设置 13 | % Example 1 14 | x=0:0.1:2; 15 | y=1+exp(x); 16 | plot(x,y, '-+b') 17 | % Example 2 18 | t=[-pi:pi/100:2*pi]'; %t是列向量 19 | k=[1:6]; 20 | y=sin(t)*k; %y是矩阵 21 | plot(t,y) 22 | 23 | % plot矩阵绘图,直接将矩阵的数据绘制在图形窗体中,此时plot函数将矩阵的每一列数据作为一条曲线绘制在窗体中 24 | % Example 25 | A=pascal(5); 26 | plot(A) 27 | 28 | % 给x、y轴添加标签 29 | xlabel('string1'); 30 | ylabel('string2'); 31 | % 给图像命名 32 | title('string3'); 33 | % 右上角用来标识指明变量 34 | legend('string1','string2',...) 35 | % Example 36 | t=0:pi/100:pi; 37 | y1=sin(t); 38 | y2=sin(-t); 39 | y3=sin(t).*sin(5*t); 40 | plot(t,y1, '-.r',t,y2, '-.k',t,y3, '-bo'); 41 | xlabel('时间'); 42 | ylabel('幅度'); 43 | title('波形及包络线'); 44 | legend('y=sint', 'y=-sint', 'y=sinsin5t') 45 | 46 | %清除所有当前图像窗口 47 | clf 48 | 49 | % 叠加绘图 50 | hold on %保留当前图像与当前坐标轴的属性值,使用后面的图形命令只能在当前存在的坐标轴中增加图形 51 | hold off %在绘制新图形之前,重新设置坐标轴的属性为默认值,关闭hold on功能 52 | hold %在on和off之间切换,即在增加图形和覆盖图形之间切换 53 | hold all %保留当前颜色和线型,在绘制随后的图形时使用当前颜色和线型 54 | % Example 55 | x=linspace(0,2*pi,60); 56 | y=sin(x); 57 | plot(x,y,'b'); 58 | xlabel('自变量'),ylabel('因变量'); 59 | hold on; 60 | z=0.5*sin(x); 61 | plot(x,z,'k:'); 62 | legend('y=sin(x)','z=0.5*sin(x)'); 63 | hold off 64 | 65 | % 在同一图形框内布置几幅独立的子图 66 | subplot(m,n,k) %将一个图形窗口分成m*n个小窗口(子图),k是子图的编号。序号原则是:左上方的为第一幅,然后向右、向下依次排好 67 | subplot('Position',[left bottom width height]) %在由4个元素指定的位置上创建坐标轴 68 | % Example 69 | x=-4:0.1:4; 70 | subplot(2,2,1); 71 | y1=1/sqrt(2*pi)*exp(-1/2*x.^2),plot(x,y1); 72 | xlabel('变量x'),ylabel('变量密度y'),title('正态分布N(0,1)'); 73 | subplot(2,2,2); 74 | y2=1/sqrt(2*pi)/2*exp(-1/2/4*x.^2),plot(x,y2); 75 | xlabel('变量x'),ylabel('概率密度y'); 76 | title('正太分布N(0,4)'); 77 | subplot(2,2,3); 78 | y3=1/sqrt(2*pi)/0.5*exp(-1/2/(0.5^2)*(x-1).^2),plot(x,y3); 79 | xlabel('变量x'),ylabel('概率密度y'),title('正太分布N(1,1/4)'); 80 | subplot(2,2,4); 81 | y4=1/sqrt(2*pi)/0.5*exp(-1/2/(0.5^2)*(x+1).^2),plot(x,y4); 82 | xlabel('变量x'),ylabel('概率密度y'),title('正太分布N(-1,1/4)') 83 | 84 | % 多个图形窗口 85 | figure(n) %创建新的图形窗口或显示当前图形窗口。n是这个窗口的编号,figure(1)是默认值,不需要声明 86 | t=-4:0.1:4;x=sin(t);plot(t,x,'b^') 87 | t=-4:0.1:4;x=sin(t);plot(t,x,'b^') 88 | xlabel('t');ylabel('x');title('函数x=sint的图形'); 89 | figure(2) 90 | y=cos(t);plot(t,y,'kp'); 91 | xlabel('t');ylabel('y');title('函数y=cost的图形'); 92 | figure(3) 93 | z=sin(t).*cos(t);plot(t,z,'kh') 94 | xlabel('t');ylabel('z');title('函数z=sincost的图形') 95 | 96 | % 双纵坐标图 97 | plotyy(x1,y1,x2,y2) %绘制双纵坐标二维图形,x1和y1所对应的图形的纵坐标标注在图形的左边,x2和y2所对应图形的纵坐标标注在图形的右边 98 | % Example 99 | x=0:0.1:4;y=x.*sin(x);s=sin(x)-x.*cos(x); 100 | plotyy(x,y,x,s); 101 | text(0.5,0,'\fontsize{14}\ity=xsinx') 102 | text(2.5,3.5,['\fontsize{14}\its=','{\fontsize{16} \int_{\fontsize{8}0}^{ x}}','\fontsize{14}\itxsinxdx']) 103 | 104 | % 泛函绘图 105 | % 在指定的范围limits内绘制出函数名为function的一元函数图像 106 | % 其中limits是一个指定x轴的向量[xmin xmax],或者是x轴和y轴的范围向量[xmin xmax ymin ymax],Tol为相对允许误差,默认值为2e-3 107 | % 函数function必须是M函数文件或者只包含一个变量x的函数字符串 108 | % 用指定的线型LineSpec绘制出函数function 109 | fplot('function',limits,LineSpec) 110 | fplot('function',limits,LineSpec,tol) 111 | fplot('exp(2*x)',[0 2],'o') 112 | 113 | % 隐函数函数绘图f = f(x,y) 114 | ezplot(f) %对于显函数f=f(x),在-pi<=x<=pi(默认)上绘制f(x)的图形;对于隐函数f=f(x,y),在[-2pi<=x<=2pi,-2pi<=y<=2pi](默认)上绘制函数f(x,y)的图形 115 | ezplot(f,[min,max]) %在指定的范围min<=x<=max绘制函数f=f(x)的图形 116 | ezplot(f,[xmin,xmax],fign) %在指定标号fign的窗口中,指定的范围。[xmin,xmax]内绘制函数f=f(x)的图形 117 | ezplot(f,[xmin,xmax,ymin,ymax]) %在[xmin<=x<=xmax, ymin<=y<=ymax]绘制f(x,y)=0的图形 118 | % Example 119 | subplot(2,2,1); 120 | ezplot('x^2+y^2-9');axis equal; 121 | subplot(2,2,2); 122 | ezplot('x^3+y^3-5*x*y+1/5') 123 | subplot(2,2,3); 124 | ezplot('cos(tan(pi*x))',[0,1]); 125 | subplot(2,2,4); 126 | ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi]); 127 | 128 | % 3维图形的绘制 129 | % 1)meshgrid是将向量转换成网络坐标的矩阵函数 130 | [X,Y]=meshgrid(x,y) %生成二元函数z=f(x,y)在XY平面上的矩阵定义域数据点矩阵X和Y 131 | [X,Y,Z]=meshgrid(x,y,z) %生成三元函数u=f(x,y,z)中立方体定义域中的数据点矩阵X,Y,Z 132 | % 2)plot3 三维曲线 133 | plot3(X,Y,Z,LineSpec) %X,Y,Z为同维向量组,分别表示曲线上点集的横坐标,纵坐标,和函数值,常用来绘制单变量的参数曲线x=x(t),y=y(t)与z=z(t)的三维函数图形 134 | % 3)mesh 画网格曲面 网格图(mesh)中线条有颜色,线条间补面无颜色 135 | mesh(X,Y,Z,C) %X,Y为坐标轴取值向量,Z为X,Y平面上的函数值矩阵,C为色彩向量,当C固定时,网格图的色彩随Z的高度而改变 136 | % Example 137 | x=-3:0.1:3;y=1:0.1:6; 138 | [X,Y]=meshgrid(x,y); 139 | Z=(X+Y).^2; 140 | mesh(X,Y,Z) 141 | % 4)表面图 surf 曲面图(surf)的线条都是黑色的,线条间补面有颜色 142 | surf(X,Y,Z) %X,Y,Z为同维向量组,分别表示曲线上点集的横坐标、纵坐标和函数值,绘制出数据点(X,Y,Z)表示的曲面 143 | % Example 144 | t=linspace(0,pi/2,25); 145 | p=linspace(0,pi/2,25); 146 | [theta,phi]=meshgrid(t,p); 147 | x=cos(theta).*cos(phi); 148 | y=cos(theta).*sin(phi); 149 | z=sin(theta); 150 | surf(x,y,z) 151 | % 5)set函数 152 | %set(句柄,属性名1,属性值1,属性名2,属性值2,...) 153 | % Example 154 | [fia,theta]=meshgrid([linspace(0,pi/2,5),pi/2]) 155 | x=cos(theta).*cos(fia); 156 | y=cos(theta).*sin(fia); 157 | z=sin(theta); 158 | shading interp %在flat的基础上进行色彩的插值处理,使色彩平滑过渡 159 | %shading flat 在faceted的基础上去掉图上的网格线 160 | %no shading 一般的默认模式,即shading faceted 161 | mesh(x,y,z) 162 | set(mesh(x,y,z),'FaceColor','k','EdgeColor','none'); 163 | shading interp; 164 | alpha(0.2); 165 | hold on 166 | % 6)alpha函数控制色彩的浓稠度 167 | alpha(0.5) %色彩的浓稠度就减少了一半。默认情况下是1 168 | 169 | % 其他形式的线性直角坐标图 170 | %bar(x,y,选项) 条形图 171 | %stairs(x,y,选项) 阶梯图 172 | %stem(x,y,选项) 杆图 173 | %fill(x1,y1,选项1,x2,y2,选项2,...) 填充图 174 | % Example 175 | x=0:0.35:7; 176 | y=2*exp(-0.5*x); 177 | subplot(2,2,1);bar(x,y,'g'); 178 | title('bar(x,y,''g'')');axis([0, 7, 0 ,2]); 179 | subplot(2,2,2);fill(x,y,'r'); 180 | title('fill(x,y,''r'')');axis([0, 7, 0 ,2]); 181 | subplot(2,2,3);stairs(x,y,'b'); 182 | title('stairs(x,y,''b'')');axis([0, 7, 0 ,2]); 183 | subplot(2,2,4);stem(x,y,'k'); 184 | title('stem(x,y,''k'')');axis([0, 7, 0 ,2]); 185 | 186 | % 极坐标图 187 | % polar(theta,rho,选项) theta为极坐标极角,rho为极径,选项的内容和plot函数相似 188 | % Example 189 | theta=0:0.01:2*pi; 190 | rho=sin(3*theta).*cos(5*theta); 191 | polar(theta,rho,'r'); 192 | 193 | % 瀑布图和等高线图 194 | subplot(1,2,1); 195 | [X,Y,Z]=peaks(30); 196 | % 瀑布图 197 | waterfall(X,Y,Z); 198 | xlabel('XX');ylabel('YY');zlabel('ZZ'); 199 | subplot(1,2,2); 200 | % 等高线图 201 | contour3(X,Y,Z,12,'k'); %12代表高度的等级数 202 | xlabel('XX');ylabel('YY');zlabel('ZZ'); 203 | 204 | % 三维图视角处理 205 | view(az,el); %az为方位角,el为仰角,它们均以度为单位;系统默认的视点定义为方位角为-37.5度,仰角30度 206 | %MATLAB提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点 207 | %Example 208 | subplot(2,2,1);mesh(peaks); 209 | view(-37.5,30); 210 | title('1'); 211 | subplot(2,2,2);mesh(peaks); 212 | view(0,90); 213 | title('2'); 214 | subplot(2,2,3);mesh(peaks); 215 | view(90,0); 216 | title('3'); 217 | subplot(2,2,4);mesh(peaks); 218 | view(-7,-10); 219 | title('4'); 220 | 221 | % 裁剪图像:将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来 222 | % Example 223 | x=0:pi/10:4*pi; 224 | y=sin(x); 225 | i=find(abs(y)>0.5); 226 | x(i)=NaN; 227 | plot(x,y); 228 | 229 | % 添加色标 230 | colorbar -------------------------------------------------------------------------------- /Algorithm.txt: -------------------------------------------------------------------------------- 1 | % 多目标线性规划法 2 | %f为目标函数系数,A、b为不等式约束的系数,Aeq,beq为等式约束系数,lb、ub为x下限和上限,fval求解x所对应的值 3 | [x,fval]=linprog(f,A,b,Aeq,beq,lb,ub) 4 | 5 | % 二维K-Mean算法 6 | function [ resX,resY,record] = FunK_mean( x,y,k ) 7 | % 功能: 8 | % 实现k-mean聚类算法 9 | % 输入: 10 | % 二维数据,分别用x,y两个一维向量代表两个维度 11 | % k 是分成的类别的数量 12 | % 输出: 13 | % k行的两个矩阵 14 | % 对应同样的第n行,存放着第n类的所有元素 15 | % record: 记录着每一行的有效元素的个数 16 | j = 1; 17 | % 下面是预分配一些空间 18 | % seedX 和 seedY 中存放着所有种子 19 | seedX = zeros(1,k); 20 | seedY = zeros(1,k); 21 | oldSeedX = zeros(1,k); 22 | oldSeedY = zeros(1,k); 23 | resX = zeros(k,length(x)); 24 | resY = zeros(k,length(x)); 25 | % 用来记录resX中每一行有效元素的个数 26 | record = zeros(1,k); 27 | for i = 1:k % 产生k个随机种子, 注意: 随机种子是来自元素集合 28 | seedX(i) = x(round(rand()*length(resX))); 29 | seedY(i) = y(round(rand()*length(resX))); 30 | % 为保证种子不重叠 31 | if (i > 1 && seedX(i) == seedX(i-1) && seedY(i) == seedY(i-1)) 32 | i = i -1; % 重新产生一个种子 33 | end 34 | end 35 | seedX 36 | seedY 37 | while 1 38 | disp(['jack is here']) 39 | record(:) = 0; % 重置为零 40 | resX(:) = 0; 41 | resY(:) = 0; 42 | for i = 1:length(x) % 对所有元素遍历 43 | % 下面是判断本次元素应该归为哪一类,这里我们是根据欧几里得距离进行类别判定 44 | % k-mean算法认为元素应该归为距离最近的种子代表的类 45 | distanceMin = 1; 46 | for j = 2:k 47 | if (power(x(i)-seedX(distanceMin),2)+power(y(i)-seedY(distanceMin),2))... 48 | > (power(x(i)-seedX(j),2) + power(y(i)-seedY(j),2)) 49 | distanceMin = j; 50 | end 51 | end 52 | % 将本次元素点进行类别归并 53 | resX(distanceMin,record(distanceMin)+1) = x(i); 54 | resY(distanceMin,record(distanceMin)+1) = y(i); 55 | record(distanceMin) = record(distanceMin) + 1; 56 | end 57 | oldSeedX = seedX; 58 | oldSeedY = seedY; 59 | % 移动种子至其类中心 60 | record 61 | for i = 1:k 62 | if record(i) == 0 63 | continue; 64 | end 65 | seedX(i) = sum(resX(i,:))/record(i); 66 | seedY(i) = sum(resY(i,:))/record(i); 67 | end 68 | 69 | % 如果本次得到的种子和上次的种子一致,则认为分类完毕。 70 | 71 | if mean([seedX == oldSeedX seedY == oldSeedY]) == 1 % 这句话所想表达的意思就是 if seedX == oldSeedX && seedY == oldSeedY 72 | break; 73 | end 74 | end 75 | % 下面代码只是对resX,resY所占用的内寸大小进行简单的优化 76 | maxPos = max(record); 77 | resX = resX(:,1:maxPos); 78 | resY = resY(:,1:maxPos); 79 | end 80 | 81 | 82 | 83 | % 最大匹配算法 84 | %n、m表示两边各节点数,A表示二分图一边到另一边的弧01矩阵(多余节点补零) 85 | function [M]=ZDPP(m,n,A) 86 | M(m,n)=0; 87 | for(i=1:m)for(j=1:n)if(A(i,j)) M(i,j)=1;break;end;end %求初始匹配M 88 | if(M(i,j)) break;end;end %获得仅含一条边的初始匹配M 89 | while(1) 90 | for(i=1:m) x(i)=0;end %将记录X中点的标号和标记* 91 | for(i=1:n) y(i)=0;end %将记录Y中点的标号和标记* 92 | for(i=1:m) pd=1; %寻找X中 M的所有非饱和点 93 | for(j=1:n)if(M(i,j)) pd=0;end;end 94 | if(pd)x(i)=-n-1;end;end %将X中 M的所有非饱和点都给以标号0 和标记*, 程序中用n+1 表示0标号, 标号为负数时表示标记* 95 | pd=0; 96 | while(1)xi=0; 97 | for(i=1:m)if(x(i)<0)xi=i;break;end;end %假如 X 中存在一个既有标号又有标记*的点, 则任取X中一个既有标号又有标记*的点 xi 98 | if(xi==0)pd=1;break;end %假如X中所有有标号的点都已去掉了标记*, 算法终止 99 | x(xi)=x(xi)*(-1); %去掉xi的标记* 100 | k=1; 101 | for(j=1:n)if(A(xi,j)&y(j)==0)y(j)=xi;yy(k)=j;k=k+1;end;end %对与 xi 邻接且尚未给标号的 yj 都给以标号i 102 | if(k>1)k=k-1; 103 | for(j=1:k)pdd=1; 104 | for(i=1:m) if(M(i,yy(j)))x(i)=-yy(j);pdd=0;break;end;end %将yj在M中与之邻接的点xk (即 xkyj∈M), 给以标号j 和标记* 105 | if(pdd)break;end;end 106 | if(pdd)k=1;j=yy(j); %yj 不是M的饱和点 107 | while(1)P(k,2)=j;P(k,1)=y(j);j=abs(x(y(j))); %任取M的一个非饱和点 yj, 逆向返回 108 | if(j==n+1)break;end %找到X中标号为0 的点时结束, 获得 M-增广路P 109 | k=k+1;end 110 | for(i=1:k)if(M(P(i,1),P(i,2)))M(P(i,1),P(i,2))=0; %将匹配 M 在增广路 P 中出现的边去掉 111 | else M(P(i,1),P(i,2))=1;end;end %将增广路P中没有在匹配 M中出现的边加入到匹配M中 112 | break;end;end;end 113 | if(pd)break;end;end %假如X中所有有标号的点都已去掉了标记*, 算法终止 114 | M %显示最大匹配M, 程序结束 115 | 116 | % 时间序列模型 117 | y = []; %已知序列 118 | m = length(y); 119 | n = [x1,x2,..,xn] %移动的平均项数 120 | for i = 1:length(y) 121 | for j = 1:m-n(i)+1 122 | yhat{i}(j) = sum(y(j:j+n(i)-1))/n(i); 123 | end 124 | yd(i) = yhat{i}(end); %预测目标yd 125 | s(i) = sqrt((y(n(i)+1:m)-yhat{i}(1:end-1).^2)); 126 | end 127 | yd,s 128 | 129 | % 灰色预测 130 | clc,clear; 131 | syms a b; 132 | c=[a b]'; 133 | A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670]; 134 | B=cumsum(A); %原始数据累加 135 | n=length(A); 136 | for i=1:(n-1) 137 | C(i)=(B(i)+B(i+1))/2; %生成累加矩阵 138 | end 139 | %计算待定参数的值 140 | D=A;D(1)=[]; 141 | D=D'; 142 | E=[-C;ones(1,n-1)]; 143 | c=inv(E*E')*E*D; 144 | c=c'; 145 | a=c(1);b=c(2); 146 | %预测后续数据 147 | F=[];F(1)=A(1); 148 | for i=2:(n+10) %只推测后10个数据,可以从此修改 149 | F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a; 150 | end 151 | G=[];G(1)=A(1); 152 | for i=2:(n+10) %只推测后10个数据,可以从此修改 153 | G(i)=F(i)-F(i-1); %得到预测出来的数据 154 | end 155 | t1=1999:2008; 156 | t2=1999:2018; %多10组数据 157 | G 158 | h=plot(t1,A,'o',t2,G,'-'); %原始数据与预测数据的比较 159 | set(h,'LineWidth',1.5); 160 | 161 | % 蚁群算法 162 | %初始化蚁群 163 | m=31;%蚁群中蚂蚁的数量,当m接近或等于城市个数n时,本算法可以在最少的迭代次数内找到最优解 164 | C=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;3238 1229;4196 1004; 165 | 4312 790;4386 570;3007 1970;2562 1756;2788 1491;2381 1676;1332 695;3715 1678; 166 | 3918 2179;4061 2370;3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2367; 167 | 3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975];%城市的坐标矩阵 168 | Nc_max=200;%最大循环次数,即算法迭代的次数,亦即蚂蚁出动的拨数(每拨蚂蚁的数量当然都是m) 169 | alpha=1;%蚂蚁在运动过程中所积累信息(即信息素)在蚂蚁选择路径时的相对重要程度,alpha过大时,算法迭代到一定代数后将出现停滞现象 170 | beta=5;%启发式因子在蚂蚁选择路径时的相对重要程度 171 | rho=0.5;%0=rand); 220 | to_visit=city_remained(select(1)); 221 | tabu_list(i,j)=to_visit; 222 | end 223 | end 224 | if Nc>0 225 | tabu_list(1,:)=routh_best(Nc,:);%将上一代的最优路径(最优解)保留下来,保证上一代中的最适应个体的信息不会丢失 226 | end 227 | %记录本次循环的最佳路线 228 | total_length=zeros(m,1);%m只蚂蚁在本次循环中分别所走过的路径长度 229 | for i=1:m 230 | r=tabu_list(i,:);%取出第i只蚂蚁在本次循环中所走的路径 231 | for j=1:(n-1) 232 | total_length(i)=total_length(i)+D(r(j),r(j+1));%第i只蚂蚁本次循环中从起点城市到终点城市所走过的路径长度 233 | end 234 | total_length(i)=total_length(i)+D(r(1),r(n));%最终得到第i只蚂蚁在本次循环中所走过的路径长度 235 | end 236 | length_best(Nc+1)=min(total_length);%把m只蚂蚁在本次循环中所走路径长度的最小值作为本次循环中最短路径的长度 237 | position=find(total_length==length_best(Nc+1));%找到最短路径的位置,即最短路径是第几只蚂蚁或哪几只蚂蚁走出来的 238 | routh_best(Nc+1,:)=tabu_list(position(1),:);%把第一个走出最短路径的蚂蚁在本次循环中所走的路径作为本次循环中的最优路径 239 | length_average(Nc+1)=mean(total_length);%计算本次循环中m只蚂蚁所走路径的平均长度 240 | Nc=Nc+1 241 | %更新信息素 242 | delta_pheromone=zeros(n,n); 243 | for i=1:m 244 | for j=1:(n-1) 245 | delta_pheromone(tabu_list(i,j),tabu_list(i,j+1))=delta_pheromone(tabu_list(i,j),tabu_list(i,j+1))+Q/total_length(i);%total_length(i)为第i只蚂蚁在本次循环中所走过的路径长度(蚁周系统区别于蚁密系统和蚁量系统的地方) 246 | end 247 | delta_pheromone(tabu_list(i,n),tabu_list(i,1))=delta_pheromone(tabu_list(i,n),tabu_list(i,1))+Q/total_length(i);%至此把第i只蚂蚁在本次循环中在所有路径上释放的信息素已经累加上去 248 | end%至此把m只蚂蚁在本次循环中在所有路径上释放的信息素已经累加上去 249 | pheromone=(1-rho).*pheromone+delta_pheromone;%本次循环后所有路径上的信息素 250 | %禁忌表清零,准备下一次循环,蚂蚁在下一次循环中又可以自由地进行选择 251 | tabu_list=zeros(m,n); 252 | end 253 | %输出结果,绘制图形 254 | position=find(length_best==min(length_best)); 255 | shortest_path=routh_best(position(1),:) 256 | shortest_length=length_best(position(1)) 257 | %绘制最短路径 258 | figure(1) 259 | set(gcf,'Name','Ant Colony Optimization——Figure of shortest_path','Color','r') 260 | N=length(shortest_path); 261 | scatter(C(:,1),C(:,2),50,'filled'); 262 | hold on 263 | plot([C(shortest_path(1),1),C(shortest_path(N),1)],[C(shortest_path(1),2),C(shortest_path(N),2)]) 264 | set(gca,'Color','g') 265 | hold on 266 | for i=2:N 267 | plot([C(shortest_path(i-1),1),C(shortest_path(i),1)],[C(shortest_path(i-1),2),C(shortest_path(i),2)]) 268 | hold on 269 | end 270 | %绘制每次循环最短路径长度和平均路径长度 271 | figure(2) 272 | set(gcf,'Name','Ant Colony Optimization——Figure of length_best and length_average','Color','r') 273 | plot(length_best,'r') 274 | set(gca,'Color','g') 275 | hold on 276 | plot(length_average,'k') 277 | 278 | % logistics人口增长模型 279 | %数据格式 280 | format long 281 | %前20组数据 282 | X0=xlsread('D:\MATLAB\11Logistic.xls','E4:G23'); 283 | %全部25组数据:验证和回归 284 | XE=xlsread('D:\MATLAB\11Logistic.xls','E4:G28'); 285 | %前20组评估的数据值:P 286 | Y0=xlsread('D:\MATLAB\11Logistic.xls','H4:H23'); 287 | n=size(Y0,1); 288 | %π和P的映射关系 289 | for i=1:n 290 | if Y0(i)==0 291 | Y1(i,1)=0.25; 292 | else 293 | Y1(i,1)=0.75; 294 | end 295 | end 296 | %构建常系数 297 | X1=ones(size(X0,1),1); 298 | X=[X1,X0]; 299 | Y=log(Y1./(1-Y1)); 300 | b=regress(Y,X); 301 | %模型验证的应用 302 | for i=1:size(XE,1) 303 | pai0=exp(b(1)+b(2)*XE(i,1)+b(3)*XE(i,2)+b(4)*XE(i,3))/(1+exp(b(1)+b(2)*XE(i,1)+b(3)*XE(i,2)+b(4)*XE(i,3))); 304 | if(pai0<=0.5) 305 | P(i)=0; 306 | else 307 | P(i)=1; 308 | end 309 | end 310 | %回归结果 311 | disp(['回归系数:' num2str(b') ' ']); 312 | disp(['评估结果:' num2str(P) ' ']); 313 | 314 | % 训练神经网络 315 | P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2; 316 | 9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7; 317 | 3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45; 318 | 2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15; 319 | 140 120 140 150 80 130 130 100 130 140 115 80 90 130; 320 | 2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6; 321 | 11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85; 322 | 50 70 50 80 50 60 65 40 65 50 50 50 70 70]; 323 | T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35]; 324 | [p1,minp,maxp,t1,mint,maxt]=premnmx(P,T); 325 | %创建网络 326 | net=newff(minmax(P),[8,6,1],{'tansig','tansig','purelin'},'trainlm'); 327 | %设置训练次数 328 | net.trainParam.epochs = 5000; 329 | %设置收敛误差 330 | net.trainParam.goal=0.0000001; 331 | %训练网络 332 | [net,tr]=train(net,p1,t1); 333 | TRAINLM, Epoch 0/5000, MSE 0.533351/1e-007, Gradient 18.9079/1e-010 334 | TRAINLM, Epoch 24/5000, MSE 8.81926e-008/1e-007, Gradient 0.0022922/1e-010 335 | TRAINLM, Performance goal met. 336 | %输入数据 337 | a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50]; 338 | %将输入数据归一化 339 | a=premnmx(a); 340 | %放入到网络输出数据 341 | b=sim(net,a); 342 | %将得到的数据反归一化得到预测数据 343 | c=postmnmx(b,mint,maxt); 344 | c 345 | 346 | % 遗传算法 347 | %1. 打开 Optimization 工具,在 Solver 中选择 ga - genetic algorithm,在 Fitness function 中填入 @target 348 | %2. 在你的工程文件夹中新建 target.m,注意MATLAB的当前路径是你的工程文件夹所在路径 349 | %3. 在 target.m 中写下适应度函数,比如 350 | function [ y ] = target(x) 351 | y = -x-10*sin(5*x)-7*cos(4*x); 352 | end 353 | %*MATLAB中的GA只求解函数的(近似)最小值,所以先要将目标函数取反。 354 | %4. 打开 Optimization 工具,输入 变量个数(Number of variables) 和 自变量定义域(Bounds) 的值 355 | %点击 Start,遗传算法就跑起来了 356 | %最终在输出框中可以看到函数的(近似)最小值,和达到这一程度的迭代次数(Current iteration)和最终自变量的值(Final point) 357 | %5. 在 Optimization - ga 工具中,有许多选项。通过这些选项,可以设置下列属性种群(Population) 358 | %选择(Selection)交叉(Crossover)变异(Mutation)停止条件(Stopping criteria)画图函数(Plot functions) 359 | 360 | % 粒子群算法 361 | % 初始化种群 362 | f= @(x)x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x); % 函数表达式 363 | figure(1);ezplot(f,[0,0.01,20]); 364 | N = 50; % 初始种群个数 365 | d = 1; % 空间维数 366 | ger = 100; % 最大迭代次数 367 | limit = [0, 20]; % 设置位置参数限制 368 | vlimit = [-1, 1]; % 设置速度限制 369 | w = 0.8; % 惯性权重 370 | c1 = 0.5; % 自我学习因子 371 | c2 = 0.5; % 群体学习因子 372 | for i = 1:d 373 | x = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, d);%初始种群的位置 374 | end 375 | v = rand(N, d); % 初始种群的速度 376 | xm = x; % 每个个体的历史最佳位置 377 | ym = zeros(1, d); % 种群的历史最佳位置 378 | fxm = zeros(N, 1); % 每个个体的历史最佳适应度 379 | fym = -inf; % 种群历史最佳适应度 380 | hold on 381 | plot(xm, f(xm), 'ro');title('初始状态图'); 382 | figure(2) 383 | %% 群体更新 384 | iter = 1; 385 | record = zeros(ger, 1); % 记录器 386 | while iter <= ger 387 | fx = f(x) ; % 个体当前适应度 388 | for i = 1:N 389 | if fxm(i) < fx(i) 390 | fxm(i) = fx(i); % 更新个体历史最佳适应度 391 | xm(i,:) = x(i,:); % 更新个体历史最佳位置 392 | end 393 | end 394 | if fym < max(fxm) 395 | [fym, nmax] = max(fxm); % 更新群体历史最佳适应度 396 | ym = xm(nmax, :); % 更新群体历史最佳位置 397 | end 398 | v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新 399 | % 边界速度处理 400 | v(v > vlimit(2)) = vlimit(2); 401 | v(v < vlimit(1)) = vlimit(1); 402 | x = x + v;% 位置更新 403 | % 边界位置处理 404 | x(x > limit(2)) = limit(2); 405 | x(x < limit(1)) = limit(1); 406 | record(iter) = fym;%最大值记录 407 | % x0 = 0 : 0.01 : 20; 408 | % plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化') 409 | % pause(0.1) 410 | iter = iter+1; 411 | end 412 | figure(3);plot(record);title('收敛过程') 413 | x0 = 0 : 0.01 : 20; 414 | figure(4);plot(x0, f(x0), 'b-', x, f(x), 'ro');title('最终状态位置') 415 | disp(['最大值:',num2str(fym)]); 416 | disp(['变量取值:',num2str(ym)]); 417 | 418 | 419 | 420 | 421 | --------------------------------------------------------------------------------