{-# 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 aforall a. C a => a -> a -> a *(y yforall a. C a => a -> a -> a -y x) y' :: y y' = y xforall a. C a => a -> a -> a *(y bforall a. C a => a -> a -> a -y z) forall a. C a => a -> a -> a - y y z' :: y z' = y xforall a. C a => a -> a -> a *y y forall a. C a => a -> a -> a -y cforall 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 forall a. a -> [a] -> [a] : forall a b. (a -> b) -> [a] -> [b] map (\v y -> v y forall a. C a => a -> a -> a + a h 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 = (forall a. C a => a -> a sqrt Double 72, forall a. C a => a -> a sqrt Double 72, Double 27.001) example0 :: [(Double, Double, Double)] example0 :: [(Double, Double, Double)] example0 = forall a v. C a v => a -> (v -> v) -> v -> [v] explicitEuler (Double 0.01::Double) (forall y. C y => (y, y, y) -> (y, y, y) -> (y, y, y) computeDerivatives (Double 10, Double 28, Double 8forall a. C a => a -> a -> a /Double 3)) (Double, Double, Double) equilibrium example :: [(Double, Double, Double)] example :: [(Double, Double, Double)] example = forall a v. C a v => a -> (v -> v) -> v -> [v] explicitEuler (Double 0.01::Double) (forall y. C y => (y, y, y) -> (y, y, y) -> (y, y, y) computeDerivatives (Double 10, Double 28, Double 8forall a. C a => a -> a -> a /Double 3)) (Double 8.5, Double 8.6, Double 27)