AERN-RnToRm-0.4.9.1: polynomial function enclosures (PFEs) approximating exact real functionsSource codeContentsIndex
Data.Number.ER.RnToRm.Approx
Portabilityportable
Stabilityexperimental
Maintainermik@konecny.aow.cz
Description

Approximation of a real functions with rectangular domains.

To be imported qualified, usually with the synonym FA.

Synopsis
class (ERApprox fa, ERIntApprox fa, ERIntApprox domra, ERIntApprox ranra, DomainBox box varid domra) => ERFnApprox box varid domra ranra fa | fa -> box varid domra ranra where
check :: String -> fa -> fa
domra2ranra :: fa -> domra -> ranra
ranra2domra :: fa -> ranra -> domra
getDegree :: fa -> Int
setMaxDegree :: Int -> fa -> fa
getMaxDegree :: fa -> Int
getSize :: fa -> Int
setMaxSize :: Int -> fa -> fa
getMaxSize :: fa -> Int
getVariables :: fa -> [varid]
getBestPrecision :: fa -> Precision
getRangeApprox :: fa -> ranra
tuple :: [fa] -> fa
getTupleSize :: fa -> Int
applyTupleFn :: ([fa] -> [fa]) -> fa -> fa
volume :: fa -> ranra
scale :: ranra -> fa -> fa
partialIntersect :: EffortIndex -> box -> fa -> fa -> fa
intersectMeasureImprovement :: EffortIndex -> fa -> fa -> (fa, ranra)
eval :: box -> fa -> [ranra]
partialEval :: box -> fa -> fa
composeNonDecreasing :: fa -> varid -> fa -> fa
composeNonIncreasing :: fa -> varid -> fa -> fa
class (ERFnApprox box varid domra ranra fa, DomainIntBox box varid domra) => ERFnDomApprox box varid domra ranra fa | fa -> box varid domra ranra where
bottomApprox :: box -> Int -> fa
const :: box -> [ranra] -> fa
proj :: box -> varid -> fa
dom :: fa -> box
bisect :: varid -> Maybe domra -> fa -> (fa, fa)
unBisect :: varid -> (fa, fa) -> fa
integrate :: EffortIndex -> fa -> varid -> box -> domra -> fa -> fa
integrateUnary :: EffortIndex -> fa -> domra -> domra -> [ranra] -> fa
integrateMeasureImprovement :: EffortIndex -> fa -> varid -> box -> domra -> fa -> (fa, fa)
integrateMeasureImprovementUnary :: EffortIndex -> fa -> domra -> domra -> fa -> (fa, fa)
bisectUnbisectDepth :: ERFnDomApprox box varid domra ranra fa => Int -> fa -> fa
keyPointsConsistencyCheck :: ERFnDomApprox box varid domra ranra fa => (box -> ranra) -> fa -> [(box, ranra, ranra)]
keyPointsPointwiseConsistencyCheck :: ERFnDomApprox box varid domra ranra fa => ([ranra] -> ranra) -> [fa] -> fa -> [(box, ranra, ranra)]
Documentation
class (ERApprox fa, ERIntApprox fa, ERIntApprox domra, ERIntApprox ranra, DomainBox box varid domra) => ERFnApprox box varid domra ranra fa | fa -> box varid domra ranra whereSource

A class of types that approximate first-order real functions R^n -> R^m using some type of graph enclosures. The domains of the functions can be neither specified nor investigated by operations in this class.

This class extends ERApprox so that we could perform point-wise operations on the functions.

This class is associated with:

  • two real number types (instances of ERIntApprox) for working with parts of the function's domain and range;
  • a type of boxes indexed by variables (instance of DomainBox) for working with parts of the function's domain.
Methods
checkSource
:: Stringindentification of caller location for easier debugging
-> fa
-> fa
Check internal consistency and report problem if any.
domra2ranraSource
:: fathis parameter is not used except for type checking
-> domra
-> ranra
ranra2domraSource
:: fathis parameter is not used except for type checking
-> ranra
-> domra
getDegree :: fa -> IntSource
Get the internal degree of quality (usually polynomial degree) of the approximation.
setMaxDegree :: Int -> fa -> faSource

Set an upper bound on the degree of this function approximation.

This reduces the degree immediately if necessary and also affects all operations performed with this value later.

May also set the maximum size of the approximations to a default based on the degree and the dimension of this enclosure.

