Matlab 高级算法程序代码汇总
一、灰色预测模型matlab程序
% renkou1=renkou(:,1);%年末常住人口数 % renkou2=renkou(:,2);%户籍人口 % renkou3=renkou(:,3);%非户籍人口 % shjian=1979:2010; %以上数据自己给 x0=renkou2'; n=length(x0);
lamda=x0(1:n-1)./x0(2:n) range=minmax(lamda) x1=cumsum(x0) for i=2:n
z(i)=0.5*(x1(i)+x1(i-1)); end
B=[-z(2:n)',ones(n-1,1)]; Y=x0(2:n)'; u=B\Y
x=dsolve('Dx+a*x=b','x(0)=x0');
x=subs(x,{'a','b','x0'},{u(1),u(2),x1(1)}); yuce1=subs(x,'t',[0:n-1]);
digits(6),y=vpa(x) %为提高预测精度,先计算预测值,再显示微分方程的解 yuce=[x0(1),diff(yuce1)] epsilon=x0-yuce %计算残差
delta=abs(epsilon./x0) %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda %计算级比偏差值
%以深圳人口数据得到预测模型及预测误差相关数据
lamda =
Columns 1 through 8
0.9741 0.9611 0.9419 0.8749 0.9311 0.9093 0.9302 0.9254
Columns 9 through 16
0.9245 0.9278 0.9442 0.9376 0.9127 0.9148 0.9332 0.9477
Columns 17 through 24
0.9592 0.9445 0.9551 0.9562 0.9594 0.9461 0.9469 0.9239
Columns 25 through 31
0.9140 0.9077 0.9243 0.9268 0.9312 0.9446
0.9618
range =
0.8749 0.9741 x1 =
1.0e+003 *
Columns 1 through 8
0.0313 0.0634 0.0967 0.1322 0.1727 0.2162 0.2641 0.3155
Columns 9 through 16
0.3711 0.4313 0.4961 0.5647 0.6380 0.7182 0.8059 0.8999
Columns 17 through 24
0.9990 1.1024 1.2119 1.3265 1.4463 1.5712 1.7033 1.8427
Columns 25 through 32
1.9936 2.1588 2.3407 2.5375 2.7499 2.9780 3.2194 3.4705 u =
-0.0665 31.3737 y =
-472.117+503.377*exp(.664533e-1*t)
yuce =
Columns 1 through 8
31.2600 34.5876 36.9641 39.5040 42.2183 45.1192 48.2194 51.5326
Columns 9 through 16
55.0734 58.8576 62.9017 67.2238 71.8428 76.7792 82.0548 87.6928
Columns 17 through 24
93.7183 100.1578 107.0397 114.3945 122.2547 130.6550 139.6324 149.2267
Columns 25 through 32
159.4802 170.4382 182.1492 194.6649 208.0405 222.3352 237.6121 253.9386
epsilon =
Columns 1 through 8
0 -2.4976 -3.5741 -4.0540 -1.6983 -1.5992 -0.3594 -0.0826
Columns 9 through 16
0.5266 1.2824 1.9183 1.4262 1.3772 3.4408 5.6352 6.2772
Columns 17 through 24
5.4417 3.2222 2.4203 0.2055 -2.4047 -5.7350 -7.5924 -9.7767
Columns 25 through 32
-8.5502 -5.3082 -0.2192 2.1651 4.3395 5.7348 3.8379 -2.9086
delta =
Columns 1 through 8
0 0.0778 0.1070 0.1144 0.0419 0.0367 0.0075 0.0016
Columns 9 through 16
0.0095 0.0213 0.0296 0.0208 0.0188 0.0429 0.0643 0.0668
Columns 17 through 24
0.0549 0.0312 0.0221 0.0018 0.0201 0.0459 0.0575 0.0701
Columns 25 through 32
0.0567 0.0321 0.0012 0.0110 0.0204 0.0251 0.0159 0.0116 rho =
Columns 1 through 8
-0.0411 -0.0271 -0.0066 0.0650 0.0049 0.0282 0.0058 0.0110
Columns 9 through 16
0.0119 0.0084 -0.0091 -0.0020 0.0245 0.0223 0.0027 -0.0128
Columns 17 through 24
-0.0251 -0.0094 -0.0208 -0.0219 -0.0254 -0.0111 -0.0119 0.0126
Columns 25 through 31
0.0232 0.0300 0.0122 0.0095 0.0048 -0.0095 -0.0280
二、遗传算法程序代码
% Optimizing a function using Simple Genetic Algorithm with elitist preserved
%Max f(x1,x2)=100*(x1*x1-x2).^2+(1-x1).^2; -2.0480<=x1,x2<=2.0480 % Author: Wang Yonglin (wylin77@126.com) clc;clear all;
format long;%设定数据显示格式 %初始化参数 T=100;%仿真代数 N=80;% 群体规模
pm=0.05;pc=0.8;%交叉变异概率 umax=2.048;umin=-2.048;%参数取值范围 L=10;%单个参数字串长度,总编码长度2L bval=round(rand(N,2*L));%初始种群 bestv=-inf;%最优适应度初值 %迭代开始 for ii=1:T %解码,计算适应度 for i=1:N y1=0;y2=0; for j=1:1:L
y1=y1+bval(i,L-j+1)*2^(j-1); end
x1=(umax-umin)*y1/(2^L-1)+umin; for j=1:1:L
y2=y2+bval(i,2*L-j+1)*2^(j-1); end
x2=(umax-umin)*y2/(2^L-1)+umin;
obj(i)=100*(x1*x1-x2).^2+(1-x1).^2; %目标函数 xx(i,:)=[x1,x2]; end
func=obj;%目标函数转换为适应度函数 p=func./sum(func);
q=cumsum(p);%累加
[fmax,indmax]=max(func);%求当代最佳个体 if fmax>=bestv
bestv=fmax;%到目前为止最优适应度值 bvalxx=bval(indmax,:);%到目前为止最佳位串 optxx=xx(indmax,:);%到目前为止最优参数 end
Bfit1(ii)=bestv; % 存储每代的最优适应度 %%%%遗传操作开始 %轮盘赌选择 for i=1:(N-1) r=rand;
tmp=find(r<=q);
newbval(i,:)=bval(tmp(1),:); end
newbval(N,:)=bvalxx;%最优保留 bval=newbval; %单点交叉 for i=1:2:(N-1) cc=rand; if cc<pc
point=ceil(rand*(2*L-1));%取得一个1到2L-1的整数 ch=bval(i,:);
bval(i,point+1:2*L)=bval(i+1,point+1:2*L); bval(i+1,point+1:2*L)=ch(1,point+1:2*L); end end
bval(N,:)=bvalxx;%最优保留 %位点变异
mm=rand(N,2*L)<pm;%N行
一、灰色预测模型matlab程序
% renkou1=renkou(:,1);%年末常住人口数 % renkou2=renkou(:,2);%户籍人口 % renkou3=renkou(:,3);%非户籍人口 % shjian=1979:2010; %以上数据自己给 x0=renkou2'; n=length(x0);
lamda=x0(1:n-1)./x0(2:n) range=minmax(lamda) x1=cumsum(x0) for i=2:n
z(i)=0.5*(x1(i)+x1(i-1)); end
B=[-z(2:n)',ones(n-1,1)]; Y=x0(2:n)'; u=B\Y
x=dsolve('Dx+a*x=b','x(0)=x0');
x=subs(x,{'a','b','x0'},{u(1),u(2),x1(1)}); yuce1=subs(x,'t',[0:n-1]);
digits(6),y=vpa(x) %为提高预测精度,先计算预测值,再显示微分方程的解 yuce=[x0(1),diff(yuce1)] epsilon=x0-yuce %计算残差
delta=abs(epsilon./x0) %计算相对误差
rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda %计算级比偏差值
%以深圳人口数据得到预测模型及预测误差相关数据
lamda =
Columns 1 through 8
0.9741 0.9611 0.9419 0.8749 0.9311 0.9093 0.9302 0.9254
Columns 9 through 16
0.9245 0.9278 0.9442 0.9376 0.9127 0.9148 0.9332 0.9477
Columns 17 through 24
0.9592 0.9445 0.9551 0.9562 0.9594 0.9461 0.9469 0.9239
Columns 25 through 31
0.9140 0.9077 0.9243 0.9268 0.9312 0.9446
0.9618
range =
0.8749 0.9741 x1 =
1.0e+003 *
Columns 1 through 8
0.0313 0.0634 0.0967 0.1322 0.1727 0.2162 0.2641 0.3155
Columns 9 through 16
0.3711 0.4313 0.4961 0.5647 0.6380 0.7182 0.8059 0.8999
Columns 17 through 24
0.9990 1.1024 1.2119 1.3265 1.4463 1.5712 1.7033 1.8427
Columns 25 through 32
1.9936 2.1588 2.3407 2.5375 2.7499 2.9780 3.2194 3.4705 u =
-0.0665 31.3737 y =
-472.117+503.377*exp(.664533e-1*t)
yuce =
Columns 1 through 8
31.2600 34.5876 36.9641 39.5040 42.2183 45.1192 48.2194 51.5326
Columns 9 through 16
55.0734 58.8576 62.9017 67.2238 71.8428 76.7792 82.0548 87.6928
Columns 17 through 24
93.7183 100.1578 107.0397 114.3945 122.2547 130.6550 139.6324 149.2267
Columns 25 through 32
159.4802 170.4382 182.1492 194.6649 208.0405 222.3352 237.6121 253.9386
epsilon =
Columns 1 through 8
0 -2.4976 -3.5741 -4.0540 -1.6983 -1.5992 -0.3594 -0.0826
Columns 9 through 16
0.5266 1.2824 1.9183 1.4262 1.3772 3.4408 5.6352 6.2772
Columns 17 through 24
5.4417 3.2222 2.4203 0.2055 -2.4047 -5.7350 -7.5924 -9.7767
Columns 25 through 32
-8.5502 -5.3082 -0.2192 2.1651 4.3395 5.7348 3.8379 -2.9086
delta =
Columns 1 through 8
0 0.0778 0.1070 0.1144 0.0419 0.0367 0.0075 0.0016
Columns 9 through 16
0.0095 0.0213 0.0296 0.0208 0.0188 0.0429 0.0643 0.0668
Columns 17 through 24
0.0549 0.0312 0.0221 0.0018 0.0201 0.0459 0.0575 0.0701
Columns 25 through 32
0.0567 0.0321 0.0012 0.0110 0.0204 0.0251 0.0159 0.0116 rho =
Columns 1 through 8
-0.0411 -0.0271 -0.0066 0.0650 0.0049 0.0282 0.0058 0.0110
Columns 9 through 16
0.0119 0.0084 -0.0091 -0.0020 0.0245 0.0223 0.0027 -0.0128
Columns 17 through 24
-0.0251 -0.0094 -0.0208 -0.0219 -0.0254 -0.0111 -0.0119 0.0126
Columns 25 through 31
0.0232 0.0300 0.0122 0.0095 0.0048 -0.0095 -0.0280
二、遗传算法程序代码
% Optimizing a function using Simple Genetic Algorithm with elitist preserved
%Max f(x1,x2)=100*(x1*x1-x2).^2+(1-x1).^2; -2.0480<=x1,x2<=2.0480 % Author: Wang Yonglin (wylin77@126.com) clc;clear all;
format long;%设定数据显示格式 %初始化参数 T=100;%仿真代数 N=80;% 群体规模
pm=0.05;pc=0.8;%交叉变异概率 umax=2.048;umin=-2.048;%参数取值范围 L=10;%单个参数字串长度,总编码长度2L bval=round(rand(N,2*L));%初始种群 bestv=-inf;%最优适应度初值 %迭代开始 for ii=1:T %解码,计算适应度 for i=1:N y1=0;y2=0; for j=1:1:L
y1=y1+bval(i,L-j+1)*2^(j-1); end
x1=(umax-umin)*y1/(2^L-1)+umin; for j=1:1:L
y2=y2+bval(i,2*L-j+1)*2^(j-1); end
x2=(umax-umin)*y2/(2^L-1)+umin;
obj(i)=100*(x1*x1-x2).^2+(1-x1).^2; %目标函数 xx(i,:)=[x1,x2]; end
func=obj;%目标函数转换为适应度函数 p=func./sum(func);
q=cumsum(p);%累加
[fmax,indmax]=max(func);%求当代最佳个体 if fmax>=bestv
bestv=fmax;%到目前为止最优适应度值 bvalxx=bval(indmax,:);%到目前为止最佳位串 optxx=xx(indmax,:);%到目前为止最优参数 end
Bfit1(ii)=bestv; % 存储每代的最优适应度 %%%%遗传操作开始 %轮盘赌选择 for i=1:(N-1) r=rand;
tmp=find(r<=q);
newbval(i,:)=bval(tmp(1),:); end
newbval(N,:)=bvalxx;%最优保留 bval=newbval; %单点交叉 for i=1:2:(N-1) cc=rand; if cc<pc
point=ceil(rand*(2*L-1));%取得一个1到2L-1的整数 ch=bval(i,:);
bval(i,point+1:2*L)=bval(i+1,point+1:2*L); bval(i+1,point+1:2*L)=ch(1,point+1:2*L); end end
bval(N,:)=bvalxx;%最优保留 %位点变异
mm=rand(N,2*L)<pm;%N行