GeographicLib 2.6
Loading...
Searching...
No Matches
GeographicLib::TrigfunExt Class Reference

A function defined by its derivative and its inverse. More...

#include <GeographicLib/Trigfun.hpp>

Public Member Functions

 TrigfunExt ()
 TrigfunExt (const std::function< real(real)> &fp, real halfp, bool sym=false, real scale=-1)
real operator() (real x) const
real deriv (real x) const
real inv (real z) const
void ComputeInverse ()
bool Symmetric () const
int NCoeffs () const
int NCoeffsInv () const
real Max () const
real HalfPeriod () const
real HalfRange () const
real Slope () const

Detailed Description

A function defined by its derivative and its inverse.

This is an extension of Trigfun which allows a function to be defined by its derivative. In this case the derivative must be even, so that its integral is odd (and taken to be zero at the origin).

In addition, this class offers a flexible interface to computing the inverse of the function. If the inverse is only required at a few points

Example of use:

// Example of using the GeographicLib::TrigfunExt class.
#include <iostream>
#include <iomanip>
#include <exception>
using namespace std;
using namespace GeographicLib;
int main(int argc, const char* const argv[]) {
try {
// Integrate 1/sqrt(1 - k2*sin(x)^2) and compare this to the elliptic
// integral of the first kine.
double k2 = Math::sq(0.8);
auto f = [k2] (double x) -> double
{ return 1/sqrt(1 - k2 * Math::sq(sin(x))); };
TrigfunExt tfe(f, Math::pi()/2);
cout << "Number of coefficients: " << tfe.NCoeffs() << "\n";
cout << "x tf(x) tf(x)-F(x)\n";
for (int i = 0; i <= 20; ++i) {
double x = i/10.0;
cout << x << " " << tfe(x) << " " << tfe(x) - ell.F(x) << "\n";
}
}
catch (const std::exception& e) {
std::cerr << "Caught exception: " << e.what() << "\n";
return 1;
}
}
int main(int argc, const char *const argv[])
Header for GeographicLib::EllipticFunction class.
Header for GeographicLib::Trigfun class.
Elliptic integrals and functions.
static T sq(T x)
Definition Math.hpp:209
static T pi()
Definition Math.hpp:187
A function defined by its derivative and its inverse.
Definition Trigfun.hpp:498
Namespace for GeographicLib.

Definition at line 498 of file Trigfun.hpp.

Constructor & Destructor Documentation

◆ TrigfunExt() [1/2]

GeographicLib::TrigfunExt::TrigfunExt ( )
inline

Definition at line 532 of file Trigfun.hpp.

◆ TrigfunExt() [2/2]

GeographicLib::TrigfunExt::TrigfunExt ( const std::function< real(real)> & fp,
real halfp,
bool sym = false,
real scale = -1 )

Constructor specifying the derivative, an even periodic function

Parameters
[in]fpthe derivative function, fp(x) = f'(x).
[in]halfpthe half period.
[in]symis fp symmetric about the quarter period point (so it contains only odd Fourier harmonics)?
[in]scale;this is passed to the Trigfun constructor when finding the Fourier series for fp.
Warning
fp must be an even periodic function. In addition fp must be non-negative for the inverse of f to be computed (in this case, f is a monotonically increasing function). The inverse is undefined for sym = true.

Member Function Documentation

◆ operator()()

real GeographicLib::TrigfunExt::operator() ( real x) const
inline

Evaluate the TrigfunExt.

Parameters
[in]xthe function argument.
Returns
the function value f(x).

Definition at line 556 of file Trigfun.hpp.

◆ deriv()

real GeographicLib::TrigfunExt::deriv ( real x) const
inline

Evaluate the derivative for TrigfunExt.

Parameters
[in]xthe function argument.
Returns
the value of the derivate fp(x). This uses the function object passed to the constructor.

Definition at line 564 of file Trigfun.hpp.

◆ inv()

real GeographicLib::TrigfunExt::inv ( real z) const
inline

Evaluate the inverse of f

Parameters
[in]zthe vaule of f(x)
Returns
the value of x = f −1(z).

This compute the inverse using Newton's method with the derivate function fp supplied on construction. Initially, the starting guess is based on just the secular component of f(x). However, if ComputeInverse() is called, a rough Trigfun approximation to the inverse is found and this is used as the starting point for Newton's method.

Definition at line 577 of file Trigfun.hpp.

◆ ComputeInverse()

void GeographicLib::TrigfunExt::ComputeInverse ( )
inline

Compute a coarse Fourier series approximation of the inverse.

This is used to provide a better starting guess for Newton's method in inv(). Because ComputeInverse() is fairly expensive, this only makes sense if inv() will be called many times. In order to limit the expense in computing this approximate inverse, the number of Fourier componensts in the Trigfun for the inverse is limited to 3/2 of the number of components for f and the tolerance is set to the square root of the machine epsilon.

Definition at line 591 of file Trigfun.hpp.

◆ Symmetric()

bool GeographicLib::TrigfunExt::Symmetric ( ) const
inline
Returns
whether the function is symmetric about the quarter peroid point. If it is it, then the Fourier series has only odd harmonics.

Definition at line 602 of file Trigfun.hpp.

◆ NCoeffs()

int GeographicLib::TrigfunExt::NCoeffs ( ) const
inline
Returns
the number of terms in the Fourier series for f.

Definition at line 606 of file Trigfun.hpp.

◆ NCoeffsInv()

int GeographicLib::TrigfunExt::NCoeffsInv ( ) const
inline
Returns
the number of terms in the Fourier series for f−1.

Definition at line 611 of file Trigfun.hpp.

◆ Max()

real GeographicLib::TrigfunExt::Max ( ) const
inline
Returns
Max() for the underlying Trigfun.

Definition at line 617 of file Trigfun.hpp.

◆ HalfPeriod()

real GeographicLib::TrigfunExt::HalfPeriod ( ) const
inline
Returns
HalfPeriod() for the underlying Trigfun.

Definition at line 621 of file Trigfun.hpp.

◆ HalfRange()

real GeographicLib::TrigfunExt::HalfRange ( ) const
inline
Returns
HalfRange() for the underlying Trigfun.

Definition at line 625 of file Trigfun.hpp.

◆ Slope()

real GeographicLib::TrigfunExt::Slope ( ) const
inline
Returns
Slope() for the underlying Trigfun.

Definition at line 629 of file Trigfun.hpp.


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