Skip to content
Snippets Groups Projects
Commit 093c3102 authored by Elias Pipping's avatar Elias Pipping
Browse files

[Cleanup] Refactor minimisation

parent e95f0bd4
No related branches found
No related tags found
No related merge requests found
...@@ -12,22 +12,16 @@ ...@@ -12,22 +12,16 @@
#include "mydirectionalconvexfunction.hh" #include "mydirectionalconvexfunction.hh"
template <class Functional> template <class Functional>
void descentMinimisation(Functional const &J, double lineSearch(Functional const &J,
typename Functional::LocalVector &x, typename Functional::LocalVector const &x,
typename Functional::LocalVector const &v, typename Functional::LocalVector const &v,
Bisection const &bisection) { Bisection const &bisection) {
using LocalVector = typename Functional::LocalVector; MyDirectionalConvexFunction<typename Functional::Nonlinearity> const JRest(
using LocalNonlinearity = typename Functional::Nonlinearity;
MyDirectionalConvexFunction<LocalNonlinearity> const JRest(
computeDirectionalA(J.A, v), computeDirectionalb(J.A, J.b, x, v), *J.phi, computeDirectionalA(J.A, v), computeDirectionalb(J.A, J.b, x, v), *J.phi,
x, v); x, v);
// }}}
int count; int count;
double const stepsize = bisection.minimize(JRest, 0.0, 0.0, count); return bisection.minimize(JRest, 0.0, 0.0, count);
Arithmetic::addProduct(x, stepsize, v);
} }
template <class Functional> template <class Functional>
...@@ -38,12 +32,14 @@ void minimise(Functional const &J, typename Functional::LocalVector &x, ...@@ -38,12 +32,14 @@ void minimise(Functional const &J, typename Functional::LocalVector &x,
for (size_t step = 0; step < steps; ++step) { for (size_t step = 0; step < steps; ++step) {
LocalVector v; LocalVector v;
J.gradient(x, v); J.gradient(x, v);
if (v.two_norm() == 0.0)
return;
double const vnorm = v.two_norm();
if (vnorm <= 0.0)
return;
v *= -1; v *= -1;
descentMinimisation(J, x, v, bisection); double const alpha = lineSearch(J, x, v, bisection);
Arithmetic::addProduct(x, alpha, v);
} }
} }
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment