Contents

Simulate an optimal approach and orbit insertion at Pluto (fmincon)

Treat the problem as planar. Models a fixed mass. fmincon is used to find the optimal trajectory. This optimization is on the slow side and may take several hundred iterations.

Parameter space: 1. how long a time is allocated for the insertion burn (fTime) 2. the number of points along the trajectory 3. number of optimization iterations, or tolerances

Example solutions: 3500 kg / 40 or 20 N / fTime = 3 - coast time in trajectory 3000 kg / 15 N / 3 Note: lower thrust may require less mass, more points

The cost, f(x), is the total acceleration required for the maneuver. The constraints, or Feasibility, are that the acceleration magnitude is less than the maximum and that the final state is achieved at the endpoint.

Example output: First-order Norm of Iter F-count f(x) Feasibility optimality step 271 56026 8.140240e+01 5.301e-12 8.410e-01 3.252e-03

------------------------------------------------------------------------
See also ApproachCost2DMag, ApproachConst2DIneq, Simulate2DApproach
------------------------------------------------------------------------
%--------------------------------------------------------------------------
%   Copyright (c) 2016 Princeton Satellite Systems, Inc.
%   All rights reserved.
%--------------------------------------------------------------------------
%   Since 2017.1
%   2024.1 Fix bug in vInf, vEsc should be squared
%--------------------------------------------------------------------------

Watermark([1 1 1]); % for plot inversion

if( ~HasOptimizationToolbox )
  error('You need the MATLAB optimizaton toolbox to run this script.');
end

Problem parameters

Optimization parameters

maxIter = 500;
fTime = 2.5; % factor times the impulse time for executing burn

% Spacecraft parameters
mass  = 2500; % fixed mass (kg)
thrust = 10;  % fixed thrust (N)

% Target orbit parameters
h  = 1000; % apogee
hC = 250;  % perigee

Setup

Constants

rE    = Constant('equatorial radius pluto');
mu    = Constant('mu pluto');

aMax  = thrust*0.001/mass; % km/s2

% Calculate target orbit
[sma,ecc] = RPRA2AE(rE+hC,rE+h);
vEll      = VOrbit(rE+h,sma,mu);
rP        = rE + h; % r of passage

% Encounter velocity (incoming trajectory)
vEsc	= VEscape( rP, mu );
vEnc  = 1.06*vEsc;
vInf  = sqrt(vEnc.^2 - vEsc^2); % v-infinity
% Change from encounter velocity to apogee - instantaneous burn
dV    = vEnc-vEll;
% Approx time to do delta-V at our fixed thrust level
impT  = dV*mass*1000/thrust;
dVTime = fTime*impT;

% Generate incoming trajectory orbital elements (hyperbola) via Kepler
smaP  = -mu/vInf^2;
eccP  = 1 - rP/smaP;
f     = 0.76*acos(-1/eccP);
m     = Nu2M(eccP,f);
m     = linspace(-m,m);
r     = zeros(3,100);
for j = 1:length(m)
	el      = [smaP 0 0 0 eccP m(j)];
	r(:,j)	= El2RV( el, [], mu );
end

% Plot the flyby (if no delta-V is applied)
NewFig('Pluto flyby')
plot(r(1,:),r(2,:),'linewidth',2);
hold on
grid on
XLabelS('x (km)');
YLabelS('y (km)');

% Compute the true anomaly to reach target anomaly in dVTime time
fTarget = 0.0;
f0   = TrueAnomalyStartHyperbola(smaP,eccP,dVTime,fTarget,mu);
nPts = 200; % 100 pts
t    = linspace(0,TimeOfFlightHyperbola(smaP,eccP,-f0,f0,mu),nPts);
%nPts = length(t);

m0     = Nu2M( eccP,f0 );
[r, v] = El2RV( [smaP 0 0 0 eccP m0], [], mu );

% Convert velocity to planar coordinates (u,v)
uR	= Unit(r);
uT	= Cross([0;0;1],uR);
u   = Dot(uR,v);
v   = Dot(uT,v);

% Initial condition
x0 = [Mag(r);u;v;atan2(r(2),r(1))];

% Verify the simulation for zero acceleration
acc    = zeros(1,length(t)); % acceleration
phi    = zeros(1,length(t)); % thrust angle
d.mu   = mu;
d.aMax = aMax;
xZ     = Simulate2DApproach( t, x0, phi, acc, d );

plot(xZ(1,:),xZ(2,:),'--');
m     = nPts/5;
j     = [1:m:nPts nPts];
[tS,~,tU] = TimeLabl(t);
for k = 2:length(j)
  i = j(k);
  s = sprintf('   t = %6.1f (%s)',tS(i),tU);
  text(xZ(1,i),xZ(2,i),s);
