Query: newton
OS: debian
Section: 4rheolef
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
newton(4rheolef) rheolef-6.1 newton(4rheolef)NAMEnewton -- Newton nonlinear algorithmDESCRIPTIONNonlinear Newton algorithm for the resolution of the following problem: F(u) = 0 A simple call to the algorithm writes: my_problem P; field uh (Vh); newton (P, uh, tol, max_iter); The my_problem class may contains methods for the evaluation of F (aka residue) and its derivative: class my_problem { public: my_problem(); field residue (const field& uh) const; void update_derivative (const field& uh) const; field derivative_solve (const field& mrh) const; Float norm (const field& uh) const; Float dual_norm (const field& Muh) const; }; See the example p-laplacian.h in the user's documentation for more.IMPLEMENTATIONtemplate <class Problem, class Field> int newton (Problem P, Field& uh, Float& tol, size_t& max_iter, odiststream *p_derr = 0) { if (p_derr) *p_derr << "# Newton: n r" << std::endl; for (size_t n = 0; true; n++) { Field rh = P.residue(uh); Float r = P.dual_norm(rh); if (p_derr) *p_derr << n << " " << r << std::endl; if (r <= tol) { tol = r; max_iter = n; return 0; } if (n == max_iter) { tol = r; return 1; } P.update_derivative (uh); Field delta_uh = P.derivative_solve (-rh); uh += delta_uh; } } rheolef-6.1 rheolef-6.1 newton(4rheolef)