CoolProp
CoolProp::Polynomial2DFrac Class Reference

## Detailed Description

A class for polynomials starting at an arbitrary degree.

It is implemented for the incompressibles and is a little messy, but seems to work fine for now. Besides handling arbitrary starting exponents for the polynomials, it can also calculate polynomials with a base value. This means that the independent variable no longer is x, but (x-x_base). For fitted functions, we often see such a design to enhance the fit quality/stability.

#include <PolyMath.h>

Inheritance diagram for CoolProp::Polynomial2DFrac:

## Public Member Functions

Polynomial2DFrac ()
Constructors.

virtual ~Polynomial2DFrac ()
Destructor. No implementation.

Eigen::MatrixXd deriveCoeffs (const Eigen::MatrixXd &coefficients, const int &axis, const int &times, const int &firstExponent)
Integrating coefficients for polynomials is done by dividing the original coefficients by (i+1) and elevating the order by 1 through adding a zero as first coefficient. More...

double evaluate (const Eigen::MatrixXd &coefficients, const double &x_in, const int &firstExponent=0, const double &x_base=0.0)
The core functions to evaluate the polynomial. More...

double evaluate (const Eigen::MatrixXd &coefficients, const double &x_in, const double &y_in, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0)

double derivative (const Eigen::MatrixXd &coefficients, const double &x_in, const double &y_in, const int &axis, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0)

double integral (const Eigen::MatrixXd &coefficients, const double &x_in, const double &y_in, const int &axis, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0, const double &ax_val=0.0)

Eigen::VectorXd solve (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const int &axis, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0)
Returns a vector with ALL the real roots of p(x_in,y_in)-z_in. More...

double solve_limits (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const double &min, const double &max, const int &axis, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0)
Uses the Brent solver to find the roots of p(x_in,y_in)-z_in. More...

double solve_guess (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const double &guess, const int &axis, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0)
Uses the Newton solver to find the roots of p(x_in,y_in)-z_in. More...

double solve_limitsInt (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const double &min, const double &max, const int &axis, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0, const int &int_axis=0)
Uses the Brent solver to find the roots of Int(p(x_in,y_in))-z_in. More...

double solve_guessInt (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const double &guess, const int &axis, const int &x_exp, const int &y_exp, const double &x_base=0.0, const double &y_base=0.0, const int &int_axis=0)
Uses the Newton solver to find the roots of Int(p(x_in,y_in))-z_in. More...

Public Member Functions inherited from CoolProp::Polynomial2D
Polynomial2D ()
Constructors.

virtual ~Polynomial2D ()
Destructor. No implementation.

Eigen::MatrixXd convertCoefficients (const std::vector< double > &coefficients)
Convert the coefficient vector. More...

Eigen::MatrixXd convertCoefficients (const std::vector< std::vector< double > > &coefficients)
Convert the coefficient matrix. More...

bool checkCoefficients (const Eigen::MatrixXd &coefficients, const unsigned int rows, const unsigned int columns)
Basic checks for coefficient vectors. More...

Eigen::MatrixXd integrateCoeffs (const Eigen::MatrixXd &coefficients, const int &axis, const int &times)
Integration functions. More...

Eigen::MatrixXd deriveCoeffs (const Eigen::MatrixXd &coefficients, const int &axis=-1, const int &times=1)
Derivative coefficients calculation. More...

double evaluate (const Eigen::MatrixXd &coefficients, const double &x_in)
The core functions to evaluate the polynomial. More...

double evaluate (const Eigen::MatrixXd &coefficients, const double &x_in, const double &y_in)

double derivative (const Eigen::MatrixXd &coefficients, const double &x_in, const double &y_in, const int &axis)

double integral (const Eigen::MatrixXd &coefficients, const double &x_in, const double &y_in, const int &axis)

Eigen::VectorXd solve (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const int &axis)
Returns a vector with ALL the real roots of p(x_in,y_in)-z_in. More...

double solve_limits (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const double &min, const double &max, const int &axis)
Uses the Brent solver to find the roots of p(x_in,y_in)-z_in. More...

double solve_guess (const Eigen::MatrixXd &coefficients, const double &in, const double &z_in, const double &guess, const int &axis)
Uses the Newton solver to find the roots of p(x_in,y_in)-z_in. More...

## Protected Member Functions

double factorial (const int &nValue)
Simple integrated centred(!) polynomial function generator divided by independent variable. More...

double binom (const int &nValue, const int &nValue2)

Eigen::MatrixXd fracIntCentralDvector (const int &m, const double &x_in, const double &x_base)
Helper function to calculate the D vector: More...

double fracIntCentral (const Eigen::MatrixXd &coefficients, const double &x_in, const double &x_base)
Indefinite integral of a centred polynomial divided by its independent variable. More...

Protected Member Functions inherited from CoolProp::Polynomial2D
double solve_limits (Poly2DResidual *res, const double &min, const double &max)
Uses the Brent solver to find the roots of p(x_in,y_in)-z_in. More...

double solve_guess (Poly2DResidual *res, const double &guess)
Uses the Newton solver to find the roots of p(x_in,y_in)-z_in. More...

