Difference between revisions of "State.m"

From Spinach Documentation Wiki
Jump to: navigation, search
(Document Spinach 2.12 bosonic mode functionality (PR 195))
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{DISPLAYTITLE:state.m}}
+
{{DISPLAYTITLE:state.m}} __NOTOC__
 
Generates Hilbert space density matrices and Liouville space state vectors from their human-readable descriptions.
 
Generates Hilbert space density matrices and Liouville space state vectors from their human-readable descriptions.
  
 
==Syntax==
 
==Syntax==
  
     rho=state(spin_system,states,spins,state_type,method)
+
     rho=state(spin_system,states,spins,method)
  
==Arguments==
+
==Parameters==
The function supports three types of calls:
+
This function supports three types of calls:
  
1. If a state is given as a character string and spins are named by passing a character string, ''e.g.''
+
'''1. If states is a string and spins is a string'''
  
    sum_Lz=state(spin_system,'Lz','13C');
+
                      states='Lz'; spins='13C';
  
the function returns the sum of the corresponding single-spin states on all spins with that name. In the example above, the sum of Lz states on all carbons in the system will be returned:
+
the function returns the sum of the corresponding single-spin density matrices (Hilbert space) or state vectors (Liouville space) on all spins of that type. Valid labels for states in this type of call are 'E' (identity), 'Lz', 'Lx', 'Ly', 'L+', 'L-', and 'Tl,m' (irreducible spherical tensor, l and m are integers). Valid labels for spins are standard isotope names as well as 'electrons', 'nuclei', and 'all'.
  
<center><math>\hat{\rho }=\hat{L}_{\text{Z}}^{\left( 1 \right)}+\hat{L}_{\text{Z}}^{\left( 2 \right)}+\hat{L}_{\text{Z}}^{\left( 3 \right)}+...</math></center>
+
'''2. If states is a string and spins is a vector'''
  
Valid labels for states in this type of call are 'E', 'Lz', 'L+', 'L-' and 'Tl,m'. Valid labels for spins are standard isotope names as well as 'nuclei', 'electrons' and 'all'.
+
                      states='Lz'; spins=[1 2 4];
  
2. If one input is a string and the other is a vector, ''e.g.''
+
the function returns the sum of all single-spin density matrices (Hilbert space) or state vectors (Liouville space) for all spins with the specified numbers. Valid labels for states are the same as in Item 1 above.
  
    sum_Lz=operator(spin_system,'Lz',[1 2 4]);
+
'''3. If states is a cell array of strings and spins is a cell array of numbers:'''
  
the function returns the sum of all single-spin states for all spins with the specified numbers. In the example above, the sum of Lz states for spins 1, 2, and 4 will be returned. Valid labels for states in this type of call are 'E', 'Lz', 'L+', 'L-', and 'Tl,m'. In the latter case, l and m are integers.
+
                      states={'Lz','L+'}; spins={1,2};
  
3. If the states are supplied as a cell array of strings and spins as a cell array of numbers, a product state is produced, ''e.g.''
+
then a product state density matrix (Hilbert space) or state vector (Liouville space) is produced. In the case above, Spinach will generate LzS+ density matrix in Hilbert space or its state vector in Liouville space. Valid labels for operators are the same as in Item 1 above.
 
    LzSp=state(spin_system,{'Lz','L+'},{1,2});
 
  
will return the LzS+ product state with Lz on spin 1 and L+ on spin 2. In the example above, the function would return the following state:
+
Bosonic modes have their own state labels: 'E' (identity), 'C' (creation), 'A' (annihilation), 'N' (population number), and 'BL#' for the projector onto the #-th Fock level, counted from 1, so that 'BL1' is the vacuum; spin energy level projectors use the parallel 'ZL#' notation. Coherent states of a mode are built by [[coherent.m]].
  
<center><math>\hat{\rho }=\hat{L}_{\text{Z}}^{\left( 1 \right)}\otimes \hat{L}_{+}^{\left( 2 \right)}</math></center>
+
Method argument has the following effect in sphten-liouv formalism:
 
 
Valid labels for states in the cell array are 'E', 'Lz', 'L+', 'L-', 'Tl,m'.
 
 
 
The fourth argument provides a finer control over the generation of the state vector or state matrix. The following possibilities exist in sphten-liouv formalism:
 
  
 
     'cheap'  - the state vector is generated without
 
     'cheap'  - the state vector is generated without
Line 47: Line 41:
 
                 field under [[chemical kinetics parameters]]
 
                 field under [[chemical kinetics parameters]]
  
This option is ignored in Hilbert space.
+
This option is ignored in zeeman-hilb and zeeman-liouv formalisms because there are no cheap shortcuts and kinetics is not available.
  
 
==Outputs==
 
==Outputs==
Line 58: Line 52:
  
 
     rho=state(spin_system,{'L+'},{3});
 
     rho=state(spin_system,{'L+'},{3});
 
An operator will be generated in Hilbert space and a state vector in Liouville space.
 
  
 
'''2. A sum of Lx states on all 15N spins in the system'''
 
'''2. A sum of Lx states on all 15N spins in the system'''
  
     rho=(state(spin_system,'L+','15N')+state(spin_system,'L-','15N'))/2;
+
     rho=state(spin_system,'Lx','15N');
 
 
An operator will be generated in Hilbert space and a state vector in Liouville space.
 
  
 
'''3. AxBx state between spin 2 and spin 5'''
 
'''3. AxBx state between spin 2 and spin 5'''
  
Both components are Cartesian and must therefore be translated into the convention above:
+
    rho=state(spin_system,{'Lx','Lx'},{2,5});
 
 
