Difference between revisions of "Step.m"

From Spinach Documentation Wiki
Jump to: navigation, search
Line 6: Line 6:
 
<center><math>\exp \left[ { - i{\bf{L}}\Delta t} \right]{\bf{\rho }} = \sum\limits_{n = 0}^\infty  {\frac{{{{\left( { - i\Delta t} \right)}^n}}}{{n!}}{\bf{L}}\left( {...\left( {{\bf{L}}\left( {{\bf{L\rho }}} \right)} \right)} \right)}</math></center>
 
<center><math>\exp \left[ { - i{\bf{L}}\Delta t} \right]{\bf{\rho }} = \sum\limits_{n = 0}^\infty  {\frac{{{{\left( { - i\Delta t} \right)}^n}}}{{n!}}{\bf{L}}\left( {...\left( {{\bf{L}}\left( {{\bf{L\rho }}} \right)} \right)} \right)}</math></center>
  
 +
This operation is cheaper than matrix exponentiation followed by matrix-vector multiplication, but only when it is performed once. If many time steps are required, it is cheaper to precompute the exponential.
  
 
==Syntax==
 
==Syntax==

Revision as of 11:51, 15 December 2018

Time propagation function optimised for one-off calls, such as hard pulses or slices of shaped pulses. For trajectory calculation and detection periods of time-domain experiments, use evolution.m instead.

This function calculates the action by a matrix exponential on a vector without computing the matrix exponential. The actual implementation is more sophisticated, but the principle becomes apparent from the following equation:

\(\exp \left[ { - i{\bf{L}}\Delta t} \right]{\bf{\rho }} = \sum\limits_{n = 0}^\infty {\frac{{{{\left( { - i\Delta t} \right)}^n}}}[[:Template:N!]]{\bf{L}}\left( {...\left( {{\bf{L}}\left( {{\bf{L\rho }}} \right)} \right)} \right)}\)

This operation is cheaper than matrix exponentiation followed by matrix-vector multiplication, but only when it is performed once. If many time steps are required, it is cheaper to precompute the 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.

See also

evolution.m, krylov.m, shaped_pulse_xy.m, shaped_pulse_af.m


Version 2.2, authors: Ilya Kuprov, Luke Edwards