diff --git a/src/bisection-simpler-example2-gradient.cc b/src/bisection-simpler-example2-gradient.cc index d1624413acd9635f7b781225bbc5effe9fd41158..4f37d098700121cee5491c1e611b64304c6d78e9 100644 --- a/src/bisection-simpler-example2-gradient.cc +++ b/src/bisection-simpler-example2-gradient.cc @@ -53,24 +53,27 @@ class SampleFunctional : public SmallFunctional<dimension> { double l = 0; double r = 1; - SmallVector tmp = descDir; - tmp *= r; - while (directionalDerivative(x + tmp, descDir) < 0) { + SmallVector tmp; + while (true) { + tmp = x; + tmp.axpy(r, descDir); + if (directionalDerivative(tmp, descDir) >= 0) + break; + l = r; r *= 2; - tmp *= 2; Dune::dverb << "Widened interval!" << std::endl; } Dune::dverb << "Interval now [" << l << "," << r << "]" << std::endl; // Debugging { - SmallVector tmpl = tmp; - tmpl *= l; - SmallVector tmpr = tmp; - tmpr *= r; - assert(directionalDerivative(x + tmpl, descDir) < 0); - assert(directionalDerivative(x + tmpr, descDir) > 0); + SmallVector tmpl = x; + tmpl.axpy(l, descDir); + SmallVector tmpr = x; + tmpr.axpy(r, descDir); + assert(directionalDerivative(tmpl, descDir) < 0); + assert(directionalDerivative(tmpr, descDir) > 0); } double m = l / 2 + r / 2;