module Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom
(
ERChebPoly(..), TermKey
)
where
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Basic
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Eval
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Reduce
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Ring
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Bounds
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Enclosure
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Compose
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Integration
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Division
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Elementary
import qualified Data.Number.ER.RnToRm.UnitDom.Base as UFB
import qualified Data.Number.ER.Real.Base as B
import Data.Number.ER.Real.Approx.Interval
import Data.Number.ER.Real.DomainBox (VariableID(..), DomainBox, DomainBoxMappable, DomainIntBox)
import qualified Data.Map as Map
import Data.Number.ER.Real.DefaultRepr
import Data.Number.ER.Real.DomainBox.IntMap
type P = ERChebPoly (Box Int) B
x0 = chplVar 0 :: P
x1 = chplVar 1 :: P
x2 = chplVar 2 :: P
x3 = chplVar 3 :: P
x4 = chplVar 4 :: P
p1 = x1 *^ x1 *^ x1 +^ x1 *^ (x2 +^ (chplConst 2)) *^ (x3 -^ (chplConst 3))
instance
(B.ERRealBase rb, RealFrac rb,
DomainBox box varid Int, Ord box,
DomainBoxMappable boxb boxras varid rb [ERInterval rb],
DomainBoxMappable boxra boxras varid (ERInterval rb) [ERInterval rb],
DomainIntBox boxra varid (ERInterval rb)) =>
(UFB.ERUnitFnBase boxb boxra varid rb (ERInterval rb) (ERChebPoly box rb))
where
raEndpoints _ (ERInterval l h) = (l,h)
raEndpoints _ ERIntervalAny = ( B.plusInfinity, B.plusInfinity)
raFromEndpoints _ (l,h) = normaliseERInterval (ERInterval l h)
compareApprox = chplCompareApprox
showDiGrCmp = chplShow
isValid = chplHasNoNaNOrInfty
check = chplCheck
getGranularity = chplGetGranularity
setMinGranularity = chplSetMinGranularity
setGranularity = chplSetGranularity
getDegree = chplGetDegree
reduceDegreeUp = chplReduceDegreeUp
getSize = chplCountTerms
reduceSizeUp = chplReduceTermCountUp
getVariables = chplGetVars
const = chplConst
constEncl (low, high) = (chplConst (low), chplConst high)
affine = chplAffine
upperBound = chplUpperBound
maxUp = chplMaxUp
minUp = chplMinUp
neg = chplNeg
scaleUp = chplScaleUp
scaleApproxUp = chplScaleRAUp
(+^) = (+^)
(-^) = (-^)
(*^) = (*^)
multiplyEncl = enclMultiply
recipUp md mt ix f = snd $ enclRecip md mt ix (md + 1) (chplNeg f, f)
recipEncl md mt ix = enclRecip md mt ix (md + 1)
evalUp pt f = chplEvalUp f pt
evalApprox x ufb = chplRAEval (\ b -> ERInterval b b) ufb x
partialEvalApproxUp substitutions ufb =
snd $
chplPartialRAEval (UFB.raEndpoints ufb) ufb substitutions
composeUp m n f v fv = snd $ enclCompose m n f v (enclThin fv)
composeEncl = enclCompose
composeManyUp m n f subst = snd $ enclComposeMany m n f (Map.map enclThin subst)
composeManyEncls = enclComposeMany
sqrtEncl = enclSqrt
expEncl = enclExp
logEncl = enclLog
sinEncl = enclSine
cosEncl = enclCosine
atanEncl = enclAtan
integrate = chplIntegrate