20#ifndef CCGSL_ROOTS_HPP
21#define CCGSL_ROOTS_HPP
24#include<gsl/gsl_roots.h>
43 typedef gsl_root_fsolver_type
type;
60 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
110#ifdef __GXX_EXPERIMENTAL_CXX0X__
116 std::swap(
count, v.count );
117 v.ccgsl_pointer =
nullptr;
125 fsolver( std::move( v ) ).swap( *
this );
235#ifdef __GXX_EXPERIMENTAL_CXX0X__
269 return gsl_root_fsolver_iterate( s.
get() ); }
277 return std::string( gsl_root_fsolver_name( s.
get() ) ); }
285 return gsl_root_fsolver_root( s.
get() ); }
293 return gsl_root_fsolver_x_lower( s.
get() ); }
301 return gsl_root_fsolver_x_upper( s.
get() ); }
334 char const*
name()
const {
return gsl_root_fsolver_name(
get() ); }
340 double root()
const {
return gsl_root_fsolver_root(
get() ); }
346 double x_lower()
const {
return gsl_root_fsolver_x_lower(
get() ); }
352 double x_upper()
const {
return gsl_root_fsolver_x_upper(
get() ); }
363 inline static type const*
brent(){
return gsl_root_fsolver_brent; }
368 inline static type const*
falsepos(){
return gsl_root_fsolver_falsepos; }
381 typedef gsl_root_fdfsolver_type
type;
398 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
448#ifdef __GXX_EXPERIMENTAL_CXX0X__
454 std::swap(
count, v.count );
455 v.ccgsl_pointer =
nullptr;
463 fdfsolver( std::move( v ) ).swap( *
this );
573#ifdef __GXX_EXPERIMENTAL_CXX0X__
586 return gsl_root_fdfsolver_set( s.
get(), &
fdf,
root ); }
596 return gsl_root_fdfsolver_set( s.
get(),
fdf,
root ); }
612 return std::string( gsl_root_fdfsolver_name( s.
get() ) ); }
619 inline static double root(
fdfsolver const& s ){
return gsl_root_fdfsolver_root( s.
get() ); }
628 return gsl_root_fdfsolver_set(
get(), &
fdf,
root ); }
636 int set( gsl_function_fdf*
fdf,
double root ){
637 return gsl_root_fdfsolver_set(
get(),
fdf,
root ); }
650 char const*
name(){
return gsl_root_fdfsolver_name(
get() ); }
656 double root(){
return gsl_root_fdfsolver_root(
get() ); }
662 inline static type const*
newton(){
return gsl_root_fdfsolver_newton; }
667 inline static type const*
secant(){
return gsl_root_fdfsolver_secant; }
687 inline int interval(
double x_lower,
double x_upper,
double epsabs,
double epsrel ){
688 return gsl_root_test_interval( x_lower, x_upper, epsabs, epsrel ); }
697 return gsl_root_test_residual( f, epsabs ); }
707 inline int delta(
double x1,
double x0,
double epsabs,
double epsrel ){
708 return gsl_root_test_delta( x1, x0, epsabs, epsrel ); }
Class that extends gsl_function_fdf so that it can be constructed from arbitrary function objects.
Class that extends gsl_function so that it can be constructed from arbitrary function objects.
Workspace for root finding with a derivative.
static std::string name(fdfsolver const &s)
C++ version of gsl_root_fdfsolver_name().
int iterate()
C++ version of gsl_root_fdfsolver_iterate().
double root()
C++ version of gsl_root_fdfsolver_root().
static double root(fdfsolver const &s)
C++ version of gsl_root_fdfsolver_root().
size_t use_count() const
Find how many fdfsolver objects share this pointer.
size_t * count
The shared reference count.
static int iterate(fdfsolver &s)
C++ version of gsl_root_fdfsolver_iterate().
fdfsolver()
The default constructor is only really useful for assigning to.
static int set(fdfsolver &s, function_fdf &fdf, double root)
C++ version of gsl_root_fdfsolver_set().
fdfsolver(fdfsolver &&v)
Move constructor.
static type const * newton()
Static type.
bool operator<(fdfsolver const &v) const
A container needs to define an ordering for sorting.
fdfsolver & operator=(fdfsolver const &v)
The assignment operator.
int set(function_fdf &fdf, double root)
C++ version of gsl_root_fdfsolver_set().
bool operator>=(fdfsolver const &v) const
A container needs to define an ordering for sorting.
fdfsolver(gsl_root_fdfsolver *v)
Could construct from a gsl_root_fdfsolver.
fdfsolver(type const *T)
The default constructor creates a new fdfsolver of one of the type fdfsolver::type.
gsl_root_fdfsolver_type type
Typedef.
bool empty() const
Find if the fdfsolver is empty.
fdfsolver & operator=(fdfsolver &&v)
Move operator.
gsl_root_fdfsolver * ccgsl_pointer
The shared pointer.
bool operator!=(fdfsolver const &v) const
Two fdfsolver are different if their elements are not identical.
static type const * secant()
Static type.
gsl_root_fdfsolver * get() const
Get the gsl_root_fdfsolver.
bool unique() const
Find if this is the only object sharing the gsl_root_fdfsolver.
static type const * steffenson()
Static type.
bool operator<=(fdfsolver const &v) const
A container needs to define an ordering for sorting.
void swap(fdfsolver &v)
Swap two fdfsolver.
fdfsolver(fdfsolver const &v)
The copy constructor.
bool operator>(fdfsolver const &v) const
A container needs to define an ordering for sorting.
~fdfsolver()
The destructor only deletes the pointers if count reaches zero.
char const * name()
C++ version of gsl_root_fdfsolver_name().
bool operator==(fdfsolver const &v) const
Two fdfsolver are identically equal if their elements are identical.
Workspace for root finding without a derivative.
static type const * bisection()
Static type.
double x_upper() const
C++ version of gsl_root_fsolver_x_upper().
bool operator>(fsolver const &v) const
A container needs to define an ordering for sorting.
gsl_root_fsolver * get() const
Get the gsl_root_fsolver.
void swap(fsolver &v)
Swap two fsolver.
gsl_root_fsolver_type type
Typedef.
bool operator==(fsolver const &v) const
Two fsolver are identically equal if their elements are identical.
static int iterate(fsolver &s)
C++ version of gsl_root_fsolver_iterate().
int iterate()
C++ version of gsl_root_fsolver_iterate().
~fsolver()
The destructor only deletes the pointers if count reaches zero.
static std::string name(fsolver const &s)
C++ version of gsl_root_fsolver_name().
fsolver(fsolver &&v)
Move constructor.
size_t * count
The shared reference count.
bool operator!=(fsolver const &v) const
Two fsolver are different if their elements are not identical.
bool empty() const
Find if the fsolver is empty.
static type const * falsepos()
Static type.
fsolver(gsl_root_fsolver *v)
Could construct from a gsl_root_fsolver.
bool operator>=(fsolver const &v) const
A container needs to define an ordering for sorting.
bool operator<(fsolver const &v) const
A container needs to define an ordering for sorting.
gsl_root_fsolver * ccgsl_pointer
The shared pointer.
bool operator<=(fsolver const &v) const
A container needs to define an ordering for sorting.
char const * name() const
C++ version of gsl_root_fsolver_name().
int set(function_scl &f, double x_lower, double x_upper)
C++ version of gsl_root_fsolver_set().
static double root(fsolver const &s)
C++ version of gsl_root_fsolver_root().
fsolver & operator=(fsolver &&v)
Move operator.
double x_lower() const
C++ version of gsl_root_fsolver_x_lower().
double root() const
C++ version of gsl_root_fsolver_root().
static int set(fsolver &s, function_scl &f, double x_lower, double x_upper)
C++ version of gsl_root_fsolver_set().
fsolver()
The default constructor is only really useful for assigning to.
fsolver & operator=(fsolver const &v)
The assignment operator.
fsolver(type const *T)
The default constructor creates a new fsolver of type fsolver::type.
static double x_upper(fsolver const &s)
C++ version of gsl_root_fsolver_x_upper().
bool unique() const
Find if this is the only object sharing the gsl_root_fsolver.
fsolver(fsolver const &v)
The copy constructor.
static type const * brent()
Static type.
size_t use_count() const
Find how many fsolver objects share this pointer.
static double x_lower(fsolver const &s)
C++ version of gsl_root_fsolver_x_lower().
int test(double const xtol, double const gtol, double const ftol, int *info, workspace const &w)
C++ version of gsl_multifit_nlinear_test().
gsl_multilarge_nlinear_fdf fdf
Typedef for shorthand.
int residual(double f, double epsabs)
C++ version of gsl_root_test_residual().
int delta(double x1, double x0, double epsabs, double epsrel)
C++ version of gsl_root_test_delta().
int interval(double x_lower, double x_upper, double epsabs, double epsrel)
C++ version of gsl_root_test_interval().
The gsl package creates an interface to the GNU Scientific Library for C++.