propint

Compute pulse propagators.

Syntax
U = propint(H0,H1,tp,freq)
U = propint(H0,H1,tp,freq,phase)
U = propint(H0,H1,tp,freq,phase,n)
[U,SaveU] = propint(...)

U = propint(SaveU,tp,freq)
U = propint(SaveU,tp,freq,phase)
Description

propint computes a pulse propagator by numerically integrating

[eqn]
over the interval t=tp(1) to t=tp(2) using steps of dt = 1/freq/n.

H0 is the static Hamiltonian, H1 the time-dependent one. They should both be in units of MHz. tp is a 2-element vector with the start and end time of the pulse in μs, freq is the irradiation frequency ν in MHz. phase gives the initial phase φ in radians (default is 0). n gives the number of intervals in which one period of the propagation is divided, its default is 256.

The resulting propagator is returned in U. If propagators of more than one pulse, but the same H0 and H1 are wanted, then one should retrieve SaveU from the first call to propint.

[Ua,SaveU] = propint(myH0,myH1,tpa,freq);

It contains intermediate integration results which can be reused in the next call. In that case use the calling form where SaveU is passed as argument instead of H0 and H1.

Ub = propint(SaveU,tpb,freq);

The savings in computation time are enormous. While the first call might take some time, the second call finishes in an instant.

Examples

A resonant π/2 pulse for a spin-1 would be represented by the propagator

Sz = sop(1,'z'); Sy = sop(1,'y'); % S=1 system
mwFreq = 10e3; tp = 0.010; % 10 GHz, 10 ns
U = propint(mwFreq*Sz,1/2/tp*Sy,tp,mwFreq)
U =
   0.5000 + 0.0006i  -0.7071 - 0.0004i   0.5000 + 0.0000i
   0.7071 + 0.0004i   0.0000 - 0.0000i  -0.7071 + 0.0004i
   0.5000 + 0.0000i   0.7071 - 0.0004i   0.5000 - 0.0006i

A resonant π pulse on an two-spin system gives a propagator

spins = [1/2 1/2];
Sz = sop(spins,'ze'); Sy = sop(spins,'ye');
mwFreq = 10e3; tp = 0.010; % 10 GHz, 10 ns
U = propint(mwFreq*Sz,1/tp*Sy,tp,mwFreq)
U =
 0.0000 + 0.0012i       0           -1.0000 + 0.0000i       0          
      0            0.0000 + 0.0012i       0           -1.0000 + 0.0000i
 1.0000 - 0.0000i       0            0.0000 - 0.0012i       0          
      0            1.0000 - 0.0000i       0            0.0000 - 0.0012i

This propagator inverts populations in the density matrix.

Density0 = -Sz;
NewDensity = U*Density0*U'
NewDensity =
 0.5000 + 0.0000i       0           -0.0000 - 0.0012i       0          
      0            0.5000 + 0.0000i       0           -0.0000 - 0.0012i
-0.0000 + 0.0012i       0           -0.5000                 0          
      0           -0.0000 + 0.0012i       0           -0.5000          
See also

evolve, sigeq