1#ifndef NumericalApproximation_h
2#define NumericalApproximation_h
13#include <gsl/gsl_errno.h>
14#include <gsl/gsl_spline.h>
788 void AddData(
const double x,
const double y);
789 void AddData(
unsigned int n,
double *x,
double *y);
790 void AddData(
const vector <double> &x,
const vector <double> &y);
830 const double h = 0.1);
832 const double h = 0.1);
834 const double h = 0.1);
838 const double h = 0.1);
840 const double h = 0.1);
842 const double h = 0.1);
845 double GslIntegral(
const double a,
const double b);
849 double BoolesRule(
const double a,
const double b);
907 const unsigned int n);
911 const string &message,
const char *filesrc,
ErrorType
Contains a set of exception error types.
Definition IException.h:111
NumericalApproximation provides various numerical analysis methods of interpolation,...
Definition NumericalApproximation.h:726
void ValidateDataSet()
Validates the data set before computing interpolation.
Definition NumericalApproximation.cpp:2563
gsl_interp_accel * p_acc
Lookup accelorator.
Definition NumericalApproximation.h:869
void GslDeallocation()
Deallocate GSL interpolator resources, if used.
Definition NumericalApproximation.cpp:2466
void GslAllocation(unsigned int npoints)
Allocates GSL interpolation functions.
Definition NumericalApproximation.cpp:2444
double EvaluatePolynomialNeville(const double a)
Performs polynomial interpolation using Neville's algorithm.
Definition NumericalApproximation.cpp:3242
vector< double > p_x
List of X values.
Definition NumericalApproximation.h:862
vector< double > p_fprimeOfx
List of first derivatives corresponding to each x value in the data set (i.e. each value in p_x)
Definition NumericalApproximation.h:881
void ReportException(IException::ErrorType type, const string &method, const string &message, const char *filesrc, int lineno) const
Generalized error report generator.
Definition NumericalApproximation.cpp:3372
double GslFirstDerivative(const double a)
Approximates the first derivative of the data set function evaluated at the given domain value for GS...
Definition NumericalApproximation.cpp:1020
double p_clampedDerivLastPt
First derivative of last x-value, p_x[n-1]. This is only used for the CubicClamped interpolation type...
Definition NumericalApproximation.h:876
int FindIntervalLowerIndex(const double a)
Find the index of the x-value in the data set that is just below the input value, a.
Definition NumericalApproximation.cpp:3183
vector< double > CubicClampedSecondDerivatives()
Retrieves the second derivatives of the data set.
Definition NumericalApproximation.cpp:687
double DomainMinimum()
Input data domain minimum value.
Definition NumericalApproximation.cpp:723
bool GslInterpType(NumericalApproximation::InterpType itype) const
Returns whether an interpolation type is adapted from the GSL library.
Definition NumericalApproximation.cpp:2418
InterpFunctor GslFunctor(NumericalApproximation::InterpType itype) const
Search for a GSL interpolation function.
Definition NumericalApproximation.cpp:2492
bool p_clampedComputed
Flag variable to determine whether ComputeCubicClamped() has been called.
Definition NumericalApproximation.h:874
double Evaluate(const double a, const ExtrapType &etype=ThrowError)
Calculates interpolated or extrapolated value of tabulated data set for given domain value.
Definition NumericalApproximation.cpp:836
void Init(NumericalApproximation::InterpType itype)
Initializes the object upon instantiation.
Definition NumericalApproximation.cpp:2375
bool InsideDomain(const double a)
Returns whether the passed value is greater than or equal to the domain minimum and less than or equa...
Definition NumericalApproximation.cpp:2619
bool p_dataValidated
Flag variable to determine whether ValidateDataSet() has been called.
Definition NumericalApproximation.h:864
void GslIntegrityCheck(int gsl_status, const char *src, int line)
Checks the status of the GSL interpolation operations.
Definition NumericalApproximation.cpp:2523
void AddCubicHermiteDeriv(unsigned int n, double *fprimeOfx)
Adds values for the first derivatives of the data points.
Definition NumericalApproximation.cpp:592
const gsl_interp_type * InterpFunctor
GSL Interpolation specs.
Definition NumericalApproximation.h:866
void ComputeGsl()
Computes the GSL interpolation for a set of (x,y) data points.
Definition NumericalApproximation.cpp:2683
string Name() const
Get name of interpolating function assigned to object.
Definition NumericalApproximation.cpp:282
map< InterpType, InterpFunctor > FunctorList
Set up a std::map of GSL interpolator functors. List of function types.
Definition NumericalApproximation.h:867
double RombergsMethod(double a, double b)
Uses Romberg's method to approximate the integral of the interpolated data set function on the interv...
Definition NumericalApproximation.cpp:2179
InterpType
This enum defines the types of interpolation supported in this class.
Definition NumericalApproximation.h:731
@ CubicClamped
Cubic Spline interpolation with clamped boundary conditions.
Definition NumericalApproximation.h:735
@ CubicNatPeriodic
Cubic Spline interpolation with periodic boundary conditions.
Definition NumericalApproximation.h:736
@ Linear
Linear interpolation.
Definition NumericalApproximation.h:731
@ CubicHermite
Cubic Spline interpolation using the Hermite cubic polynomial.
Definition NumericalApproximation.h:738
@ CubicNeighborhood
Cubic Spline interpolation using 4-pt Neighborhoods with natural boundary conditions.
Definition NumericalApproximation.h:737
@ PolynomialNeville
Polynomial interpolation using Neville's algorithm.
Definition NumericalApproximation.h:733
@ CubicNatural
Cubic Spline interpolation with natural boundary conditions.
Definition NumericalApproximation.h:734
@ AkimaPeriodic
Non-rounded Akima Spline interpolation with periodic boundary conditions.
Definition NumericalApproximation.h:740
@ Polynomial
Polynomial interpolation.
Definition NumericalApproximation.h:732
@ Akima
Non-rounded Akima Spline interpolation with natural boundary conditions.
Definition NumericalApproximation.h:739
NumericalApproximation & operator=(const NumericalApproximation &numApMeth)
NumericalApproximation assigmment operator sets this object "equal to" another.
Definition NumericalApproximation.cpp:220
double TrapezoidalRule(const double a, const double b)
Uses the trapezoidal rule to approximate the integral of the interpolated data set function on the in...
Definition NumericalApproximation.cpp:1868
double RefineExtendedTrap(double a, double b, double s, unsigned int n)
Calculates refinements extended trapezoidal rule to approximate the integral of the interpolated data...
Definition NumericalApproximation.cpp:2096
double ValueToExtrapolate(const double a, const ExtrapType &etype)
Returns the domain value at which to evaluate.
Definition NumericalApproximation.cpp:2830
double GslSecondDerivative(const double a)
Approximates the second derivative of the interpolated data set function evaluated at the given domai...
Definition NumericalApproximation.cpp:1422
void ComputeCubicClamped()
Computes the cubic clamped interpolation for a set of (x,y) data points, given the first derivatives ...
Definition NumericalApproximation.cpp:2735
bool Contains(double x)
Returns whether the passed value is an element of the set of x-values in the data set.
Definition NumericalApproximation.cpp:793
void SetInterpType(NumericalApproximation::InterpType itype)
Sets interpolation type.
Definition NumericalApproximation.cpp:2319
double Simpsons4PointRule(const double a, const double b)
Uses Simpson's 4-point rule to approximate the integral of the interpolated data set function on the ...
Definition NumericalApproximation.cpp:1972
double BackwardFirstDifference(const double a, const unsigned int n=3, const double h=0.1)
Uses an n point backward first difference formula to approximate the first derivative evaluated at a ...
Definition NumericalApproximation.cpp:1159
double EvaluateCubicHermite(const double a)
Performs interpolation using the Hermite cubic polynomial.
Definition NumericalApproximation.cpp:3121
bool GslComputed() const
Returns whether a GSL interpolation computation of the data set has been performed.
Definition NumericalApproximation.cpp:2653
gsl_spline * p_interp
Currently active interpolator.
Definition NumericalApproximation.h:870
double GslIntegral(const double a, const double b)
Approximates the integral of the data set function evaluated on the given interval for GSL supported ...
Definition NumericalApproximation.cpp:1797
void Reset()
Resets the state of the object.
Definition NumericalApproximation.cpp:2251
FunctorList::const_iterator FunctorConstIter
GSL Iterator.
Definition NumericalApproximation.h:868
vector< double > p_clampedSecondDerivs
List of second derivatives evaluated at p_x values. This is only used for the CubicClamped interpolat...
Definition NumericalApproximation.h:877
bool p_clampedEndptsSet
Flag variable to determine whether SetCubicClampedEndptDeriv() has been called after all data was add...
Definition NumericalApproximation.h:873
NumericalApproximation(const NumericalApproximation::InterpType &itype=CubicNatural)
Default constructor creates NumericalApproximation object.
Definition NumericalApproximation.cpp:41
double CenterSecondDifference(const double a, const unsigned int n=5, const double h=0.1)
Uses an n point center second difference formula to approximate the second derivative evaluated at a ...
Definition NumericalApproximation.cpp:1716
double p_clampedDerivFirstPt
First derivative of first x-value, p_x[0]. This is only used for the CubicClamped interpolation type.
Definition NumericalApproximation.h:875
InterpType p_itype
Interpolation type.
Definition NumericalApproximation.h:861
double EvaluateCubicHermiteSecDeriv(const double a)
Approximates the second derivative of the data set function evaluated at the given domain value for C...
Definition NumericalApproximation.cpp:1474
double Simpsons3PointRule(const double a, const double b)
Uses Simpson's 3-point rule to approximate the integral of the interpolated data set function on the ...
Definition NumericalApproximation.cpp:1920
static FunctorList p_interpFunctors
Maintains list of interpolator options.
Definition NumericalApproximation.h:871
double DomainMaximum()
Input data domain maximum value.
Definition NumericalApproximation.cpp:760
double EvaluateCubicClamped(const double a)
Performs cubic spline interpolation with clamped boundary conditions, if possible.
Definition NumericalApproximation.cpp:3060
virtual ~NumericalApproximation()
Destructor deallocates memory being used.
Definition NumericalApproximation.cpp:256
double BackwardSecondDifference(const double a, const unsigned int n=3, const double h=0.1)
Uses an n point backward second difference formula to approximate the second derivative evaluated at ...
Definition NumericalApproximation.cpp:1546
double ForwardFirstDifference(const double a, const unsigned int n=3, const double h=0.1)
Uses an n point forward first difference formula to approximate the first derivative evaluated at a g...
Definition NumericalApproximation.cpp:1248
double BoolesRule(const double a, const double b)
Uses Boole's Rule to approximate the integral of the interpolated data set function on the interval (...
Definition NumericalApproximation.cpp:2027
vector< double > p_polyNevError
Estimate of error for interpolation evaluated at x. This is only used for the PolynomialNeville inter...
Definition NumericalApproximation.h:879
double EvaluateCubicNeighborhood(const double a)
Performs cubic spline interpolation for a neighborhood about a.
Definition NumericalApproximation.cpp:2893
double CenterFirstDifference(const double a, const unsigned int n=5, const double h=0.1)
Uses an n point center first difference formula to approximate the first derivative evaluated at a gi...
Definition NumericalApproximation.cpp:1338
double EvaluateCubicHermiteFirstDeriv(const double a)
Approximates the first derivative of the data set function evaluated at the given domain value for Cu...
Definition NumericalApproximation.cpp:1071
ExtrapType
This enum defines the manner in which a value outside of the domain should be handled if passed to th...
Definition NumericalApproximation.h:813
@ NearestEndpoint
Evaluate() returns the y-value of the nearest endpoint if a is outside of the domain.
Definition NumericalApproximation.h:817
@ ThrowError
Evaluate() throws an error if a is outside of the domain.
Definition NumericalApproximation.h:813
@ Extrapolate
Evaluate() attempts to extrapolate if a is outside of the domain. This is only valid for NumericalApp...
Definition NumericalApproximation.h:814
InterpType InterpolationType()
Returns the enumerated type of interpolation chosen.
Definition NumericalApproximation.h:781
unsigned int Size()
Returns the number of the coordinates added to the data set.
Definition NumericalApproximation.h:805
int MinPoints()
Minimum number of points required by interpolating function.
Definition NumericalApproximation.cpp:333
double ForwardSecondDifference(const double a, const unsigned int n=3, const double h=0.1)
Uses an n point forward second difference formula to approximate the second derivative evaluated at a...
Definition NumericalApproximation.cpp:1628
vector< double > PolynomialNevilleErrorEstimate()
Retrieves the error estimate for the Neville's polynomial interpolation type.
Definition NumericalApproximation.cpp:970
vector< double > p_y
List of Y values.
Definition NumericalApproximation.h:863
void SetCubicClampedEndptDeriv(const double yp1, const double ypn)
Sets the values for the first derivatives of the endpoints of the data set.
Definition NumericalApproximation.cpp:565
void AddData(const double x, const double y)
Add a datapoint to the set.
Definition NumericalApproximation.cpp:440
vector< double > EvaluateForIntegration(const double a, const double b, const unsigned int n)
Evaluates data set in order to have enough data points to approximate the function to be integrated.
Definition NumericalApproximation.cpp:3306
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
Namespace for the standard library.