end
legend('Kepler','Simulation')
drawnow

Set up the powered orbit insertion optimization

The goal is to achieve the insertion orbit at the end of the burn. The cost is the total acceleration.

% Target condition: elliptical orbital velocity at rP
xF = [rP;0;vEll];

% Step at which you should be at xF
nF = length(t)/2;

opts	= optimset( 'Display','iter-detailed',...
                  'maxiter',maxIter,...
                  'algorithm','interior-point',...
                  'TolFun',1e-2,...
                  'TolCon',0.1,...
                  'TolX',1e-4,...
                  'PlotFcns',@optimplotx,...
                  'MaxFunEvals',300000);

costFun   = @(u) ApproachCost2DMag(u);
constFun	= @(u) ApproachConst2DIneq(u,d,t(1:nF),x0,xF);

% Lower and upper bounds
oN        = ones(1,nF);
lB        = [-1*oN; -1*oN];
uB        = [oN; oN];

% Initial solution: start with negative radial thrust to avoid a swingby of
% Pluto, which confuses the simulation.
acc0  = oN;
u0    = [-oN;0*oN]; % [radial;tangential]
%Plot2D(1:nF,u0,'Points',{'Radial','Tangential'},'Initial Acceleration')
phi0 = atan2(u0(1,:),u0(2,:));
traj0 = Simulate2DApproach( t, x0, [phi0 0*oN], [acc0 0*oN], d );
Plot2D(traj0(1,:),traj0(2,:),'x','y','Initial Guess')
drawnow
       600.01

       732.83

Run fmincon to calculate the optimal decision variables

