I was doing some calculations, mainly a Hohmann transfer between the following two orbits...
Note my calculations assume 0 perigee argument, 0 inclination and 0 right ascension...
Orbit start (400 km by 680 km) - 2000kg object around Earth:
Orbit [calculateAngularVector()=CartesianVector(R_null x (V_null)) [x=[X=0.0 units], y=[Y=-0.0 units], z=[Z=52876.19575761092 units], thetaX=[Theta_X=90.0 degrees], thetaY=[Theta_Y=90.0 degrees], thetaZ=[Theta_Z=0.0 degrees], magnitude=52876.19575761092]
calculateNodeLine()=CartesianVector(K x (R_null x (V_null))) [x=[X=0.0 units], y=[Y=-0.0 units], z=[Z=-0.0 units], thetaX=[Theta_X=NaN degrees], thetaY=[Theta_Y=NaN degrees], thetaZ=[Theta_Z=NaN degrees], magnitude=0.0]
calculateRightAscension()=NaN
calculatePerigeeArgument()=NaN
calculateTrueAnomaly()=0.0
calculateEccentricityVector()=CartesianVector(1/u * (V_null x (R_null x (V_null)) - (u/r * (R_null)))) [x=[X=0.02279851809632382 units], y=[Y=-0.0 units], z=[Z=-0.0 units], thetaX=[Theta_X=0.0 degrees], thetaY=[Theta_Y=90.0 degrees], thetaZ=[Theta_Z=90.0 degrees], magnitude=0.02279851809632382]
calculateEccentricity()=0.02279851809632382
calculateRadialVelocity()=0.0
calculateInclination()=0.0
calculateDistance()=6858.0
calculatePerigee()=6858.000000000001
calculateApogee()=7178.000000000002
calculateSemimajorAxis()=7018.000000000002
calculatePeriod()=5851.045803184948]
Object End (160000.0km by 160001.0km) - Same object:
Orbit [calculateAngularVector()=CartesianVector(R_null x (V_null)) [x=[X=0.0 units], y=[Y=-0.0 units], z=[Z=257522.40441584107 units], thetaX=[Theta_X=90.0 degrees], thetaY=[Theta_Y=90.0 degrees], thetaZ=[Theta_Z=0.0 degrees], magnitude=257522.40441584107]
calculateNodeLine()=CartesianVector(K x (R_null x (V_null))) [x=[X=0.0 units], y=[Y=-0.0 units], z=[Z=-0.0 units], thetaX=[Theta_X=NaN degrees], thetaY=[Theta_Y=NaN degrees], thetaZ=[Theta_Z=NaN degrees], magnitude=0.0]
calculateRightAscension()=NaN
calculatePerigeeArgument()=NaN
calculateTrueAnomaly()=8.537736462515939E-7
calculateEccentricityVector()=CartesianVector(1/u * (V_null x (R_null x (V_null)) - (u/r * (R_null)))) [x=[X=3.0051959839618283E-6 units], y=[Y=-0.0 units], z=[Z=-0.0 units], thetaX=[Theta_X=0.0 degrees], thetaY=[Theta_Y=90.0 degrees], thetaZ=[Theta_Z=90.0 degrees], magnitude=3.0051959839618283E-6]
calculateEccentricity()=3.0051959839618283E-6
calculateRadialVelocity()=0.0
calculateInclination()=0.0
calculateDistance()=166378.0
calculatePerigee()=166377.99999999997
calculateApogee()=166379.00000000003
calculateSemimajorAxis()=166378.5
calculatePeriod()=675397.2047353692]
It takes the following amount of delta V to do a transfer from Perigee:
calculateDeltaVPerigeeStartPerigee()=2.8558760969614045 // m/s Delta-V @ Start Perigee
calculateDeltaVPerigeeStartApogee()=1.1122834635697387 // m/s Delta-V @ End Apogee
calculateDeltaVPerigeeStartTotal()=3.9681595605311433 // Total Delta-V
3.97 km/s delta-V
As opposed to the following amount, when the transfer starts from apogee:
calculateDeltaVApogeeStartPerigee()=2.9518675645424466 // m/s Delta-V @ Start Apogee
calculateDeltaVApogeeStartApogee()=1.102656019906142 // m/s Delta-V @ End Perigee
calculateDeltaVApogeeStartTotal()=4.054523584448589 // Total Delta-V
4.06 km/s delta-V
That's almost 2.2% more efficient!
Are my calculations significantly off? If not:
Why is it better to do a Hohmann transfer (an elliptical orbit to a circular one) from the lowest point of the orbit first as opposed to the highest in easy to understand terms?
I'm guessing it's due to the Oberth effect, but I still don't fully understand that in mathematical terms.
Original source of problem (Curtis - Orbital Mechanics):
https://i.stack.imgur.com/RNfNO.png https://i.stack.imgur.com/XYdjC.png
My results for those numbers matched the example.
calculateDeltaVPerigeeStartPerigee()=1.7225646100116112
calculateDeltaVPerigeeStartApogee()=1.32964358158842
calculateDeltaVPerigeeStartTotal()=3.052208191600031
calculateDeltaVApogeeStartPerigee()=1.8035364946124215
calculateDeltaVApogeeStartApogee()=1.2790980806818717
calculateDeltaVApogeeStartTotal()=3.082634575294293
Which is 1% more efficient, it seems to scale with the size of the maneuver.