multiprop.m
Applies a propagator repeatedly by binary adaptive squaring.
The step count is cast to uint64 and its binary expansion is processed from the least significant bit upwards. Whenever the current bit is set, the current power of the propagator is applied to the state: as rho=P*rho in the sphten-liouv, zeeman-liouv and zeeman-wavef formalisms, and as rho=P*rho*P' in zeeman-hilb, where rho is a density matrix. The propagator is then squared and passed through clean_up.m with spin_system.tols.prop_chop, but only while higher binary powers remain to be processed. A zero step count returns the state unchanged.
Syntax
rho=multiprop(spin_system,P,rho,N)
Parameters
spin_system - Spinach spin system object
P - propagator matrix
rho - state vector or state-vector stack in Liouville space or
wavefunction formalism, or a density matrix in Hilbert space
formalism
N - number of times to apply the propagator
Outputs
rho - state vector or density matrix after N applications of P
Notes
The algorithm expands N into binary powers, squares P successively, and applies only the active powers to rho. This avoids constructing P^N explicitly. Propagator squares are cleaned up using spin_system.tols.prop_chop.
A step count supplied as a double must be a non-negative whole number not exceeding flintmax; Matlab integer types are accepted directly.
See also
propagator.m, evolution.m, step.m, krylov.m, clean_up.m, Kernel functions
Version 2.13, authors: Ilya Kuprov