private static double BisectExhaustMass(double deltaVelocity, Func <double, double> dryMassFunc, double exhaustVelocity, double minFuelMass, double maxFuelMass, double deltaVelocityTolerance = 0.1, int maxIterations = 100) { var fuelMassRange = maxFuelMass - minFuelMass; var optimumBurnedFuelRatio = Bisector.Find( deltaVelocity, deltaVelocityTolerance, ratio => { var burnedFuelMass = minFuelMass + fuelMassRange * ratio; // Check how fast we can get with this amount of fuel burned var dryMass = dryMassFunc(burnedFuelMass); var deltaVelocityBudget = Physics.GetDeltaVelocityBudget(dryMass, burnedFuelMass, exhaustVelocity); return(deltaVelocityBudget); }, maxIterations); return(minFuelMass + optimumBurnedFuelRatio * fuelMassRange); }
public TestBisector() { bi = new Bisector(new Bisector.FunctionDelegate(TestFunctions.xMinusLogXMinusTwo)); }