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.Field
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Eval
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Bounds
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Integration
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 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 + 2) * (x3 3)
instance
(B.ERRealBase rb, RealFrac rb,
DomainBox box varid Int, Ord box,
DomainBoxMappable boxb boxbb varid rb [(rb,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
check = chplCheck
getGranularity = chplGetGranularity
setMinGranularity = chplSetMinGranularity
setGranularity = chplSetGranularity
const = chplConst
affine = chplAffine
scale = chplScale
scaleApprox (ERInterval ratioDown ratioUp) = chplScaleApprox (ratioDown, ratioUp)
getDegree = chplGetDegree
reduceDegree = chplReduceDegree
volumeAboveZero = chplVolumeAboveZero
integrate = chplIntegrate
upperBound = chplUpperBoundAffine
nonneg = chplNonneg
recip = chplRecip
max = chplMax
sqrt = chplSqrt
exp = chplExp
log = chplLog
sin = chplSine
cos = chplCosine
atan = chplAtan
eval = chplEval
evalApprox ufb x = chplEvalApprox (\ b -> ERInterval b b) ufb x
partialEvalApprox substitutions ufb =
chplPartialEvalApprox (UFB.raEndpoints ufb) substitutions ufb
raEndpoints _ (ERInterval l h) = (l,h)
raEndpoints _ ERIntervalAny = ( B.plusInfinity, B.plusInfinity)
raFromEndpoints _ (l,h) = normaliseERInterval (ERInterval l h)
compose = chplCompose