double simplePolynomial (const std::vector< double > &coefficients, double x)
Simple polynomial function generator. <- Deprecated due to poor performance, use Horner-scheme instead. More...

DEPRECATED (double simplePolynomial(const std::vector< std::vector< double > > &coefficients, double x, double y))

double baseHorner (const std::vector< double > &coefficients, double x)
Horner function generator implementations. More...

DEPRECATED (double baseHorner(const std::vector< std::vector< double > > &coefficients, double x, double y))

bool do_debug (void)

## § binom()

 double CoolProp::Polynomial2DFrac::binom ( const int & nValue, const int & nValue2 )
protected
Parameters
 nValue integer value that represents the upper part of the factorial nValue2 integer value that represents the lower part of the factorial

## § derivative()

 double CoolProp::Polynomial2DFrac::derivative ( const Eigen::MatrixXd & coefficients, const double & x_in, const double & y_in, const int & axis, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0 )
Parameters
 coefficients vector containing the ordered coefficients x_in double value that represents the current input in the 1st dimension y_in double value that represents the current input in the 2nd dimension axis unsigned integer value that represents the axis to derive for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension coefficients vector containing the ordered coefficients x_in double value that represents the current input in the 1st dimension y_in double value that represents the current input in the 2nd dimension axis integer value that represents the axis to derive for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension

## § deriveCoeffs()

 Eigen::MatrixXd CoolProp::Polynomial2DFrac::deriveCoeffs ( const Eigen::MatrixXd & coefficients, const int & axis, const int & times, const int & firstExponent )

Integrating coefficients for polynomials is done by dividing the original coefficients by (i+1) and elevating the order by 1 through adding a zero as first coefficient.

Some reslicing needs to be applied to integrate along the x-axis. In the brine/solution equations, reordering of the parameters avoids this expensive operation. However, it is included for the sake of completeness.Derivative coefficients calculation Deriving coefficients for polynomials is done by multiplying the original coefficients with i and lowering the order by 1.

Remember that the first exponent might need to be adjusted after derivation. It has to be lowered by times: derCoeffs = deriveCoeffs(coefficients, axis, times, firstExponent); firstExponent -= times;

Parameters
 coefficients matrix containing the ordered coefficients axis unsigned integer value that represents the desired direction of derivation times integer value that represents the desired order of derivation firstExponent integer value that represents the lowest exponent of the polynomial in axis direction

## § evaluate() [1/2]

 double CoolProp::Polynomial2DFrac::evaluate ( const Eigen::MatrixXd & coefficients, const double & x_in, const int & firstExponent = 0, const double & x_base = 0.0 )

The core functions to evaluate the polynomial.

It is here we implement the different special functions that allow us to specify certain types of polynomials.

Try to avoid many calls to the derivative and integral functions. Both of them have to calculate the new coefficients internally, which slows things down. Instead, you should use the deriveCoeffs and integrateCoeffs functions and store the coefficient matrix you need for future calls to evaluate derivative and integral.

Parameters
 coefficients vector containing the ordered coefficients x_in double value that represents the current input in the 1st dimension firstExponent integer value that represents the lowest exponent of the polynomial x_base double value that represents the base value for a centered fit in the 1st dimension

It is here we implement the different special functions that allow us to specify certain types of polynomials.

Try to avoid many calls to the derivative and integral functions. Both of them have to calculate the new coefficients internally, which slows things down. Instead, you should use the deriveCoeffs and integrateCoeffs functions and store the coefficient matrix you need for future calls to evaluate derivative and integral.

Parameters
 coefficients vector containing the ordered coefficients x_in double value that represents the current input in the 1st dimension firstExponent integer value that represents the lowest exponent of the polynomial x_base double value that represents the base value for a centred fit in the 1st dimension

## § evaluate() [2/2]

 double CoolProp::Polynomial2DFrac::evaluate ( const Eigen::MatrixXd & coefficients, const double & x_in, const double & y_in, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0 )
Parameters
 coefficients matrix containing the ordered coefficients x_in double value that represents the current input in the 1st dimension y_in double value that represents the current input in the 2nd dimension x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centered fit in the 1st dimension y_base double value that represents the base value for a centered fit in the 2nd dimension coefficients vector containing the ordered coefficients x_in double value that represents the current input in the 1st dimension y_in double value that represents the current input in the 2nd dimension x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension

## § factorial()

 double CoolProp::Polynomial2DFrac::factorial ( const int & nValue )
protected

Simple integrated centred(!) polynomial function generator divided by independent variable.

Parameters
 nValue integer value that represents the order of the factorial

We need to rewrite some of the functions in order to use central fit. Having a central temperature xbase allows for a better fit, but requires a different formulation of the fracInt function group. Other functions are not affected. Starts with only the first coefficient at x^0

Parameters
 nValue integer value that represents the order of the factorial

## § fracIntCentral()

 double CoolProp::Polynomial2DFrac::fracIntCentral ( const Eigen::MatrixXd & coefficients, const double & x_in, const double & x_base )
protected

