diff --git a/src/bisection-example-flexible.cc b/src/bisection-example-flexible.cc index a3d06cdf0ff5bdc0613ed96188d7622dd32d0fd2..75847a33c61533f65329a32e09f051bd3cebe05f 100644 --- a/src/bisection-example-flexible.cc +++ b/src/bisection-example-flexible.cc @@ -63,7 +63,7 @@ class SampleFunctional { while (true) { tmp = x; tmp.axpy(r, descDir); - if (directionalDerivative(tmp, descDir) >= 0) + if (pseudoDirectionalDerivative(tmp, descDir) >= 0) break; l = r; @@ -91,12 +91,13 @@ class SampleFunctional { middle = descDir; middle *= m; - double derivative = directionalDerivative(x + middle, descDir); + double pseudoDerivative = + pseudoDirectionalDerivative(x + middle, descDir); - if (derivative < 0) { + if (pseudoDerivative < 0) { l = m; m = (m + r) / 2; - } else if (derivative > 0) { + } else if (pseudoDerivative > 0) { r = m; m = (l + m) / 2; } else @@ -131,7 +132,9 @@ class SampleFunctional { return y; } - // |dir|-times the directional derivative wrt dir/|dir|. + // |dir|-times the directional derivative wrt dir/|dir|. If only + // the sign of the directionalDerivative matters, this saves the + // cost of normalising. double pseudoDirectionalDerivative(const SmallVector x, const SmallVector dir) const { if (x == SmallVector(0.0))