module Numeric.LazySplines.Examples where import Numeric.LazySplines duckDeathAtAge = [ (10, [0]), (10, [0.2]), (15, [0.2, 0.01]) ] initialLife = [(1, [0])] survival :: Spline survival = 1 - duckLife duckLife = initialLife ++ integrateSpline duckLife' duckLife' = duckDeathAtAge * survival initialSpring = [(0.01, [-0.5, 1, 18])] spring'' = -36 * spring `trimmingTo` 15 spring :: Spline spring = initialSpring ++ liftS (initialSpring `at` 0.01) + integrateSpline (integrateSpline spring'') spring2'' = -36 * spring2 `trimmingTo` 15 `extrapForward` 0.01 spring2 = initialSpring ++ liftS (initialSpring `at` 0.01) + integrateSpline (integrateSpline spring2'') flameDefect f = deriveSpline f - (f ^ 2) * (1 - f) initialFlame = [(1, [0.01, 9.9e-5])] flame' = flame^2 * (1 - flame) `trimmingTo` 15 `extrapForward` 1 flame :: Spline flame = initialFlame ++ (liftS (initialFlame `at` 1) + integrateSpline flame') flamePred :: SplinePredicate flamePred t d f = v' - v^2 * (1 - v) where v = f `at` d v' = diff f `at` d flame2' = flame2^2 * (1 - flame2) `trimmingTo` 15 `extrapForward` 1 flame2 :: Spline flame2 = initialFlame ++ liftS (initialFlame `at` 1) + integrateSpline flame2' `satisfying` (0.00001, flamePred) flame3' = flame3^2 * (1 - flame3) `trimmingTo` 15 `extrapForward` 1 flame3 :: Spline flame3 = initialFlame ++ liftS (initialFlame `at` 1) + integrateSpline flame3' `splitWhen` (0.00001, 0.125, flamePred) `satisfying` (0.00001, flamePred) flame4' = flame4^2 * (1 - flame4) `trimmingTo` 15 `extrapForward` 1 flame4 :: Spline flame4 = initialFlame ++ liftS (initialFlame `at` 1) + integrateSpline flame4' `splitWhen` (0.00001, 0.125, flamePred) `satisfying` (0.00001, flamePred) `extendWhen` (0.00001, 8, flamePred) flame5' = flame5^2 * (1 - flame5) `extrapForward` 1 flame5 :: Spline flame5 = initialFlame ++ liftS (initialFlame `at` 1) + integrateSpline flame5' `trimSmart` flamePred `splitWhen` (0.00001, 0.125, flamePred) `satisfying` (0.00001, flamePred) `extendWhen` (0.00001, 8, flamePred)