Indefinite integral of a centred polynomial divided by its independent variable.

Parameters
 coefficients vector containing the ordered coefficients x_in double value that represents the current input x_base double value that represents the basis for the fit

## § fracIntCentralDvector()

 Eigen::MatrixXd CoolProp::Polynomial2DFrac::fracIntCentralDvector ( const int & m, const double & x_in, const double & x_base )
protected

Helper function to calculate the D vector:

Parameters
 m integer value that represents order x_in double value that represents the current input x_base double value that represents the basis for the fit

## § integral()

 double CoolProp::Polynomial2DFrac::integral ( const Eigen::MatrixXd & coefficients, const double & x_in, const double & y_in, const int & axis, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0, const double & ax_val = 0.0 )
Parameters
 coefficients vector containing the ordered coefficients x_in double value that represents the current input in the 1st dimension y_in double value that represents the current input in the 2nd dimension axis unsigned integer value that represents the axis to integrate for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension ax_val double value that represents the base value for the definite integral on the chosen axis. coefficients vector containing the ordered coefficients x_in double value that represents the current input in the 1st dimension y_in double value that represents the current input in the 2nd dimension axis integer value that represents the axis to integrate for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension ax_val double value that represents the base value for the definite integral on the chosen axis.

## § solve()

 Eigen::VectorXd CoolProp::Polynomial2DFrac::solve ( const Eigen::MatrixXd & coefficients, const double & in, const double & z_in, const int & axis, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0 )

Returns a vector with ALL the real roots of p(x_in,y_in)-z_in.

Parameters
 coefficients vector containing the ordered coefficients in double value that represents the current input in x (1st dimension) or y (2nd dimension) z_in double value that represents the current output in the 3rd dimension axis unsigned integer value that represents the axis to solve for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension coefficients vector containing the ordered coefficients in double value that represents the current input in x (1st dimension) or y (2nd dimension) z_in double value that represents the current output in the 3rd dimension axis integer value that represents the axis to solve for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension

## § solve_guess()

 double CoolProp::Polynomial2DFrac::solve_guess ( const Eigen::MatrixXd & coefficients, const double & in, const double & z_in, const double & guess, const int & axis, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0 )

Uses the Newton solver to find the roots of p(x_in,y_in)-z_in.

Parameters
 coefficients vector containing the ordered coefficients in double value that represents the current input in x (1st dimension) or y (2nd dimension) z_in double value that represents the current output in the 3rd dimension guess double value that represents the start value axis unsigned integer value that represents the axis to solve for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension

## § solve_guessInt()

 double CoolProp::Polynomial2DFrac::solve_guessInt ( const Eigen::MatrixXd & coefficients, const double & in, const double & z_in, const double & guess, const int & axis, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0, const int & int_axis = 0 )

Uses the Newton solver to find the roots of Int(p(x_in,y_in))-z_in.

Parameters
 coefficients vector containing the ordered coefficients in double value that represents the current input in x (1st dimension) or y (2nd dimension) z_in double value that represents the current output in the 3rd dimension guess double value that represents the start value axis unsigned integer value that represents the axis to solve for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension int_axis axis for the integration (0=x, 1=y)

## § solve_limits()

 double CoolProp::Polynomial2DFrac::solve_limits ( const Eigen::MatrixXd & coefficients, const double & in, const double & z_in, const double & min, const double & max, const int & axis, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0 )

Uses the Brent solver to find the roots of p(x_in,y_in)-z_in.

Parameters
 coefficients vector containing the ordered coefficients in double value that represents the current input in x (1st dimension) or y (2nd dimension) z_in double value that represents the current output in the 3rd dimension min double value that represents the minimum value max double value that represents the maximum value axis unsigned integer value that represents the axis to solve for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension coefficients vector containing the ordered coefficients in double value that represents the current input in x (1st dimension) or y (2nd dimension) z_in double value that represents the current output in the 3rd dimension min double value that represents the minimum value max double value that represents the maximum value axis integer value that represents the axis to solve for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension

## § solve_limitsInt()

 double CoolProp::Polynomial2DFrac::solve_limitsInt ( const Eigen::MatrixXd & coefficients, const double & in, const double & z_in, const double & min, const double & max, const int & axis, const int & x_exp, const int & y_exp, const double & x_base = 0.0, const double & y_base = 0.0, const int & int_axis = 0 )

Uses the Brent solver to find the roots of Int(p(x_in,y_in))-z_in.

Parameters
 coefficients vector containing the ordered coefficients in double value that represents the current input in x (1st dimension) or y (2nd dimension) z_in double value that represents the current output in the 3rd dimension min double value that represents the minimum value max double value that represents the maximum value axis unsigned integer value that represents the axis to solve for (0=x, 1=y) x_exp integer value that represents the lowest exponent of the polynomial in the 1st dimension y_exp integer value that represents the lowest exponent of the polynomial in the 2nd dimension x_base double value that represents the base value for a centred fit in the 1st dimension y_base double value that represents the base value for a centred fit in the 2nd dimension int_axis axis for the integration (0=x, 1=y)

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