tic
[u,fval,eflag,output] = fmincon(costFun,u0,[],[],[],[],lB,uB,constFun,opts);
toc
u(abs(u)<1e-3) = 0;
Plot2D(1:nF,u,'Points',{'Radial','Tangential'},'Acceleration Components')
Initial point X0 is not between bounds LB and UB; 
FMINCON shifted X0 to strictly satisfy the bounds.

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
    0     201    1.000000e+01    9.511e-01    1.040e+00
    1     404    9.855420e+00    9.089e-01    1.516e+00    1.175e+00
    2     612    8.627960e+00    7.187e-01    6.067e-01    2.940e-01
    3     816    9.169625e+00    7.158e-01    9.379e-01    1.399e-01
    4    1021    9.246307e+00    4.809e-01    6.778e-01    2.848e-01
    5    1227    1.492080e+01    4.170e-01    6.925e-01    9.533e-01
    6    1433    2.079333e+01    4.248e-01    7.188e-01    8.600e-01
    7    1639    2.708589e+01    4.242e-01    8.056e-01    8.074e-01
    8    1845    3.288163e+01    4.217e-01    7.971e-01    7.604e-01
    9    2052    3.450278e+01    4.224e-01    7.825e-01    3.883e-01
   10    2258    3.657576e+01    4.221e-01    7.912e-01    3.818e-01
   11    2462    3.784947e+01    4.199e-01    1.215e+00    1.714e-01
   12    2667    3.992462e+01    4.189e-01    8.400e-01    3.517e-01
   13    2871    4.115429e+01    4.169e-01    1.357e+00    1.620e-01
   14    3076    4.322313e+01    4.152e-01    8.331e-01    3.283e-01
   15    3279    4.552835e+01    4.117e-01    1.269e+00    3.022e-01
   16    3485    4.766957e+01    4.095e-01    8.125e-01    3.305e-01
   17    3688    4.984772e+01    4.065e-01    9.611e-01    2.693e-01
   18    3894    5.166196e+01    4.041e-01    8.358e-01    3.577e-01
   19    4097    5.368943e+01    4.015e-01    1.390e+00    2.484e-01
   20    4300    5.492509e+01    3.999e-01    1.423e+00    1.671e-01
   21    4504    5.571400e+01    3.990e-01    1.441e+00    1.136e-01
   22    4709    5.654259e+01    3.974e-01    1.002e+00    2.847e-01
   23    4912    5.812407e+01    3.954e-01    1.056e+00    2.151e-01
   24    5116    5.933829e+01    3.940e-01    1.259e+00    1.665e-01
   25    5321    6.088653e+01    3.914e-01    9.539e-01    4.438e-01
   26    5524    6.198172e+01    3.901e-01    9.813e-01    1.422e-01
   27    5728    6.312914e+01    3.887e-01    1.008e+00    1.582e-01
   28    5932    6.437608e+01    3.873e-01    1.207e+00    1.811e-01
   29    6138    6.478036e+01    3.862e-01    9.834e-01    2.314e-01
   30    6341    6.596643e+01    3.848e-01    1.259e+00    1.704e-01

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
   31    6545    6.734614e+01    3.834e-01    1.523e+00    2.040e-01
   32    6750    6.853683e+01    3.808e-01    1.008e+00    4.433e-01
   33    6953    6.969508e+01    3.797e-01    1.037e+00    1.751e-01
   34    7157    7.078433e+01    3.786e-01    1.066e+00    1.712e-01
   35    7361    7.176073e+01    3.777e-01    1.093e+00    1.442e-01
   36    7566    7.256858e+01    3.759e-01    9.856e-01    3.314e-01
   37    7770    7.330543e+01    3.752e-01    9.606e-01    1.197e-01
   38    7973    7.405992e+01    3.746e-01    9.679e-01    1.355e-01
   39    8176    7.455505e+01    3.742e-01    1.067e+00    8.892e-02
   40    8380    7.493849e+01    3.739e-01    1.137e+00    6.800e-02
   41    8585    7.532454e+01    3.733e-01    8.650e-01    2.183e-01
   42    8788    7.616046e+01    3.726e-01    9.281e-01    1.426e-01
   43    8991    7.703016e+01    3.720e-01    9.055e-01    1.525e-01
   44    9194    7.769486e+01    3.715e-01    1.124e+00    1.131e-01
   45    9398    7.830733e+01    3.710e-01    9.867e-01    1.021e-01
   46    9604    7.860404e+01    3.709e-01    8.034e-01    2.121e-01
   47    9806    7.976916e+01    3.701e-01    8.766e-01    2.044e-01
   48   10009    8.044248e+01    3.696e-01    8.923e-01    1.202e-01
   49   10213    8.080860e+01    3.694e-01    9.065e-01    7.035e-02
   50   10418    8.116466e+01    3.689e-01    8.905e-01    2.309e-01
   51   10621    8.166794e+01    3.686e-01    9.379e-01    9.517e-02
   52   10824    8.208080e+01    3.684e-01    9.039e-01    8.486e-02
   53   11029    8.265646e+01    3.675e-01    8.419e-01    2.204e-01
   54   11232    8.317005e+01    3.672e-01    8.202e-01    9.329e-02
   55   11436    8.361580e+01    3.670e-01    8.200e-01    8.631e-02
   56   11642    8.377611e+01    3.670e-01    7.363e-01    1.790e-01
   57   11845    8.424129e+01    3.668e-01    7.142e-01    9.412e-02
   58   12051    8.447760e+01    3.664e-01    6.893e-01    1.671e-01
   59   12254    8.489110e+01    3.662e-01    7.268e-01    8.874e-02
   60   12460    8.518125e+01    3.660e-01    8.133e-01    1.650e-01

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
   61   12663    8.555697e+01    3.658e-01    8.453e-01    7.695e-02
   62   12869    8.579338e+01    3.656e-01    8.094e-01    1.588e-01
   63   13072    8.610777e+01    3.654e-01    7.938e-01    6.550e-02
   64   13276    8.647404e+01    3.652e-01    7.781e-01    7.884e-02
   65   13480    8.681429e+01    3.650e-01    7.690e-01    7.256e-02
   66   13686    8.712799e+01    3.648e-01    6.917e-01    1.851e-01
   67   13888    8.749273e+01    3.647e-01    6.154e-01    7.430e-02
   68   14092    8.777420e+01    3.645e-01    6.312e-01    6.178e-02
   69   14298    8.800216e+01    3.643e-01    6.248e-01    1.425e-01
   70   14502    8.814709e+01    3.642e-01    6.041e-01    3.395e-02
   71   14707    8.838838e+01    3.634e-01    8.000e-01    1.603e-01
   72   14914    8.854968e+01    3.636e-01    6.412e-01    9.891e-02
   73   15117    8.871294e+01    3.635e-01    6.409e-01    4.574e-02
   74   15323    8.885534e+01    3.632e-01    8.218e-01    8.493e-02
   75   15526    8.900836e+01    3.632e-01    7.923e-01    4.306e-02
   76   15732    8.915260e+01    3.633e-01    6.067e-01    8.620e-02
   77   15934    8.944860e+01    3.632e-01    6.271e-01    7.860e-02
   78   16141    8.961513e+01    3.632e-01    6.949e-01    7.419e-02
   79   16344    8.977023e+01    3.631e-01    7.172e-01    4.604e-02
   80   16550    8.994396e+01    3.631e-01    7.168e-01    6.858e-02
   81   16753    9.010974e+01    3.630e-01    7.165e-01    5.181e-02
   82   16958    9.037209e+01    3.629e-01    6.693e-01    1.268e-01
   83   17161    9.050936e+01    3.629e-01    6.743e-01    3.731e-02
   84   17366    9.076418e+01    3.629e-01    4.885e-01    1.071e-01
   85   17570    9.089985e+01    3.628e-01    4.141e-01    3.835e-02
   86   17775    9.116192e+01    3.627e-01    4.523e-01    1.122e-01
   87   17979    9.129583e+01    3.627e-01    3.880e-01    3.764e-02
   88   18184    9.155738e+01    3.626e-01    3.794e-01    1.103e-01
   89   18388    9.162774e+01    3.625e-01    3.502e-01    2.154e-02
   90   18593    9.175743e+01    3.625e-01    6.891e-01    6.452e-02

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
   91   18796    9.190074e+01    3.624e-01    6.761e-01    4.506e-02
   92   19001    9.213238e+01    3.623e-01    6.251e-01    1.046e-01
   93   19205    9.225482e+01    3.622e-01    6.160e-01    3.550e-02
   94   19411    9.236779e+01    3.623e-01    8.203e-01    8.479e-02
   95   19614    9.249018e+01    3.622e-01    7.635e-01    3.745e-02
   96   19820    9.260888e+01    3.621e-01    6.324e-01    8.006e-02
   97   20023    9.273108e+01    3.621e-01    6.569e-01    3.802e-02
   98   20227    9.291657e+01    3.621e-01    6.428e-01    5.730e-02
   99   20431    9.308428e+01    3.620e-01    6.935e-01    5.251e-02
  100   20635    9.323416e+01    3.620e-01    7.183e-01    4.427e-02
  101   20841    9.338479e+01    3.619e-01    6.593e-01    9.663e-02
  102   21044    9.353426e+01    3.619e-01    4.932e-01    4.440e-02
  103   21248    9.366823e+01    3.619e-01    4.574e-01    4.041e-02
  104   21452    9.381101e+01    3.618e-01    4.479e-01    4.584e-02
  105   21656    9.396918e+01    3.618e-01    4.995e-01    4.772e-02
  106   21862    9.413508e+01    3.617e-01    3.470e-01    9.355e-02
  107   22065    9.429163e+01    3.617e-01    3.423e-01    4.407e-02
  108   22269    9.444122e+01    3.616e-01    4.069e-01    4.825e-02
  109   22473    9.456056e+01    3.616e-01    4.224e-01    4.065e-02
  110   22677    9.466555e+01    3.616e-01    4.828e-01    3.926e-02
  111   22881    9.477665e+01    3.615e-01    5.110e-01    3.935e-02
  112   23087    9.493684e+01    3.615e-01    3.230e-01    9.823e-02
  113   23291    9.499324e+01    3.615e-01    3.180e-01    1.782e-02
  114   23497    9.507076e+01    3.613e-01    2.817e-01    5.911e-02
  115   23699    9.518550e+01    3.613e-01    2.704e-01    3.797e-02
  116   23906    9.525688e+01    3.611e-01    2.431e-01    5.304e-02
  117   24108    9.536314e+01    3.611e-01    2.535e-01    3.385e-02
  118   24315    9.543227e+01    3.611e-01    2.323e-01    4.794e-02
  119   24517    9.553932e+01    3.611e-01    2.369e-01    3.497e-02
  120   24721    9.568624e+01    3.611e-01    2.586e-01    5.056e-02

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
  121   24928    9.577855e+01    3.611e-01    2.450e-01    6.732e-02
  122   25130    9.592175e+01    3.611e-01    2.291e-01    4.912e-02
  123   25337    9.601085e+01    3.611e-01    2.339e-01    5.703e-02
  124   25539    9.614475e+01    3.610e-01    2.492e-01    4.489e-02
  125   25746    9.623359e+01    3.610e-01    3.971e-01    5.269e-02
  126   25948    9.636960e+01    3.610e-01    4.267e-01    4.897e-02
  127   26155    9.646771e+01    3.610e-01    2.452e-01    6.041e-02
  128   26358    9.654359e+01    3.610e-01    2.426e-01    3.130e-02
  129   26564    9.663795e+01    3.609e-01    2.513e-01    6.082e-02
  130   26768    9.668029e+01    3.609e-01    2.498e-01    1.936e-02
  131   26973    9.677450e+01    3.609e-01    2.496e-01    7.406e-02
  132   27177    9.679697e+01    3.609e-01    2.487e-01    1.091e-02
  133   27382    9.684297e+01    3.609e-01    2.422e-01    3.163e-02
  134   27586    9.691528e+01    3.609e-01    2.398e-01    3.417e-02
  135   27792    9.698602e+01    3.608e-01    2.350e-01    5.465e-02
  136   27995    9.705386e+01    3.608e-01    2.327e-01    3.062e-02
  137   28201    9.711951e+01    3.608e-01    3.572e-01    4.437e-02
  138   28404    9.718633e+01    3.608e-01    3.765e-01    3.096e-02
  139   28609    9.729549e+01    3.608e-01    2.253e-01    6.737e-02
  140   28812    9.735092e+01    3.608e-01    2.235e-01    2.389e-02
  141   29017    9.744598e+01    3.608e-01    5.291e-01    6.910e-02
  142   29221    9.749671e+01    3.608e-01    5.311e-01    2.134e-02
  143   29426    9.758153e+01    3.608e-01    1.950e-01    9.248e-02
  144   29628    9.767190e+01    3.607e-01    1.948e-01    3.600e-02
  145   29835    9.771639e+01    3.608e-01    5.178e-01    7.563e-02
  146   30037    9.780019e+01    3.608e-01    4.979e-01    3.359e-02
  147   30244    9.784724e+01    3.608e-01    6.808e-01    5.803e-02
  148   30447    9.789427e+01    3.608e-01    6.689e-01    2.234e-02
  149   30652    9.798180e+01    3.608e-01    5.194e-01    8.318e-02
  150   30855    9.802287e+01    3.608e-01    5.130e-01    1.830e-02

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
  151   31061    9.806240e+01    3.609e-01    4.835e-01    6.627e-02
  152   31264    9.810819e+01    3.609e-01    4.767e-01    2.264e-02
  153   31470    9.814220e+01    3.609e-01    3.571e-01    5.603e-02
  154   31673    9.818899e+01    3.609e-01    3.640e-01    2.481e-02
  155   31878    9.825974e+01    3.609e-01    7.325e-01    5.842e-02
  156   32082    9.830224e+01    3.609e-01    7.207e-01    2.157e-02
  157   32287    9.835648e+01    3.609e-01    7.319e-01    6.343e-02
  158   32490    9.843270e+01    3.609e-01    7.202e-01    3.728e-02
  159   32694    9.849863e+01    3.609e-01    7.104e-01    3.326e-02
  160   32898    9.856999e+01    3.609e-01    6.936e-01    3.458e-02
  161   33102    9.864609e+01    3.608e-01    6.733e-01    4.182e-02
  162   33308    9.869909e+01    3.609e-01    7.042e-01    9.876e-02
  163   33512    9.873499e+01    3.609e-01    7.011e-01    1.797e-02
  164   33716    9.876098e+01    3.609e-01    6.973e-01    1.562e-02
  165   33920    9.878460e+01    3.609e-01    6.940e-01    1.349e-02
  166   34123    9.883094e+01    3.609e-01    6.855e-01    2.600e-02
  167   34326    9.889082e+01    3.609e-01    6.676e-01    4.175e-02
  168   34530    9.892568e+01    3.609e-01    6.579e-01    3.383e-02
  169   34734    9.896105e+01    3.608e-01    6.523e-01    2.549e-02
  170   34940    9.899999e+01    3.609e-01    9.027e-01    8.787e-02
  171   35142    9.905565e+01    3.609e-01    8.835e-01    2.116e-02
  172   35345    9.913300e+01    3.609e-01    8.689e-01    4.328e-02
  173   35553    9.914553e+01    3.609e-01    1.124e+00    7.140e-02
  174   35754    9.923558e+01    3.609e-01    1.084e+00    4.206e-02
  175   35956    9.927181e+01    3.608e-01    1.062e+00    3.485e-02
  176   36160    9.928590e+01    3.608e-01    1.058e+00    2.266e-02
  177   36365    9.932905e+01    3.608e-01    1.179e+00    9.158e-02
  178   36567    9.933967e+01    3.608e-01    1.153e+00    2.240e-02
  179   36768    9.940861e+01    3.608e-01    1.121e+00    3.574e-02
  180   36978    9.939963e+01    3.608e-01    1.214e+00    4.039e-02

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
  181   37179    9.943997e+01    3.608e-01    1.305e+00    2.937e-02
  182   37382    9.946265e+01    3.608e-01    1.273e+00    3.118e-02
  183   37591    9.948112e+01    3.608e-01    1.398e+00    5.946e-02
  184   37793    9.948873e+01    3.608e-01    1.380e+00    7.889e-03
  185   37995    9.952161e+01    3.608e-01    1.371e+00    3.532e-02
  186   38199    9.953442e+01    3.608e-01    1.360e+00    1.652e-02
  187   38403    9.954716e+01    3.608e-01    1.349e+00    1.707e-02
  188   38607    9.956361e+01    3.608e-01    1.345e+00    2.144e-02
  189   38815    9.957654e+01    3.608e-01    1.332e+00    4.852e-02
  190   39017    9.958903e+01    3.608e-01    1.331e+00    8.562e-03
  191   39224    9.961652e+01    3.608e-01    1.377e+00    5.308e-02
  192   39426    9.962151e+01    3.608e-01    1.374e+00    5.135e-03
  193   39632    9.963847e+01    3.608e-01    1.298e+00    4.395e-02
  194   39834    9.964741e+01    3.608e-01    1.302e+00    9.186e-03
  195   40038    9.966281e+01    3.607e-01    1.310e+00    1.560e-02
  196   40246    9.967073e+01    3.607e-01    1.268e+00    3.208e-02
  197   40448    9.968197e+01    3.607e-01    1.265e+00    1.017e-02
  198   40655    9.969563e+01    3.607e-01    1.209e+00    3.002e-02
  199   40857    9.970676e+01    3.607e-01    1.212e+00    1.080e-02
  200   41064    9.972170e+01    3.607e-01    1.183e+00    2.820e-02
  201   41266    9.973310e+01    3.607e-01    1.181e+00    1.134e-02
  202   41473    9.974579e+01    3.607e-01    1.165e+00    2.627e-02
  203   41675    9.975550e+01    3.607e-01    1.164e+00    9.787e-03
  204   41882    9.976639e+01    3.607e-01    1.139e+00    2.633e-02
  205   42084    9.977689e+01    3.607e-01    1.137e+00    8.992e-03
  206   42288    9.980316e+01    3.607e-01    1.138e+00    2.661e-02
  207   42496    9.980930e+01    3.607e-01    1.118e+00    2.819e-02
  208   42698    9.981118e+01    3.606e-01    1.087e+00    3.049e-02
  209   42899    9.983848e+01    3.606e-01    1.085e+00    2.369e-02
  210   43102    9.985244e+01    3.606e-01    1.090e+00    2.777e-02

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
  211   43305    9.986430e+01    3.606e-01    1.085e+00    2.978e-02
  212   43507    9.988523e+01    3.606e-01    1.087e+00    3.811e-02
  213   43711    9.989773e+01    3.606e-01    1.086e+00    2.149e-02
  214   43914    9.990490e+01    3.606e-01    1.084e+00    2.507e-02
  215   44118    9.991540e+01    3.606e-01    1.077e+00    2.292e-02
  216   44321    9.993125e+01    3.606e-01    8.895e-01    5.071e-02
  217   44523    9.993030e+01    3.606e-01    8.934e-01    4.667e-02
  218   44724    9.994125e+01    3.606e-01    8.796e-01    3.002e-02
  219   44927    9.995030e+01    3.606e-01    8.469e-01    3.048e-02
  220   45130    9.996037e+01    3.606e-01    8.441e-01    2.786e-02
  221   45334    9.996315e+01    3.606e-01    8.493e-01    1.713e-02
  222   45538    9.996587e+01    3.606e-01    8.512e-01    1.429e-02
  223   45741    9.996987e+01    3.606e-01    8.714e-01    2.015e-02
  224   45945    9.997381e+01    3.606e-01    8.726e-01    1.424e-02
  225   46148    9.997837e+01    3.606e-01    8.652e-01    1.425e-02
  226   46351    9.998424e+01    3.606e-01    8.476e-01    1.930e-02
  227   46554    9.999071e+01    3.606e-01    8.398e-01    1.769e-02
  228   46759    9.998876e+01    3.606e-01    8.135e-01    2.617e-02
  229   46961    9.998787e+01    3.605e-01    7.852e-01    2.737e-02
  230   47164    9.998728e+01    3.605e-01    8.342e-01    1.222e-02
  231   47366    9.998724e+01    3.605e-01    8.152e-01    1.682e-02
  232   47567    9.998714e+01    3.605e-01    8.447e-01    1.535e-02
  233   47769    9.998699e+01    3.605e-01    8.312e-01    7.291e-03
  234   47970    9.998729e+01    3.605e-01    8.143e-01    1.061e-02
  235   48173    9.998722e+01    3.605e-01    8.085e-01    6.778e-03
  236   48375    9.998725e+01    3.605e-01    7.932e-01    6.609e-03
  237   48577    9.998722e+01    3.605e-01    7.842e-01    6.982e-03
  238   48779    9.998720e+01    3.605e-01    7.712e-01    6.922e-03
  239   48981    9.998717e+01    3.604e-01    7.592e-01    6.865e-03
  240   49183    9.998717e+01    3.604e-01    7.472e-01    6.898e-03

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
  241   49385    9.998715e+01    3.604e-01    7.331e-01    6.797e-03
  242   49587    9.998717e+01    3.604e-01    7.233e-01    6.820e-03
  243   49789    9.998717e+01    3.604e-01    7.082e-01    6.775e-03
  244   49991    9.998718e+01    3.604e-01    7.010e-01    6.876e-03
  245   50193    9.998718e+01    3.604e-01    6.849e-01    6.799e-03
  246   50395    9.998719e+01    3.604e-01    6.778e-01    6.951e-03
  247   50597    9.998717e+01    3.604e-01    6.647e-01    6.856e-03
  248   50799    9.998717e+01    3.604e-01    6.539e-01    7.026e-03
  249   51001    9.998715e+01    3.604e-01    6.453e-01    7.002e-03
  250   51203    9.998714e+01    3.604e-01    6.311e-01    7.085e-03
  251   51405    9.998713e+01    3.604e-01    6.259e-01    7.107e-03
  252   51607    9.998712e+01    3.604e-01    6.101e-01    7.125e-03
  253   51809    9.998711e+01    3.604e-01    6.064e-01    7.152e-03
  254   52011    9.998710e+01    3.604e-01    5.898e-01    7.141e-03
  255   52213    9.998710e+01    3.604e-01    5.874e-01    7.170e-03
  256   52414    9.998709e+01    3.604e-01    5.704e-01    7.146e-03
  257   52616    9.998708e+01    3.604e-01    5.681e-01    7.179e-03
  258   52817    9.998707e+01    3.604e-01    5.522e-01    7.148e-03
  259   53018    9.998707e+01    3.604e-01    5.498e-01    7.185e-03
  260   53219    9.998707e+01    3.604e-01    5.345e-01    7.149e-03
  261   53420    9.998707e+01    3.604e-01    5.383e-01    7.194e-03
  262   53621    9.998706e+01    3.604e-01    5.416e-01    7.154e-03
  263   53822    9.998707e+01    3.604e-01    5.577e-01    7.201e-03
  264   54023    9.998706e+01    3.604e-01    5.603e-01    7.157e-03
  265   54224    9.998707e+01    3.604e-01    5.760e-01    7.209e-03
  266   54425    9.998706e+01    3.604e-01    5.782e-01    7.168e-03
  267   54626    9.998708e+01    3.604e-01    5.936e-01    7.229e-03
  268   54827    9.998707e+01    3.604e-01    5.952e-01    7.228e-03
  269   55028    9.998708e+01    3.604e-01    6.102e-01    7.141e-03
  270   55229    9.998710e+01    3.604e-01    6.121e-01    7.215e-03

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
  271   55430    9.998711e+01    3.603e-01    6.264e-01    6.941e-03
  272   55632    9.998736e+01    3.603e-01    6.267e-01    5.463e-04
  273   55835    9.999316e+01    3.603e-01    6.330e-01    1.714e-02
  274   56042    9.999308e+01    3.603e-01    6.328e-01    8.242e-03
  275   56245    9.999300e+01    3.603e-01    6.392e-01    4.284e-03
  276   56447    9.999306e+01    3.603e-01    6.475e-01    4.225e-03
  277   56649    9.999305e+01    3.603e-01    6.558e-01    4.549e-03
  278   56851    9.999305e+01    3.603e-01    6.630e-01    4.546e-03
  279   57053    9.999305e+01    3.603e-01    6.714e-01    4.550e-03
  280   57255    9.999306e+01    3.603e-01    6.789e-01    4.558e-03
  281   57457    9.999306e+01    3.603e-01    6.862e-01    4.545e-03
  282   57659    9.999306e+01    3.603e-01    6.945e-01    4.555e-03
  283   57861    9.999306e+01    3.603e-01    7.010e-01    4.537e-03
  284   58063    9.999307e+01    3.603e-01    7.098e-01    4.555e-03
  285   58265    9.999307e+01    3.603e-01    7.146e-01    4.526e-03
  286   58467    9.999308e+01    3.603e-01    7.243e-01    4.568e-03
  287   58668    9.999308e+01    3.603e-01    7.276e-01    4.525e-03
  288   58870    9.999309e+01    3.603e-01    7.378e-01    4.591e-03
  289   59071    9.999310e+01    3.603e-01    7.399e-01    4.528e-03
  290   59273    9.999311e+01    3.603e-01    7.509e-01    4.620e-03
  291   59474    9.999312e+01    3.603e-01    7.517e-01    4.549e-03
  292   59676    9.999313e+01    3.603e-01    7.625e-01    4.650e-03
  293   59877    9.999314e+01    3.603e-01    7.628e-01    4.576e-03
  294   60079    9.999315e+01    3.603e-01    7.736e-01    4.677e-03
  295   60280    9.999316e+01    3.603e-01    7.741e-01    4.600e-03
  296   60482    9.999317e+01    3.603e-01    7.845e-01    4.703e-03
  297   60683    9.999318e+01    3.603e-01    7.851e-01    4.630e-03
  298   60885    9.999319e+01    3.603e-01    7.947e-01    4.726e-03
  299   61086    9.999320e+01    3.603e-01    7.955e-01    4.657e-03
  300   61288    9.999321e+01    3.603e-01    8.049e-01    4.749e-03

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
  301   61489    9.999322e+01    3.603e-01    8.058e-01    4.683e-03
  302   61691    9.999323e+01    3.603e-01    8.145e-01    4.769e-03
  303   61893    9.999329e+01    3.603e-01    8.145e-01    1.972e-04

