• 司马彪
    了解作者
  • matlab
    开发工具
  • 1.5KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 2 积分
    下载积分
  • 1
    下载次数
  • 2022-01-10 17:47
    上传日期
2015年研究生数学建模D题迭代搜索算法,完美运行,适用于其他同类优化问题。
迭代搜索算法.zip
  • 迭代搜索算法
  • Untitled.m
    3.4KB
内容介绍
clear,clc %参数赋值 M=194.295*10^3; L_train=115; v_max=80*10^3/3600;% m/s A=2.031; B=0.0622; C=0.001807; ac_max=1; de_max=1; g=9.8; s6=10209;% 站点坐标 s7=11563;% 站点坐标 cc=600; vt=0; u=0.7; %? t_train=112; %初值 z=0; u=1; z=z+1; n=10000000;%整个过程分成 n 段 v=zeros(n+1,1);%返回一个 n+1×1 矩阵,全为0 s_all=ones(n+1,1)*10209;%返回一个n+1×1矩阵,全为13594 Di=zeros(n+1,1);%返回一个 n+1×1 矩阵,全为0 F=zeros(n+1,1);%返回一个 n+1×1 矩阵,全为0 deta_s=(s7-s6)/n;%将路程分为n段 v1=zeros(n+1,1);%返回一个 n+1×1 矩阵,全为0 v2=zeros(n+1,1);%返回一个 n+1×1 矩阵,全为0 Rc=zeros(n+1,1);%返回一个 n+1×1 矩阵,全为0 ac=zeros(n+1,1);%返回一个 n+1×1 矩阵,全为0 % v(1,1)=56*1000/3600; for i=1:n s_all(i+1)= s_all(i)+deta_s; end %读入坡度信息 for i=1:n+1%Di为坡度 if s_all(i)<=10513 Di(i)=0; elseif s_all(i)>10513 && s_all(i)<=10893 Di(i)=1.8; elseif s_all(i)>10893 && s_all(i)<=11513 Di(i)=-3.5; elseif s_all(i)>11513 Di(i)=0; end end %读入曲率信息 for i=1:n+1%Rc为曲率 Rc(i)=0; end r=1; E=30000000;%能量损耗常数 while r>0 E=30000000+10000*r; E0=E; i=0;j=1; while E>0 %牵引阶段 i=i+1; if v(i)<51.5*1000/3600 F(i)=u*213*10^3; ac(i)=F(i)/M-(A+B*v(i)*3.6+C*(v(i)*3.6)^2+Di(i)+Rc(i))/1000*g; if ac(i)>1 F(i)=F(i)-(ac(i)-1)*M; ac(i)=1; end v(i+1)=(2*ac(i)*deta_s+v(i)^2)^0.5; E=E-F(i)*deta_s; elseif (v(i)>51.5*1000/3600) && (v(i)<=80*1000/3600) && (s_all(i)>10328) F(i)=u*(-0.002032*v(i)^3+0.4928*v(i)^2-42.13*v(i)+1343)*10^3; ac(i)=F(i)/M-(A+B*v(i)*3.6+C*(v(i)*3.6)^2+Di(i)+Rc(i))/1000*g; if ac(i)>1 F(i)=F(i)-(ac(i)-1)*M; ac(i)=1; end v(i+1)=(2*ac(i)*deta_s+v(i)^2)^0.5; E=E-F(i)*deta_s; elseif v(i)>51.5*1000/3600 && v(i)<=55*1000/3600 && s_all(i)<10328 F(i)=u*(-0.002032*v(i)^3+0.4928*v(i)^2-42.13*v(i)+1343)*10^3; ac(i)=F(i)/M-(A+B*v(i)*3.6+C*(v(i)*3.6)^2+Di(i)+Rc(i))/1000*g; if ac(i)>1 F(i)=F(i)-(ac(i)-1)*M; ac(i)=1; end v(i+1)=(2*ac(i)*deta_s+v(i)^2)^0.5; E=E-F(i)*deta_s; elseif (v(i)>80*1000/3600 && s_all(i)>10329) || (v(i)>55*1000/3600 && s_all(i)<10328) %巡航阶段 v(i+1)=v(i); E=E-(A+B*v(i)*3.6+C*(v(i)*3.6)^2+Di(i)+Rc(i))/1000*M*g*deta_s; end end j=i; v1(j)=v(j); %惰性阶段 while j<n+1 && v1(j)>0 ac(j)=-(A+B*v1(j)*3.6+C*(v1(j)*3.6)^2+Di(i)+Rc(i))/1000*g; if ac(j)<-1 ac(j)=-1; end v1(j+1)=(2*ac(j)*deta_s+v1(j)^2)^0.5; a=v1(j+1); j=j+1; end %制动阶段 k=n+1; v2(n+1)=vt; while v2(k)<v(i) if v2(k)<77*10^3/3600 FB=u*166*10^3; ac(k)=FB/M+(A+B*v2(k)*3.6+C*(v2(k)*3.6)^2+Di(i)+Rc(i))/1000*g; if ac(k)>1 ac(k)=1; end v2(k-1)=(2*ac(k)*deta_s+v2(k)^2)^0.5; k=k-1; else FB=u*(0.1343*v2(k)^2-25.07*v2(k)+1300)*10^3; ac(k)=FB/M+(A+B*v2(k)*3.6+C*(v2(k)*3.6)^2+Di(i)+Rc(i))/1000*g; v2(k-1)=(2*ac(k)*deta_s+v2(k)^2)^0.5; k=k-1; end a=v2(k); end w=0; for w=i+1:n+1 v(w)=v1(w); end for w=k:n+1 v(w)=min([v(w);v2(w)]); end t(1)=0; for p=1:n t(p+1)=t(p)+2*deta_s/(v(p)+v(p+1)); end if t(n)>=t_train-0.1 && t(n)<=t_train+0.1 r=0; else r=r+1; end end v=v*3.6; figure(2) plot(s_all,v,'linewidth',2) ylabel('速度(km/h)','fontsize',12); xlabel('公里标(m)','fontsize',12); grid on % ttt=tt-t_train; % [minx, ind] =min(abs(ttt)); % minxx(z)=minx; for i=1:111 [min5 ind5]=min(abs(t-i+1)); t5(i,1)=t(ind5); v5(i,1)=v(ind5); F5(i,1)=F(ind5); a5(i,1)=ac(ind5); s5(i,1)=s_all(ind5); Di5(i,1)=Di(ind5); end
评论
    相关推荐