{-# LANGUAGE NoImplicitPrelude #-} module Synthesizer.Plain.LorenzAttractor where import qualified Algebra.Module as Module import qualified Algebra.Ring as Ring import NumericPrelude.Numeric import NumericPrelude.Base computeDerivatives :: (Ring.C y) => (y, y, y) -> (y, y, y) -> (y, y, y) computeDerivatives :: forall y. C y => (y, y, y) -> (y, y, y) -> (y, y, y) computeDerivatives (y a,y b,y c) (y x,y y,y z) = let x' :: y x' = y ay -> y -> y forall a. C a => a -> a -> a *(y yy -> y -> y forall a. C a => a -> a -> a -y x) y' :: y y' = y xy -> y -> y forall a. C a => a -> a -> a *(y by -> y -> y forall a. C a => a -> a -> a -y z) y -> y -> y forall a. C a => a -> a -> a - y y z' :: y z' = y xy -> y -> y forall a. C a => a -> a -> a *y y y -> y -> y forall a. C a => a -> a -> a -y cy -> y -> y forall a. C a => a -> a -> a *y z in (y x',y y',y z') explicitEuler :: (Module.C a v) => a -> (v -> v) -> v -> [v] explicitEuler :: forall a v. C a v => a -> (v -> v) -> v -> [v] explicitEuler a h v -> v phi v s = let ys :: [v] ys = v s v -> [v] -> [v] forall a. a -> [a] -> [a] : (v -> v) -> [v] -> [v] forall a b. (a -> b) -> [a] -> [b] map (\v y -> v y v -> v -> v forall a. C a => a -> a -> a + a h a -> v -> v forall a v. C a v => a -> v -> v *> v -> v phi v y) [v] ys in [v] ys equilibrium :: (Double, Double, Double) equilibrium :: (Double, Double, Double) equilibrium = (Double -> Double forall a. C a => a -> a sqrt Double 72, Double -> Double forall a. C a => a -> a sqrt Double 72, Double 27.001) example0 :: [(Double, Double, Double)] example0 :: [(Double, Double, Double)] example0 = Double -> ((Double, Double, Double) -> (Double, Double, Double)) -> (Double, Double, Double) -> [(Double, Double, Double)] forall a v. C a v => a -> (v -> v) -> v -> [v] explicitEuler (Double 0.01::Double) ((Double, Double, Double) -> (Double, Double, Double) -> (Double, Double, Double) forall y. C y => (y, y, y) -> (y, y, y) -> (y, y, y) computeDerivatives (Double 10, Double 28, Double 8Double -> Double -> Double forall a. C a => a -> a -> a /Double 3)) (Double, Double, Double) equilibrium example :: [(Double, Double, Double)] example :: [(Double, Double, Double)] example = Double -> ((Double, Double, Double) -> (Double, Double, Double)) -> (Double, Double, Double) -> [(Double, Double, Double)] forall a v. C a v => a -> (v -> v) -> v -> [v] explicitEuler (Double 0.01::Double) ((Double, Double, Double) -> (Double, Double, Double) -> (Double, Double, Double) forall y. C y => (y, y, y) -> (y, y, y) -> (y, y, y) computeDerivatives (Double 10, Double 28, Double 8Double -> Double -> Double forall a. C a => a -> a -> a /Double 3)) (Double 8.5, Double 8.6, Double 27)