Skip to content

10. Single-stage rocket ascent

Apply the Goddard problem to a rocket described in meters, seconds, kilograms, and newtons. How should thrust vary to carry a 5000 kg rocket as high as possible with 3000 kg of propellant?

ItemDefinition
StatesDistance from Earth’s center RR, vertical velocity vv, mass mm
ControlThrust TT
ObjectiveMaximize final radius, hence altitude
PhasesOne phase, 50 nodes, free final time
New conceptsPhysical rocket parameters, specific impulse, and scaling

The rocket flies vertically from the surface, burning propellant and becoming lighter. Drag grows with speed but decreases with atmospheric density. Gravity also decreases with altitude. As in Example 07, maximum thrust throughout is not necessarily optimal. Here all equations use physical units.

R˙=v,v˙=T−Dm−GMR2,m˙=−Tg0Isp,\dot R=v,\qquad\dot v=\frac{T-D}m-\frac{GM}{R^2},\qquad \dot m=-\frac{T}{g_0I_{sp}}, D=12ρ(R−Re)v2CdA,ρ(h)=ρ0e−h/H.D=\tfrac12\rho(R-R_e)v^2C_dA,\qquad\rho(h)=\rho_0e^{-h/H}.

RR is distance from Earth’s center; altitude is h=R−Reh=R-R_e. Specific impulse IspI_{sp} measures engine efficiency; g0Ispg_0I_{sp} is effective exhaust velocity. Larger IspI_{sp} uses less propellant for the same thrust. Atmospheric density falls by a factor 1/e1/e per scale height H=8500H=8500 m.

R(0)=Re,v(0)=0,m(0)=5000 kg,v(tf)=0,m(tf)=2000 kg.R(0)=R_e,\quad v(0)=0,\quad m(0)=5000\ \mathrm{kg},\qquad v(t_f)=0,\quad m(t_f)=2000\ \mathrm{kg}.

The endpoint is the highest point after consuming all 3000 kg of propellant.

0≤T≤Tmax⁡,R≥Re,v≥0,2000≤m≤5000 kg,tf≥10 s,0\le T\le T_{\max},\quad R\ge R_e,\quad v\ge0,\quad 2000\le m\le5000\ \mathrm{kg},\quad t_f\ge10\ \mathrm s, Tmax⁡=2m(0)g0=98066.5 N,J=−R(tf)Re.T_{\max}=2m(0)g_0=98066.5\ \mathrm N,\qquad J=-\frac{R(t_f)}{R_e}.

Dividing by Earth radius scales the objective without changing its optimum.

SymbolMeaningValue
GMGMEarth gravitational parameter3.986004418×10143.986004418\times10^{14} m³/s²
ReR_eEarth radius6371 km
g0g_0Standard gravity9.80665 m/s²
m0,mfm_0,m_fInitial and dry masses5000, 2000 kg
Cd,AC_d,ADrag coefficient and area0.2, 10 m²
IspI_{sp}Specific impulse300 s
ρ0,H\rho_0,HSurface density and scale height1.225 kg/m³, 8500 m

At maximum thrust, consumption is about 33.3 kg/s, so all propellant would be exhausted in 90 s.

Use radius unit ReR_e, velocity unit GM/Re≈7.91\sqrt{GM/R_e}\approx7.91 km/s, mass unit 5000 kg, time unit about 805 s, and thrust unit about 49.1 kN. Equations and output stay in physical units (scaling).

Use time 0 to 600 s, cubic radius from ReR_e to Re+50R_e+50 km with zero endpoint slopes, and zero velocity. Mass is cubic from 5000 to 2000 kg, with initial slope −0.6 kg/s and final slope zero. Thrust decreases cubically from maximum to zero with zero endpoint slopes.

Altitude, velocity, mass, and thrust through 50 nodes. The red dotted line marks maximum thrust, about 98 kN.
Altitude, velocity, mass, and thrust through 50 nodes. The red dotted line marks maximum thrust, about 98 kN.
Vertical ascent beside velocity and thrust histories. The black vertical cursor marks the current time.
  • Maximum altitude: 65.5 km.
  • Burnout: about 114 s; highest point: 188 s.
  • Thrust follows maximum → intermediate → zero, as in Example 07.

For about the first 20 s, maximum thrust builds speed. As drag grows, thrust falls to roughly 70–80 kN, balancing drag and gravity losses along a singular arc. Once the atmosphere thins, the rocket consumes the remaining propellant and coasts upward. Throttling extends the burn beyond the 90 s maximum-thrust duration. The physical structure matches the dimensionless Goddard problem.

Thrust oscillations and a rounded burnout transition arise from representing a discontinuity with one polynomial. Splitting near burnout, as in Example 08, can improve this representation (multiple phases).

  • Set self.Cd to zero and compare the singular arc and maximum altitude with the drag-free result.
  • Raise self.Isp from 300 to 450 and inspect the increase in altitude.
  • Lower self.max_thrust, the initial thrust-to-weight ratio, to 1.5 and compare maximum-thrust and intermediate-thrust durations.
Terminal window
uv run python examples/10_rocket_ascent_single_stage.py

View the Python source on GitHub.