regression-simple-0.1: Simple linear and quadratic regression

Safe HaskellNone
LanguageHaskell2010

Math.Regression.Simple

Contents

Synopsis

Regressions

linear :: (Foldable' xs x, IsDoublePair x) => xs -> V2 Source #

Linear regression.

The type is

linear :: [(Double, Double)] -> V2

but overloaded to work with boxed and unboxed Vectors.

>>> let input1 = [(0, 1), (1, 3), (2, 5)]
>>> linear input1
V2 2.0 1.0
>>> let input2 = [(0.1, 1.2), (1.3, 3.1), (1.9, 4.9), (3.0, 7.1), (4.1, 9.0)]
>>> linear input2
V2 2.0063237774030345 0.8868465430016883

quadratic :: (Foldable' xs x, IsDoublePair x) => xs -> V3 Source #

Quadratic regression.

The type is

quadratic :: [(Double, Double)] -> V3

but overloaded to work with boxed and unboxed Vectors.

>>> let input1 = [(0, 1), (1, 3), (2, 5)]
>>> quadratic input1
V3 0.0 2.0 1.0
>>> let input2 = [(0.1, 1.2), (1.3, 3.1), (1.9, 4.9), (3.0, 7.1), (4.1, 9.0)]
>>> quadratic input2
V3 (-5.886346291028133e-3) 2.0312938469708826 0.8715454176158062
>>> let input3 = [(0, 2), (1, 3), (2, 6), (3, 11)]
>>> quadratic input3
V3 1.0 0.0 1.999999999999993

quadraticAndLinear :: (Foldable' xs x, IsDoublePair x) => xs -> (V3, V2) Source #

Do both linear and quadratic regression in one data scan.

>>> let input2 = [(0.1, 1.2), (1.3, 3.1), (1.9, 4.9), (3.0, 7.1), (4.1, 9.0)]
>>> quadraticAndLinear input2
(V3 (-5.886346291028133e-3) 2.0312938469708826 0.8715454176158062,V2 2.0063237774030345 0.8868465430016883)

Operations

class Add a where Source #

Addition

Methods

zero :: a Source #

add :: a -> a -> a infixl 6 Source #

Instances
Add Double Source # 
Instance details

Defined in Math.Regression.Simple

Add M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: M33 Source #

add :: M33 -> M33 -> M33 Source #

Add V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: V3 Source #

add :: V3 -> V3 -> V3 Source #

Add M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: M22 Source #

add :: M22 -> M22 -> M22 Source #

Add V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: V2 Source #

add :: V2 -> V2 -> V2 Source #

class Eye a where Source #

Identity

Methods

eye :: a Source #

Instances
Eye Double Source # 
Instance details

Defined in Math.Regression.Simple

Methods

eye :: Double Source #

Eye M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

eye :: M33 Source #

Eye M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

eye :: M22 Source #

class Eye a => Mult a b c | a b -> c where Source #

Multiplication of different things.

Methods

mult :: a -> b -> c infixl 7 Source #

Instances
Mult Double M33 M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> M33 -> M33 Source #

Mult Double V3 V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> V3 -> V3 Source #

Mult Double M22 M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> M22 -> M22 Source #

Mult Double V2 V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> V2 -> V2 Source #

Mult M33 V3 V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M33 -> V3 -> V3 Source #

Mult M22 M22 M22 Source #
>>> M22 1 2 3 4 `mult` eye @M22
M22 1.0 2.0 3.0 4.0
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M22 -> M22 -> M22 Source #

Mult M22 V2 V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M22 -> V2 -> V2 Source #

class Eye a => Det a where Source #

Determinant

Methods

det :: a -> Double Source #

Instances
Det Double Source # 
Instance details

Defined in Math.Regression.Simple

Methods

det :: Double -> Double Source #

Det M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

det :: M33 -> Double Source #

Det M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

det :: M22 -> Double Source #

class Det a => Inv a where Source #

Inverse

Methods

inv :: a -> a Source #

Instances
Inv Double Source # 
Instance details

Defined in Math.Regression.Simple

Methods

inv :: Double -> Double Source #

Inv M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

inv :: M33 -> M33 Source #

Inv M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

inv :: M22 -> M22 Source #

Zeros

zerosLin :: V2 -> Double Source #

Solve linear equation.

>>> zerosLin (V2 1 2)
-2.0

zerosQuad :: V3 -> Either (Complex Double, Complex Double) (Double, Double) Source #

Solve quadratic equation.

>>> zerosQuad (V3 2 0 (-1))
Right (-0.7071067811865476,0.7071067811865476)
>>> zerosQuad (V3 2 0 1)
Left ((-0.0) :+ (-0.7071067811865476),(-0.0) :+ 0.7071067811865476)

Double root is not treated separately:

>>> zerosQuad (V3 1 0 0)
Right (-0.0,0.0)
>>> zerosQuad (V3 1 (-2) 1)
Right (1.0,1.0)

optimaQuad :: V3 -> Double Source #

Find an optima point.

>>> optimaQuad (V3 1 (-2) 0)
1.0

compare to

>>> zerosQuad (V3 1 (-2) 0)
Right (0.0,2.0)

Two dimensions

data V2 Source #

2d vector. Strict pair of Doubles.

Also used to represent linear polynomial: V2 a b \(= a x + b\).

Constructors

V2 !Double !Double 
Instances
Eq V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

(==) :: V2 -> V2 -> Bool #

(/=) :: V2 -> V2 -> Bool #

Show V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

showsPrec :: Int -> V2 -> ShowS #

show :: V2 -> String #

showList :: [V2] -> ShowS #

IsDoublePair V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

withDP :: V2 -> (Double -> Double -> r) -> r Source #

makeDP :: Double -> Double -> V2 Source #

Add V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: V2 Source #

add :: V2 -> V2 -> V2 Source #

Mult Double V2 V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> V2 -> V2 Source #

Mult M22 V2 V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M22 -> V2 -> V2 Source #

data M22 Source #

2×2 matrix.

Constructors

M22 !Double !Double !Double !Double 
Instances
Eq M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

(==) :: M22 -> M22 -> Bool #

(/=) :: M22 -> M22 -> Bool #

Show M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

showsPrec :: Int -> M22 -> ShowS #

show :: M22 -> String #

showList :: [M22] -> ShowS #

Inv M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

inv :: M22 -> M22 Source #

Det M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

det :: M22 -> Double Source #

Eye M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

eye :: M22 Source #

Add M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: M22 Source #

add :: M22 -> M22 -> M22 Source #

Mult Double M22 M22 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> M22 -> M22 Source #

Mult M22 M22 M22 Source #
>>> M22 1 2 3 4 `mult` eye @M22
M22 1.0 2.0 3.0 4.0
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M22 -> M22 -> M22 Source #

Mult M22 V2 V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M22 -> V2 -> V2 Source #

Three dimensions

data V3 Source #

3d vector. Strict triple of Doubles.

Also used to represent quadratic polynomial: V3 a b c \(= a x^2 + b x + c\).

Constructors

V3 !Double !Double !Double 
Instances
Eq V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

(==) :: V3 -> V3 -> Bool #

(/=) :: V3 -> V3 -> Bool #

Show V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

showsPrec :: Int -> V3 -> ShowS #

show :: V3 -> String #

showList :: [V3] -> ShowS #

Add V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: V3 Source #

add :: V3 -> V3 -> V3 Source #

Mult Double V3 V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> V3 -> V3 Source #

Mult M33 V3 V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M33 -> V3 -> V3 Source #

data M33 Source #

3×3 matrix.

Instances
Eq M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

(==) :: M33 -> M33 -> Bool #

(/=) :: M33 -> M33 -> Bool #

Show M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

showsPrec :: Int -> M33 -> ShowS #

show :: M33 -> String #

showList :: [M33] -> ShowS #

Inv M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

inv :: M33 -> M33 Source #

Det M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

det :: M33 -> Double Source #

Eye M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

eye :: M33 Source #

Add M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

zero :: M33 Source #

add :: M33 -> M33 -> M33 Source #

Mult Double M33 M33 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: Double -> M33 -> M33 Source #

Mult M33 V3 V3 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

mult :: M33 -> V3 -> V3 Source #

Auxiliary classes

class Foldable' xs x | xs -> x where Source #

Like Foldable but with element in the class definition.

Methods

foldl' :: (b -> x -> b) -> b -> xs -> b Source #

Instances
Foldable' [a] a Source # 
Instance details

Defined in Math.Regression.Simple

Methods

foldl' :: (b -> a -> b) -> b -> [a] -> b Source #

Unbox a => Foldable' (Vector a) a Source # 
Instance details

Defined in Math.Regression.Simple

Methods

foldl' :: (b -> a -> b) -> b -> Vector a -> b Source #

Foldable' (Vector a) a Source # 
Instance details

Defined in Math.Regression.Simple

Methods

foldl' :: (b -> a -> b) -> b -> Vector a -> b Source #

class IsDoublePair dp where Source #

Class witnessing that dp has a pair of Doubles.

Methods

withDP :: dp -> (Double -> Double -> r) -> r Source #

makeDP :: Double -> Double -> dp Source #

Instances
IsDoublePair V2 Source # 
Instance details

Defined in Math.Regression.Simple

Methods

withDP :: V2 -> (Double -> Double -> r) -> r Source #

makeDP :: Double -> Double -> V2 Source #

(a ~ Double, b ~ Double) => IsDoublePair (a, b) Source # 
Instance details

Defined in Math.Regression.Simple

Methods

withDP :: (a, b) -> (Double -> Double -> r) -> r Source #

makeDP :: Double -> Double -> (a, b) Source #