Copyright | Copyright (c) 2009-2017 David Sorokin <david.sorokin@gmail.com> |
---|---|

License | BSD3 |

Maintainer | David Sorokin <david.sorokin@gmail.com> |

Stability | experimental |

Safe Haskell | None |

Language | Haskell2010 |

Tested with: GHC 8.0.1

This module defines memo functions. The memoization creates such `Dynamics`

computations, which values are cached in the integration time points. Then
these values are interpolated in all other time points.

## Synopsis

- class Monad m => MonadMemo m where
- memoDynamics :: Dynamics m e -> Simulation m (Dynamics m e)
- memo0Dynamics :: Dynamics m e -> Simulation m (Dynamics m e)
- iterateDynamics :: Dynamics m () -> Simulation m (Dynamics m ())

- unzipDynamics :: MonadMemo m => Dynamics m (a, b) -> Simulation m (Dynamics m a, Dynamics m b)
- unzip0Dynamics :: MonadMemo m => Dynamics m (a, b) -> Simulation m (Dynamics m a, Dynamics m b)

# Documentation

class Monad m => MonadMemo m where Source #

A monad with the support of memoisation.

memoDynamics :: Dynamics m e -> Simulation m (Dynamics m e) Source #

Memoize and order the computation in the integration time points using
the interpolation that knows of the Runge-Kutta method. The values are
calculated sequentially starting from `starttime`

.

memo0Dynamics :: Dynamics m e -> Simulation m (Dynamics m e) Source #

Memoize and order the computation in the integration time points using
the `discreteDynamics`

interpolation. It consumes less memory than the `memoDynamics`

function but it is not aware of the Runge-Kutta method. There is a subtle
difference when we request for values in the intermediate time points
that are used by this method to integrate. In general case you should
prefer the `memo0Dynamics`

function above `memoDynamics`

.

iterateDynamics :: Dynamics m () -> Simulation m (Dynamics m ()) Source #

Iterate sequentially the dynamic process with side effects in
the integration time points. It is equivalent to a call of the
`memo0Dynamics`

function but significantly more efficient, for the array
is not created.

## Instances

MonadMemo IO Source # | |

Defined in Simulation.Aivika.IO.Dynamics.Memo memoDynamics :: Dynamics IO e -> Simulation IO (Dynamics IO e) Source # memo0Dynamics :: Dynamics IO e -> Simulation IO (Dynamics IO e) Source # iterateDynamics :: Dynamics IO () -> Simulation IO (Dynamics IO ()) Source # |

unzipDynamics :: MonadMemo m => Dynamics m (a, b) -> Simulation m (Dynamics m a, Dynamics m b) Source #

Memoize and unzip the computation of pairs, applying the `memoDynamics`

function.

unzip0Dynamics :: MonadMemo m => Dynamics m (a, b) -> Simulation m (Dynamics m a, Dynamics m b) Source #

Memoize and unzip the computation of pairs, applying the `memo0Dynamics`

function.