getMaxDegree :: fa -> IntSource
Get the current uppend bound on the degree associated with this function approximation.
getSize :: fa -> IntSource
Get the internal size of the approximation (usually number of polynomial terms).
setMaxSize :: Int -> fa -> faSource

Set an upper bound on the size of this function approximation.

This reduces the size immediately if necessary and also affects all operations performed with this value later.

getMaxSize :: fa -> IntSource
Get the current uppend bound on the size associated with this function approximation.
getVariables :: fa -> [varid]Source
List all variables that are actually used in the approximation.
getBestPrecision :: fa -> PrecisionSource
Give a close upper bound of the precision of the range at the best approximated point in the domain.
getRangeApprox :: fa -> ranraSource
Find some upper and lower bounds of the function over [-1,1]^n.
tuple :: [fa] -> faSource
Combine several functions with the same domain into one tuple function.
getTupleSize :: fa -> IntSource
Reveal how many functions are bundled together.
applyTupleFn :: ([fa] -> [fa]) -> fa -> faSource
Modify a tuple of functions in a way that does not treat the tuple elements uniformly.
volume :: fa -> ranraSource
Find close upper and lower bounds of the volume of the entire enclosure. A negative volume means that the enclosure is certainly inconsistent.
scale :: ranra -> fa -> faSource
Multiply a function approximation by a real number approximation.
partialIntersectSource
:: EffortIndex
-> boxthe subdomain; defined by clipping the range of some variables
-> fathe enclosure to be used on the subdomain (but defined on the whole domain)
-> fafunction to improve by intersecting its subdomain
-> fa
Intersect one approximation by another but only on a box within its domain.
intersectMeasureImprovementSource
:: EffortIndex
-> fa
-> fa
-> (fa, ranra)enclosure intersection and measurement of improvement analogous to the one returned by pointwise intersectMeasureImprovement

Intersect two enclosures and measure the global improvement as one number.

(Use intersectMeasureImprovement defined in module Data.Number.ER.Real.Approx to measure the improvement using a function enclosure.)

eval :: box -> fa -> [ranra]Source
Evaluate the function at the given point.
partialEval :: box -> fa -> faSource
Fix some variables in the function to the given exact values.
composeNonDecreasingSource
:: faenclosure of f, f is non-decreasing in variable var
-> varidvariable var to get substituted in f
-> faenclosure of f_var, to be substituted for var
-> fa

enclosure of f[var |-> f_var]

BEWARE: Enclosure is probably incorrect where values of f_v are outside the domain of v in f.

A simple and limited composition of functions applicable only when the range-defining function is non-decreasing.
composeNonIncreasingSource
:: faenclosure of f, f is non-increasing in variable var
-> varidvariable var to get substituted in f
-> faenclosure of f_var, to be substituted for var
-> fa

enclosure of f[var |-> f_var]

BEWARE: Enclosure is probably incorrect where values of f_v are outside the domain of v in f.

A simple and limited composition of functions applicable only when the range-defining function is non-increasing.
show/hide Instances
ERFnDomApprox box varid domra ranra fa => ERFnApprox box varid domra ranra (ERFnTuple fa)
(ERFnDomApprox box varid domra ranra fa, VariableID varid, Show box) => ERFnApprox box varid domra ranra (ERFnDomEdgesApprox varid fa)
(ERUnitFnBase boxb boxra varid b ra fb, Show varid, Show boxra) => ERFnApprox boxra varid ra ra (ERFnInterval fb ra)
(ERFnDomApprox box varid domra ranra fa, ERIntApprox fa, DomainBoxMappable box box varid domra domra, Show box) => ERFnApprox box varid domra ranra (ERFnPiecewise box varid domra fa)
(ERUnitFnApprox box varid domra ranra ufa, DomainBoxMappable dtrbox box varid (DomTransl domra) domra, DomainIntBox box varid domra, Show varid, Show box, DomainBoxMappable box dtrbox varid domra (DomTransl domra), Eq dtrbox, Ord dtrbox) => ERFnApprox box varid domra ranra (ERFnDomTranslApprox dtrbox varid ufa domra)
class (ERFnApprox box varid domra ranra fa, DomainIntBox box varid domra) => ERFnDomApprox box varid domra ranra fa | fa -> box varid domra ranra whereSource

This class extends ERFnApprox by:

  • making the domain of the function enclosure available for inspection;
  • allowing the construction of basic function enclosures where the domain has to be specified.
