operator.m
Generates Hilbert space operators and Liouville space superoperators from their human-readable descriptions.
Syntax
A=operator(spin_system,operators,spins,operator_type,format)
Arguments
The function supports three types of calls:
1. If an operator is given as a single string and spins are named by passing a single string, e.g.
sum_Lz=operator(spin_system,'Lz','13C','comm','csc');
the function returns the sum of the corresponding single-spin superoperators on all spins with that name. In the example above, the sum of [Lz, ] commutation superoperators on all carbons in the system will be returned. Valid labels for operators in this type of call are 'E', 'Lz', 'L+', 'L-' and 'Tl,m'. Valid labels for spins are standard isotope names as well as 'electrons', 'nuclei' and 'all'.
2. If one input is a string and the other is a vector, e.g.
sum_Lz=operator(spin_system,'Lz',[1 2 4],'comm','csc');
the function returns the sum of all single-spin superoperators for all spins with the specified numbers. In the example above, the sum of [Lz, ] commutation superoperators for spins 1, 2, and 4 will be returned. Valid labels for operators in this type of call are 'E', 'Lz', 'L+', 'L-', and 'Tl,m'. In the latter case, l and m are integers.
3. If the operators are supplied as a cell array of strings and spins as a cell array of numbers, a product superoperator is produced, e.g.
LzSp=operator(spin_system,{'Lz','L+'},{1,2},'comm','csc');
will return the [LzL+, ] commutation superoperator with Lz on spin 1 and L+ on spin 2. Valid labels for operators in the cell array are 'E', 'Lz', 'L+', 'L-' and 'Tl,m'. In the latter case, l and m are integers.
In Liouville space calculations, operator_type can be set to:
'left' - produces left side product superoperator
'right' - produces right side product superoperator
'comm' - produces commutation superoperator (default)
'acomm' - produces anticommutation superoperator
In Hilbert space calculations operator_type parameter is ignored, and the operator itself is always returned.
The format parameter refers to the format of the output: 'csc' returns a Matlab sparse matrix, 'xyz' returns a [rows, cols, vals] array.
Outputs
A - a CSC sparse (default) or a [rows, cols, vals] repre-
sentation of a spin operator or superoperator.
Examples
1. L+ on spin 3
Lp=operator(spin_system,{'L+'},{3});
An operator will be generated in Hilbert space and a commutation superoperator in Liouville space.
2. A sum of Lx on all 15N spins in the system
Lx=(operator(spin_system,'L+','15N')+operator(spin_system,'L-','15N'))/2;
An operator will be generated in Hilbert space and a commutation superoperator in Liouville space.
3. AxBx between spin 2 and spin 5
Both components are Cartesian and must therefore be translated into the convention above:
The Spinach code would therefore be:
AxBx=(operator(spin_system,{'L+','L+'},{2,5})+...
operator(spin_system,{'L+','L-'},{2,5})+...
operator(spin_system,{'L-','L+'},{2,5})+...
operator(spin_system,{'L-','L-'},{2,5}))/4;
An operator will be generated in Hilbert space and a commutation superoperator in Liouville space.
Notes
WARNING: do not try to obtain product commutation superoperators by multiplying them up! It is easy to see that
\({{\hat{\hat{O}}}^{2}}=\left[ \hat{O},\left[ \hat{O},\_ \right] \right]\ne \left[ {{{\hat{O}}}^{2}},\_ \right]\)
If you require a commutation superoperator corresponding to a multi-spin operator, use the syntax given in Section 3 above.
See also
unit_state.m, unit_oper.m, mprealloc.m, singlet.m, equilibrium.m, state.m
Version 2.2, authors: Ilya Kuprov, Luke Edwards, Dmitry Savostyanov