Optimization stopped because the relative changes in all elements of x are
less than options.StepTolerance = 1.000000e-04, but the relative maximum constraint
violation, 3.602926e-01, exceeds options.ConstraintTolerance = 1.000000e-01.


Consider enabling the interior point method feasibility mode.

Elapsed time is 26.164288 seconds.

Process the results

phi = [unwrap(atan2(u(1,:),u(2,:))) zeros(1,nPts-nF)];
acc = [Mag(u) zeros(1,nPts-nF)];
[aError, xError] = ApproachConst2DIneq( u, d, t(1:nF), x0, [rP;0;vEll]);
x    = Simulate2DApproach( t, x0, phi, acc, d );
[aAch, eAch] = RV2AE( [x(1:2,end);0], [x(3:4,end);0], d.mu );
disp('Target Orbit [sma ecc]:')
disp([sma ecc])
disp('Orbit Achieved:')
disp([aAch eAch])

% Final value of constraints
DispWithTitle(xError,'Constraint Error')
dVAch = sum(Mag(u))*(t(2)-t(1))*aMax*1000;
DispWithTitle(dV*1000,'Impulsive Delta-V (m/s)')
DispWithTitle(dVAch,'Low Thrust Delta-V (m/s)')
DispWithTitle(dVTime/3600,'Approach Duration (hrs)')

