gsl_mroot_hybrids_new Class Template Reference

#include <gsl_mroot_hybrids_new.h>

Inheritance diagram for gsl_mroot_hybrids_new:

mroot hybrids_base

Detailed Description

template<class param_t, class func_t = mm_funct<param_t>, class vec_t = ovector_view, class alloc_vec_t = ovector, class alloc_t = ovector_alloc, class mat_t = omatrix_view, class alloc_mat_t = omatrix, class mat_alloc_t = omatrix_alloc, class jfunc_t = jac_funct<param_t,vec_t,mat_t>>
class gsl_mroot_hybrids_new< param_t, func_t, vec_t, alloc_vec_t, alloc_t, mat_t, alloc_mat_t, mat_alloc_t, jfunc_t >

Multidimensional root-finding algorithm using Powell's Hybrid method (GSL).

This is a recasted version of the GSL routines which use a modified version of Powell's Hybrid method as implemented in the HYBRJ algorithm in MINPACK. Both the scaled and unscaled options are available by setting int_scaling (the scaled version is the default). If derivatives are not provided, they will be computed automatically. This class provides the GSL-like interface using allocate(), set() (or set_de() in case where derivatives are available), iterate(), and free() and higher-level interfaces, msolve() and msolve_de(), which perform the solution automatically. Some additional checking is performed in case the user calls the functions out of order (i.e. set() without allocate()).

The functions msolve() and msolve_de() use the condition $ \sum_i |f_i| < $ mroot::tolf to determine if the solver has succeeded.

The original GSL algorithm has been modified to shrink the stepsize if a proposed step causes the function to return a non-zero value. This allows the routine to automatically try to avoid regions where the function is not defined. To return to the default GSL behavior, set shrink_step to false.

Todo:
Need to complete generalization to generic matrix types

Definition at line 292 of file gsl_mroot_hybrids_new.h.


Public Member Functions

virtual int set_jacobian (jacobian< param_t, func_t, vec_t, mat_t > &j)
 Set the automatic Jacobian object.
int iterate ()
 Perform an iteration.
int allocate (size_t n)
 Allocate the memory.
int free ()
 Free the allocated memory.
virtual const char * type ()
 Return the type,"gsl_mroot_hybrids_new".
virtual int msolve_de (size_t nn, vec_t &xx, param_t &pa, func_t &ufunc, jfunc_t &dfunc)
 Solve func with derivatives dfunc using x as an initial guess,returning x.
virtual int msolve (size_t nn, vec_t &xx, param_t &pa, func_t &ufunc)
 Solve ufunc using xx as an initial guess,returning xx.
int set (size_t nn, vec_t &ax, func_t &ufunc, param_t &pa)
 Set the function, the parameters, and the initial guess.
int set_de (size_t nn, vec_t &ax, func_t &ufunc, jfunc_t &dfunc, param_t &pa)
 Set the function, the Jacobian, the parameters, and the initial guess.

Data Fields

bool shrink_step
 If true, iterate() will shrink the step-size automatically if the function returns a non-zero value (default true).
bool int_scaling
 If true, use the internal scaling method (default true).
simple_jacobian< param_t,
func_t, vec_t, mat_t,
alloc_vec_t, alloc_t > 
def_jac
 Default automatic Jacobian object.
alloc_vec_t f
 The value of the function at the present iteration.
alloc_vec_t x
 The present solution.

Protected Member Functions

void compute_Rg_new (size_t N, const gsl_matrix *r, const gsl_vector *gradient, vec_t &Rg)
 Desc.
void compute_wv_new (size_t n, const gsl_vector *qtdf, const gsl_vector *rdx, const vec_t &dxx, const gsl_vector *diag, double pnorm, gsl_vector *w, gsl_vector *v)
 Desc.
void compute_rdx_new (size_t N, const gsl_matrix *r, const vec_t &dxx, gsl_vector *rdx)
 Desc.
double scaled_enorm_new (size_t n, const gsl_vector *d, const vec_t &ff)
 Desc.
double compute_delta_new (size_t n, gsl_vector *diag, vec_t &xx)
 Desc.
double enorm_new (const vec_t &ff)
 Desc.
int compute_trial_step_new (size_t N, vec_t &xl, vec_t &dxl, vec_t &xx_trial)
 Desc.
int compute_df_new (size_t n, const vec_t &ff_trial, const vec_t &fl, gsl_vector *dfl)
 Desc.
void compute_diag_new (size_t n, const mat_t &J, gsl_vector *diag)
 Desc.
void compute_qtf_new (size_t N, const gsl_matrix *q, const vec_t &ff, gsl_vector *qtf)
 Desc.
void update_diag_new (size_t n, const mat_t &J, gsl_vector *diag)
 Desc.
void scaled_addition_new (size_t N, double alpha, gsl_vector *newton, double beta, gsl_vector *gradient, vec_t &p)
 Desc.
int dogleg_new (size_t n, const gsl_matrix *r, const gsl_vector *qtf, const gsl_vector *diag, double delta, gsl_vector *newton, gsl_vector *gradient, vec_t &p)
 Desc.
int solve_set (size_t nn, vec_t &xx, param_t &pa, func_t &ufunc)
 Finish the solution after set() or set_de() has been called.

Protected Attributes

jfunc_t * jac
 Pointer to the user-specified Jacobian object.
jacobian< param_t, func_t,
vec_t, mat_t > * 
ajac
 Pointer to the automatic Jacobian object.
alloc_t ao
 Memory allocator for objects of type alloc_vec_t.
alloc_vec_t dx
 The value of the derivative.
alloc_vec_t x_trial
 Trial root.
alloc_vec_t f_trial
 Trial function value.
o2scl_hybrid_state_t< vec_t,
alloc_vec_t, alloc_t, mat_t,
alloc_mat_t, mat_alloc_t > 
state
 The solver state.
param_t * params
 The function parameters.
size_t dim
 The number of equations and unknowns.
bool jac_given
 True if the jacobian has been given.
func_t * fnewp
 Pointer to the user-specified function.
bool set_called
 True if "set" has been called.

Member Function Documentation

int iterate (  )  [inline]

Perform an iteration.

At the end of the iteration, the current value of the solution is stored in x.

Definition at line 685 of file gsl_mroot_hybrids_new.h.

int set_de ( size_t  nn,
vec_t &  ax,
func_t &  ufunc,
jfunc_t &  dfunc,
param_t &  pa 
) [inline]

Set the function, the Jacobian, the parameters, and the initial guess.

Make sure set() uses the right Jacobian

Reset jac_given since set() will set it back to false

Definition at line 1064 of file gsl_mroot_hybrids_new.h.


Field Documentation

bool shrink_step

If true, iterate() will shrink the step-size automatically if the function returns a non-zero value (default true).

The original GSL behavior can be obtained by setting this to false.

Definition at line 650 of file gsl_mroot_hybrids_new.h.


The documentation for this class was generated from the following file:

Documentation generated with Doxygen and provided under the GNU Free Documentation License. See License Information for details.

Project hosting provided by SourceForge.net Logo, O2scl Sourceforge Project Page