Minimum Climb Time (English Units)
Contents
Problem description
Example about climbing (increase altitude)
% Copyright (c) 2007-2008 by Tomlab Optimization Inc.
Problem setup
alt0 = 0; altf = 65600; speed0 = 424.26; speedf = 968.148; fpa0 = 0; fpaf = 0; mass0 = 42000/32.208; altmin = 0; altmax = 69000; speedmin = 10; speedmax = 3000; fpamin = -40*pi/180; fpamax = -fpamin; massmin = 50/32.208; toms t t_f p = tomPhase('p',t,0,t_f,50); setPhase(p); % Altitude, speed, flight path angle, mass tomStates h v fpa m % Angle of Attack tomControls aalpha guess = { t_f == 300; icollocate({ h == alt0 + t/t_f*(altf-alt0); v == speed0 + t/t_f*(speedf-speed0); fpa == 10*pi/180; m == mass0; })}; cbox = { 100 <= t_f <= 800; collocate(-pi*20/180 <= aalpha <= pi/20*180) icollocate(altmin <= h <= altmax) icollocate(speedmin <= v <= speedmax) icollocate(fpamin <= fpa <= fpamax) icollocate(massmin <= m <= mass0) }; bnd = { initial(h) == alt0; initial(v) == speed0; initial(fpa) == fpa0; initial(m) == mass0; final(h) == altf; final(v) == speedf; final(fpa) == fpaf; }; % US1976 data hTab = (-2000:2000:86000); rhoTab = [1.478 1.225 1.007 0.8193 0.6601 0.5258 0.4135 0.3119 ... 0.2279 0.1665 0.1216 0.08891 0.06451 0.04694 0.03426 0.02508 ... 0.01841 0.01355 0.009887 0.007257 0.005366 0.003995 0.002995 ... 0.002259 0.001714 0.001317 0.001027 0.0008055 0.0006389 0.0005044 ... 0.0003962 0.0003096 0.0002407 0.000186 0.0001429 0.0001091 ... 8.281e-005 6.236e-005 4.637e-005 3.43e-005 2.523e-005 1.845e-005 ... 1.341e-005 9.69e-006 6.955e-006]; sosTab = [347.9 340.3 332.5 324.6 316.5 308.1 299.5 295.1 295.1 ... 295.1 295.1 295.1 296.4 297.7 299.1 300.4 301.7 303 306.5 310.1 ... 313.7 317.2 320.7 324.1 327.5 329.8 329.8 328.8 325.4 322 318.6 ... 315.1 311.5 308 304.4 300.7 297.1 293.4 290.7 288 285.3 282.5 ... 279.7 276.9 274.1]; Mtab = [0; 0.2; 0.4; 0.6; 0.8; 1; 1.2; 1.4; 1.6; 1.8]; alttab = [0 5000 10000 15000 20000 25000 30000 40000 50000 70000]; Ttab = 1000*[24.2 24.0 20.3 17.3 14.5 12.2 10.2 5.7 3.4 0.1; 28.0 24.6 21.1 18.1 15.2 12.8 10.7 6.5 3.9 0.2; 28.3 25.2 21.9 18.7 15.9 13.4 11.2 7.3 4.4 0.4; 30.8 27.2 23.8 20.5 17.3 14.7 12.3 8.1 4.9 0.8; 34.5 30.3 26.6 23.2 19.8 16.8 14.1 9.4 5.6 1.1; 37.9 34.3 30.4 26.8 23.3 19.8 16.8 11.2 6.8 1.4; 36.1 38.0 34.9 31.3 27.3 23.6 20.1 13.4 8.3 1.7; 36.1 36.6 38.5 36.1 31.6 28.1 24.2 16.2 10.0 2.2; 36.1 35.2 42.1 38.7 35.7 32.0 28.1 19.3 11.9 2.9; 36.1 33.8 45.7 41.3 39.8 34.6 31.1 21.7 13.3 3.1]; M2 = [0 0.4 0.8 0.9 1.0 1.2 1.4 1.6 1.8]; Clalphatab = [3.44 3.44 3.44 3.58 4.44 3.44 3.01 2.86 2.44]; CD0tab = [0.013 0.013 0.013 0.014 0.031 0.041 0.039 0.036 0.035]; etatab = [0.54 0.54 0.54 0.75 0.79 0.78 0.89 0.93 0.93]; M = Mtab; alt = alttab; Re = 20902900; mmu = 0.14076539e17; S = 530; g0 = 32.208; ISP = 1600; H = 23800; rho0 = 0.002378; rho = interp1(hTab,rhoTab,h*0.3048,'pchip')*0.001941; sos1 = interp1(hTab,sosTab,h*0.3048,'pchip')./0.3048; Mach = v/sos1; CD0 = interp1(M2,CD0tab,Mach,'pchip'); Clalpha = interp1(M2,Clalphatab,Mach,'pchip'); eta = interp1(M2,etatab,Mach,'pchip'); T = interp2(alttab, Mtab, Ttab, h, Mach, 'spline'); CD = CD0 + eta.*Clalpha.*aalpha.^2; CL = Clalpha.*aalpha; dynpres = 0.5.*rho.*v.^2; D = dynpres.*S.*CD; L = dynpres.*S.*CL; equ = collocate({ dot(h) == v.*sin(fpa); dot(v) == ((T.*cos(aalpha)-D)./m - mmu.*sin(fpa)./(Re+h).^2); dot(fpa) == (T.*sin(aalpha)+L)./(m.*v)+cos(fpa).*(v./(Re+h)-mmu./(v.*(Re+h).^2)); dot(m) == -T./(g0.*ISP); }); options = struct; options.name = 'Minimum Time to Climb (English)'; options.scale = 'auto'; % Strating guess of fpa is in confilct with the boundary conditions, but % that's ok. (It will give a warning, which we suppress.) warns = warning('off', 'tomSym:x0OutOfBounds');
Solve the problem
ezsolve(t_f,{cbox,bnd,equ},guess,options);
% Restore warning
warning(warns);
Problem type appears to be: lpcon Auto-scaling Starting numeric solver ===== * * * =================================================================== * * * TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2011-02-05 ===================================================================================== Problem: --- 1: Minimum Time to Climb (English) f_k 318.348640855983830000 sum(|constr|) 0.000000000071504559 f(x_k) + sum(|constr|) 318.348640856055340000 f(x_0) 300.000000000000000000 Solver: snopt. EXIT=0. INFORM=1. SNOPT 7.2-5 NLP code Optimality conditions satisfied FuncEv 1 ConstrEv 103 ConJacEv 102 Iter 53 MinorIter 2136 CPU time: 4.750000 sec. Elapsed time: 3.625000 sec.
Plot result
subplot(2,1,1) ezplot([1e-3*h, 1e-1*v, fpa*180/pi, 1e-1*m]) legend('1e-3*h', '1e-1*v', 'fpa*180/pi', '1e-1*m'); title('Minimum Time to Climb (English Units) state variables'); subplot(2,1,2) ezplot(aalpha); title('Minimum Time to Climb (English Units) control');