% Plot the orbit insertion trajectory
NewFig('Trajectory')
plot(xZ(1,:),xZ(2,:),'linewidth',2);
hold on;
plot(x(1,:),x(2,:),'color',[0 0.8 0],'linewidth',2);
m     = nF/5;
j     = [1:m:nF nF];
for k = 1:length(j)
  i = j(k);
  s = sprintf('   %4.1f (%s)',tS(i),tU);
  plot(x(1,i),x(2,i),'b*');
	text(x(1,i),x(2,i),s,'fontsize',12);
end
pP = Map('Pluto');
hP = PlotPlanet([0;0;0],pP.radius,pP,true);
hold on
kQ = [1:2:nF nF];
qs = quiver(x(1,kQ),x(2,kQ),u(1,kQ),u(2,kQ),0.4,'r');
axis equal
legend('Flyby', 'Insertion','location','BestOutside');
yA = axis;
dY = yA(4)-yA(3);
dX = yA(2)-yA(1);
text(yA(1)+0.05*dX,0,sprintf('Thrust = %d N',thrust),'fontsize',12);
text(yA(1)+0.05*dX,-0.05*dY,sprintf('Mass = %d kg',mass),'fontsize',12);
text(yA(1)+0.05*dX,-0.1*dY,sprintf('DV = %3.0f m/s',dVAch),'fontsize',12);
title('Fixed Mass, Minimum Fuel Optimization')