<center><math>\begin{matrix}
 
  {{{\hat{A}}}_{\text{X}}}=\frac{{{{\hat{A}}}_{+}}+{{{\hat{A}}}_{-}}}{2};\text{    }{{{\hat{B}}}_{\text{X}}}=\frac{{{{\hat{B}}}_{+}}+{{{\hat{B}}}_{-}}}{2} \\
 
  {{{\hat{A}}}_{\text{X}}}{{{\hat{B}}}_{\text{X}}}=\frac{1}{4}\left( {{{\hat{A}}}_{\text{+}}}{{{\hat{B}}}_{+}}+{{{\hat{A}}}_{+}}{{{\hat{B}}}_{-}}+{{{\hat{A}}}_{-}}{{{\hat{B}}}_{+}}+{{{\hat{A}}}_{-}}{{{\hat{B}}}_{-}} \right) \\
 
\end{matrix}</math></center>
 
  
The Spinach code would therefore be:
+
Density matrices will be generated in Hilbert space and a state vectors in Liouville space.
 
 
    AxBx=(state(spin_system,{'L+','L+'},{2,5})+...
 
          state(spin_system,{'L+','L-'},{2,5})+...
 
          state(spin_system,{'L-','L+'},{2,5})+...
 
          state(spin_system,{'L-','L-'},{2,5}))/4;
 
 
 
An operator will be generated in Hilbert space and a state vector in Liouville space.
 
 
 
==Notes==
 
In situations where the norm of the requested state vector is inconsequential, the method parameter may be specified. Setting method to 'cheap' triggers a very fast state vector generation procedure with the caveat that the norm of the resulting state vector is not guaranteed to be consistent with other state vectors. This switch is only applicable to the spherical tensor basis set.
 
  
 
==See also==
 
==See also==
  
[[unit_state.m]], [[unit_oper.m]], [[mprealloc.m]], [[singlet.m]], [[equilibrium.m]], [[operator.m]]
+
[[unit_state.m]], [[unit_oper.m]], [[mprealloc.m]], [[singlet.m]], [[equilibrium.m]], [[operator.m]], [[human2opspec.m]], [[deut_pair.m]], [[four_spin_states.m]], [[partner_state.m]], [[triplet.m]], [[zftrip.m]], [[Kernel_functions]]
 
 
  
''Version 2.2, authors: [[Ilya Kuprov]], [[Luke Edwards]], [[Dmitry Savostyanov]]''
+
''Version 2.8, authors: [[Ilya Kuprov]], [[Luke Edwards]], [[Dmitry Savostyanov]]''

Latest revision as of 05:40, 6 August 2026

Generates Hilbert space density matrices and Liouville space state vectors from their human-readable descriptions.

Syntax

    rho=state(spin_system,states,spins,method)

Parameters

This function supports three types of calls:

1. If states is a string and spins is a string

                     states='Lz'; spins='13C';

the function returns the sum of the corresponding single-spin density matrices (Hilbert space) or state vectors (Liouville space) on all spins of that type. Valid labels for states in this type of call are 'E' (identity), 'Lz', 'Lx', 'Ly', 'L+', 'L-', and 'Tl,m' (irreducible spherical tensor, l and m are integers). Valid labels for spins are standard isotope names as well as 'electrons', 'nuclei', and 'all'.

2. If states is a string and spins is a vector

                     states='Lz'; spins=[1 2 4];

the function returns the sum of all single-spin density matrices (Hilbert space) or state vectors (Liouville space) for all spins with the specified numbers. Valid labels for states are the same as in Item 1 above.

3. If states is a cell array of strings and spins is a cell array of numbers:

                     states={'Lz','L+'}; spins={1,2};

then a product state density matrix (Hilbert space) or state vector (Liouville space) is produced. In the case above, Spinach will generate LzS+ density matrix in Hilbert space or its state vector in Liouville space. Valid labels for operators are the same as in Item 1 above.

Bosonic modes have their own state labels: 'E' (identity), 'C' (creation), 'A' (annihilation), 'N' (population number), and 'BL#' for the projector onto the #-th Fock level, counted from 1, so that 'BL1' is the vacuum; spin energy level projectors use the parallel 'ZL#' notation. Coherent states of a mode are built by coherent.m.

Method argument has the following effect in sphten-liouv formalism:

    'cheap'  - the state vector is generated without
               normalisation. For very large spin sys-
               tens this is much faster

    'exact'  - exact state vector with correct normalisation

    'chem'   - the exact state vector weighted with the 
               concentrations specified in inter.chem.concs
               field under chemical kinetics parameters

This option is ignored in zeeman-hilb and zeeman-liouv formalisms because there are no cheap shortcuts and kinetics is not available.

Outputs

    rho     - a Hilbert space density matrix or a Liouville
              space state vector

Examples

1. L+ state on spin 3

    rho=state(spin_system,{'L+'},{3});

2. A sum of Lx states on all 15N spins in the system

    rho=state(spin_system,'Lx','15N');

3. AxBx state between spin 2 and spin 5

    rho=state(spin_system,{'Lx','Lx'},{2,5});

Density matrices will be generated in Hilbert space and a state vectors in Liouville space.

See also

unit_state.m, unit_oper.m, mprealloc.m, singlet.m, equilibrium.m, operator.m, human2opspec.m, deut_pair.m, four_spin_states.m, partner_state.m, triplet.m, zftrip.m, Kernel_functions

Version 2.8, authors: Ilya Kuprov, Luke Edwards, Dmitry Savostyanov