# Introduction

Although in some cases, we want to find the stationary states of a quantum system, often we are interested in the dynamics: how the state of a system or an ensemble of systems evolves with time. QuTiP provides many ways to model dynamics.

Broadly speaking, there are two categories of dynamical models: unitary and non-unitary. In unitary evolution, the state of the system remains normalized. In non-unitary, or dissipative, systems, it does not.

There are two kinds of quantum systems: open systems that interact with a larger environment and closed systems that do not. In a closed system, the state can be described by a state vector, although when there is entanglement a density matrix may be needed instead. When we are modeling an open system, or an ensemble of systems, the use of the density matrix is mandatory.

Collapse operators are used to model the collapse of the state vector that can occur when a measurement is performed.

The following tables lists some of the solvers QuTiP provides for dynamic quantum systems and indicates the type of object returned by the solver:

QuTiP Solvers
Solver | Returns | Remarks
--- | --- | ---
sesolve() | `qutip.solver.Result` | Unitary evolution, single system
mesolve() | `qutip.solver.Result` | Lindblad master eqn. or Von Neuman eqn. Density matrix.
mcsolve() | `qutip.solver.Result` | Monte Carlo with collapse operators
essolve() | Array of expectation values | Exponential series with collapse operators
bloch_redfield_solve() | `qutip.solver` |
floquet_markov_solve() | `qutip.solver.Result` | Floquet-Markov master equation
fmmesolve() | `qutip.solver` | Floquet-Markov master equation
smesolve() | `qutip.solver.Result` | Stochastic master equation
ssesolve() | `qutip.solver.Result` | Stochastic Schrödinger equation