% Plot the thrust angle and magnitude
[tP,tL] = TimeLabl(t);
Plot2D(tP(1:nF),[acc(1:nF);phi(1:nF)*180/pi],tL,{'Throttle' '\phi (deg)'},'Planar Orbit Insertion');
PlotDoubleYAxis( tP(1:nF), acc(1:nF), phi(1:nF)*180/pi, tL,...
  'Throttle' , '\phi (deg)', 'Planar Orbit Insertion' )
Plot2D(tP,[acc0*aMax zeros(1,nF);phi0  zeros(1,nF)],tL,{'Accel (km/s^2)' '\phi (deg)'},'Acceleration');
subplot(2,1,1)
hold on
plot(tP,acc)
subplot(2,1,2)
hold on
plot(tP,phi)
legend('Initial guess','Solution')

if 0
  filename = input('Please enter a filename for the run: ','s');
  save(['PlutoInsertion-' filename])
end


%--------------------------------------

% $Id: b1fa4a8e6d0504761753862464525eeb73b63435 $
Target Orbit [sma ecc]:
         1776      0.21115

Orbit Achieved:
        11552      0.77375

Constraint Error
      0.21518
    0.0014944
      0.36029

Impulsive Delta-V (m/s)
       388.74

Low Thrust Delta-V (m/s)
       398.62

Approach Duration (hrs)
       67.489


ans = 

  Line with properties:

              Color: [0.85098 0.32549 0.098039]
          LineStyle: '-'
          LineWidth: 0.5
             Marker: 'none'
         MarkerSize: 6
    MarkerFaceColor: 'none'
              XData: [0 0.27684 0.55367 0.83051 1.1073 … ] (1×100 double)
              YData: [-91.121 -90.959 -90.944 -90.516 … ] (1×100 double)

  Use GET to show all properties