# step.m

Propagation step function optimised for one-off time evolution events, such as hard pulses or slices of shaped pulses. For large Liouvillians, this function computes the action by a matrix exponential on a vector without computing the matrix exponential.

## Syntax

    rho=step(spin_system,L,rho,time_step)


## Arguments

     L          -  Liouvillian or Hamiltonian to be used for propagation

rho        -  state vector or density matrix to be propagated

time_step  -  length of the time step to take


## Outputs

     rho        -  state vector or density matrix


## Examples

See the source code of shaped_pulse_xy.m and most NMR pulse sequences (cosy.m, hsqc.m, and others) for examples of this function being used.

## Notes

1. The sequence is programmed with a rather peculiar order of algebraic operations. This was carefully optimised to ensure best possible performance under a variety of scenarios (parallelisation, GPUs, large sparse arrays) in Matlab.
2. Long-term propagation under a static Liovillian should be handled with evolution.m or krylov.m functions instead.