Copyright | (c) Scott N. Walck 2014 |
---|---|

License | BSD3 (see LICENSE) |

Maintainer | Scott N. Walck <walck@lvc.edu> |

Stability | experimental |

Safe Haskell | Trustworthy |

Language | Haskell98 |

Newton's second law and all that

- type TheTime = Double
- type TimeStep = Double
- type Velocity = Vec
- type SimpleState = (TheTime, Position, Velocity)
- type SimpleAccelerationFunction = SimpleState -> Vec
- simpleStateDeriv :: SimpleAccelerationFunction -> DifferentialEquation SimpleState
- simpleRungeKuttaStep :: SimpleAccelerationFunction -> TimeStep -> SimpleState -> SimpleState
- data St = St {}
- data DSt = DSt Vec Vec
- type OneParticleSystemState = (TheTime, St)
- type OneParticleAccelerationFunction = OneParticleSystemState -> Vec
- oneParticleStateDeriv :: OneParticleAccelerationFunction -> DifferentialEquation OneParticleSystemState
- oneParticleRungeKuttaStep :: OneParticleAccelerationFunction -> TimeStep -> OneParticleSystemState -> OneParticleSystemState
- oneParticleRungeKuttaSolution :: OneParticleAccelerationFunction -> TimeStep -> OneParticleSystemState -> [OneParticleSystemState]
- type TwoParticleSystemState = (TheTime, St, St)
- type TwoParticleAccelerationFunction = TwoParticleSystemState -> (Vec, Vec)
- twoParticleStateDeriv :: TwoParticleAccelerationFunction -> DifferentialEquation TwoParticleSystemState
- twoParticleRungeKuttaStep :: TwoParticleAccelerationFunction -> TimeStep -> TwoParticleSystemState -> TwoParticleSystemState
- type ManyParticleSystemState = (TheTime, [St])
- type ManyParticleAccelerationFunction = ManyParticleSystemState -> [Vec]
- manyParticleStateDeriv :: ManyParticleAccelerationFunction -> DifferentialEquation ManyParticleSystemState
- manyParticleRungeKuttaStep :: ManyParticleAccelerationFunction -> TimeStep -> ManyParticleSystemState -> ManyParticleSystemState

# Documentation

# Simple one-particle state

type SimpleState = (TheTime, Position, Velocity) Source

A simple one-particle state, to get started quickly with mechanics of one particle.

type SimpleAccelerationFunction = SimpleState -> Vec Source

An acceleration function gives the particle's acceleration as a function of the particle's state. The specification of this function is what makes one single-particle mechanics problem different from another. In order to write this function, add all of the forces that act on the particle, and divide this net force by the particle's mass. (Newton's second law).

:: SimpleAccelerationFunction | acceleration function for the particle |

-> DifferentialEquation SimpleState | differential equation |

Time derivative of state for a single particle with a constant mass.

:: SimpleAccelerationFunction | acceleration function for the particle |

-> TimeStep | time step |

-> SimpleState | initial state |

-> SimpleState | state after one time step |

Single Runge-Kutta step

# One-particle state

The state of a single particle is given by the position of the particle and the velocity of the particle.

The associated vector space for the state of a single particle.

type OneParticleSystemState = (TheTime, St) Source

The state of a system of one particle is given by the current time, the position of the particle, and the velocity of the particle. Including time in the state like this allows us to have time-dependent forces.

type OneParticleAccelerationFunction = OneParticleSystemState -> Vec Source

An acceleration function gives the particle's acceleration as a function of the particle's state.

:: OneParticleAccelerationFunction | acceleration function for the particle |

-> DifferentialEquation OneParticleSystemState | differential equation |

Time derivative of state for a single particle with a constant mass.

oneParticleRungeKuttaStep Source

:: OneParticleAccelerationFunction | acceleration function for the particle |

-> TimeStep | time step |

-> OneParticleSystemState | initial state |

-> OneParticleSystemState | state after one time step |

Single Runge-Kutta step

oneParticleRungeKuttaSolution Source

:: OneParticleAccelerationFunction | acceleration function for the particle |

-> TimeStep | time step |

-> OneParticleSystemState | initial state |

-> [OneParticleSystemState] | state after one time step |

List of system states

# Two-particle state

type TwoParticleSystemState = (TheTime, St, St) Source

The state of a system of two particles is given by the current time, the position and velocity of particle 1, and the position and velocity of particle 2.

type TwoParticleAccelerationFunction = TwoParticleSystemState -> (Vec, Vec) Source

An acceleration function gives a pair of accelerations (one for particle 1, one for particle 2) as a function of the system's state.

:: TwoParticleAccelerationFunction | acceleration function for two particles |

-> DifferentialEquation TwoParticleSystemState | differential equation |

Time derivative of state for two particles with constant mass.

twoParticleRungeKuttaStep Source

:: TwoParticleAccelerationFunction | acceleration function |

-> TimeStep | time step |

-> TwoParticleSystemState | initial state |

-> TwoParticleSystemState | state after one time step |

Single Runge-Kutta step for two-particle system

# Many-particle state

type ManyParticleSystemState = (TheTime, [St]) Source

The state of a system of many particles is given by the current time and a list of one-particle states.

type ManyParticleAccelerationFunction = ManyParticleSystemState -> [Vec] Source

An acceleration function gives a list of accelerations (one for each particle) as a function of the system's state.

:: ManyParticleAccelerationFunction | acceleration function for many particles |

-> DifferentialEquation ManyParticleSystemState | differential equation |

Time derivative of state for many particles with constant mass.

manyParticleRungeKuttaStep Source

:: ManyParticleAccelerationFunction | acceleration function |

-> TimeStep | time step |

-> ManyParticleSystemState | initial state |

-> ManyParticleSystemState | state after one time step |

Single Runge-Kutta step for many-particle system