Methods
bottomApproxSource
:: boxthe domain of the function
-> Inthow many functions are bundled in this tuple
-> fa
A function enclosure with no information about the function's values.
const :: box -> [ranra] -> faSource
Construct a constant enclosure for a tuple of functions.
proj :: box -> varid -> faSource
Construct the exact enclosure for a projection function (ie a variable).
dom :: fa -> boxSource
Return the domain of the function enclosure.
bisectSource
:: varidvariable (axis) to split on
-> Maybe domrawhere exactly to split (this has to be exact)
-> fa
-> (fa, fa)
Split the domain into two halves, yoelding two function enclosures.
unBisectSource
:: varidvariable (axis) to glue on
-> (fa, fa)
-> fa
Merge function enclosures with neighbouring domains.
integrateSource
:: EffortIndexhow hard to try
-> fafunction to integrate
-> varidx = variable to integrate by
-> boxintegration range
-> domraorigin in terms of x; this has to be thin!
-> favalues at origin
-> fa
Safely integrate a R^n -> R^m function enclosure with some initial condition (origin and function at origin).
integrateUnarySource
:: EffortIndexhow hard to try
-> faunary function to integrate
-> domraintegration range
-> domraorigin
-> [ranra]values at origin
-> fa
Safely integrate a R -> R^m function enclosure.
integrateMeasureImprovementSource
:: EffortIndexhow hard to try
-> fafunction to integrate
-> varidvariable to integrate by
-> boxintegration domain
-> domraa sub-domain with relevant new information - either about initial value(s) or about derivative
-> faapproximation to result, including initial value(s)
-> (fa, fa)improved result and measurement of improvement analogous to the one returned by pointwise intersectMeasureImprovement

Safely integrate a R^n -> R^m function enclosure intersecting it with a prior enclosure for the result.

The prior enclosure could contains one of more initial value.

integrateMeasureImprovementUnarySource
:: EffortIndexhow hard to try
-> faunary function to integrate
-> domraintegration domain
-> domraa sub-domain with relevant new information - either about initial value(s) or about derivative
-> faapproximation to result, including initial value(s)
-> (fa, fa)improved result and measurement of improvement analogous to the one returned by pointwise intersectMeasureImprovement

Safely integrate a R -> R^m function enclosure intersecting it with a prior enclosure for the result.

The prior enclosure could contains one of more initial value.

show/hide Instances
ERFnDomApprox box varid domra ranra fa => ERFnDomApprox box varid domra ranra (ERFnTuple fa)
(ERFnDomApprox box varid domra ranra fa, VariableID varid, Show box) => ERFnDomApprox box varid domra ranra (ERFnDomEdgesApprox varid fa)
(ERFnDomApprox box varid domra ranra fa, ERIntApprox fa, Show box, DomainBoxMappable box box varid domra domra) => ERFnDomApprox box varid domra ranra (ERFnPiecewise box varid domra fa)
(ERUnitFnApprox box varid domra ranra ufa, DomainIntBox box varid domra, Show varid, Show box, DomainBoxMappable dtrbox box varid (DomTransl domra) domra, DomainBoxMappable box dtrbox varid domra (DomTransl domra), Eq dtrbox, Ord dtrbox) => ERFnDomApprox box varid domra ranra (ERFnDomTranslApprox dtrbox varid ufa domra)
bisectUnbisectDepthSource
:: ERFnDomApprox box varid domra ranra fa
=> Intrequired depth of bisection
-> fa
-> fa

Recursively perform a number of bisections and then glue the bits back together.

This way we can ensure that a piece-wise enclosure has a partition that goes to at least the given depth.

keyPointsConsistencyCheckSource
:: ERFnDomApprox box varid domra ranra fa
=> box -> ranrafunction G acting on tuples of real numbers
-> faalleged approximation of G over a domain box
-> [(box, ranra, ranra)]

Check that a function approximation is consistent with a real function that is meant to compute the same function.

The result of this function is the list of points in which the consistency check failed. The result of the operation is also included both for the real number version and the function approximation version.

keyPointsPointwiseConsistencyCheckSource
:: ERFnDomApprox box varid domra ranra fa
=> [ranra] -> ranrafunction G acting on real numbers
-> [fa]approximations of input functions
-> faalleged approximation of G applied pointwise to the above function approximations
-> [(box, ranra, ranra)]

Check that a pointwise operation previously performed on function approximations is consistent with the same operation performed on selected points in the domain of these functions. The selected points are the centres of all faces of all dimensions, which includes the corners.

The result of this function is the list of points in which the consistency check failed. The result of the operation is also included both for the real number version and the function approximation version.

Produced by Haddock version 2.4.2