private IntermediatePointResult IntermediatePoint( MultidimensionalFunctionFDF fdf, Vector <double> x, Vector <double> p, double lambda, double pg, double stepa, double stepc, double fa, double fc, Vector <double> x1, Vector <double> dx, double step, double f) { double stepb = 0, fb; Trial: { double u = Math.Abs(pg * lambda * stepc); stepb = 0.5 * stepc * u / ((fc - fa) + u); } TakeStep(x, p, stepb, lambda, x1, dx); if (x.Equals(x1)) { return(new IntermediatePointResult { Step = 0, F = fa, Gradient = fdf.DF(x1) }); } fb = fdf.F(x1); if (fb >= fa && stepb > 0) { fc = fb; stepc = stepb; goto Trial; } var gradient = fdf.DF(x1); return(null); }