This resource function is obsolete. Use the paclet Wolfram/QuantumFramework instead.

Function Repository Resource:

QuantumSchmidtDecomposition

Source Notebook

Perform a Schmidt decomposition on a pure discrete quantum state

Contributed by: Jonathan Gorard and Ruhi Shah

ResourceFunction["QuantumSchmidtDecomposition"][QuantumDiscreteState[]]

performs a Schmidt decomposition on the specified QuantumDiscreteState.

Details and Options

The Schmidt decomposition in linear algebra represents a vector as the tensor product of two Hilbert spaces. In the context of quantum information theory, it represents a state vector as the tensor product of two quantum bases.
ResourceFunction["QuantumSchmidtDecomposition"] is only defined for pure QuantumDiscreteState objects containing at least two distinct subsystems (qudits).
By default, ResourceFunction["QuantumSchmidtDecomposition"][QuantumDiscreteState[]] returns a second QuantumDiscreteState object corresponding to the Schmidt decomposition of the first, with a new (Schmidt-decomposed) tensor product basis.
With the option "GiveFullDecomposition"True, ResourceFunction["QuantumSchmidtDecomposition"] returns a list containing the Schmidt-decomposed QuantumDiscreteState, as well as the two QuantumBasis objects involved in the tensor product.
The two bases involved in the tensor product consist of basis elements named u1,u2 and v1,v2, respectively.

Examples

Basic Examples (3) 

Create a two-qubit pure discrete quantum state in the computational basis (default):

In[1]:=
state = ResourceFunction["QuantumDiscreteState"][{1/Sqrt[2], 0, 1/Sqrt[2], 0}]
Out[1]=
In[2]:=
state["Basis"]
Out[2]=
In[3]:=
state["Amplitudes"]
Out[3]=

Perform a Schmidt decomposition of the state, resulting in a new (Schmidt-decomposed) tensor product basis:

In[4]:=
decomposition = ResourceFunction["QuantumSchmidtDecomposition"][state]
Out[4]=
In[5]:=
decomposition["Basis"]
Out[5]=
In[6]:=
decomposition["Amplitudes"]
Out[6]=

Show the basis elements of the new (Schmidt-decomposed) tensor product basis:

In[7]:=
decomposition["Basis"]["BasisElementAssociation"]
Out[7]=

Perform a full Schmidt decomposition (returning both the decomposed state, and the two individual bases involved in the tensor product):

In[8]:=
{decomposition, basis1, basis2} = ResourceFunction["QuantumSchmidtDecomposition"][state, "GiveFullDecomposition" -> True]
Out[8]=
In[9]:=
basis1["BasisElementAssociation"]
Out[9]=
In[10]:=
basis2["BasisElementAssociation"]
Out[10]=

Perform a Schmidt decomposition of a pure discrete quantum state with more than 2 subsystems by automatically partitioning the state into exactly two subsystems of (approximately) equal size:

In[11]:=
state = ResourceFunction["QuantumDiscreteState"][{"RandomPure", 4}];
{decomposition, basis1, basis2} = ResourceFunction["QuantumSchmidtDecomposition"][state, "GiveFullDecomposition" -> True]
Out[11]=
In[12]:=
decomposition["Amplitudes"]
Out[12]=
In[13]:=
basis1["BasisElementAssociation"]
Out[13]=
In[14]:=
basis2["BasisElementAssociation"]
Out[14]=

Perform a Schmidt decomposition of a state consisting of two three-dimensional qudits:

In[15]:=
state = ResourceFunction["QuantumDiscreteState"][{"RandomPure", 2}, 3];
{decomposition, basis1, basis2} = ResourceFunction["QuantumSchmidtDecomposition"][state, "GiveFullDecomposition" -> True]
Out[15]=
In[16]:=
decomposition["Amplitudes"]
Out[16]=
In[17]:=
basis1["BasisElementAssociation"]
Out[17]=
In[18]:=
basis2["BasisElementAssociation"]
Out[18]=

Options (2) 

If "GiveFullDecomposition"False (default), then QuantumSchmidtDecomposition returns only the decomposed state in the (Schmidt-decomposed) tensor product basis:

In[19]:=
state = ResourceFunction["QuantumDiscreteState"]["PhiPlus"];
decomposition = ResourceFunction["QuantumSchmidtDecomposition"][state, "GiveFullDecomposition" -> False]
Out[19]=
In[20]:=
decomposition["Amplitudes"]
Out[20]=

On the other hand, if "GiveFullDecomposition"True, then QuantumSchmidtDecomposition returns a list consisting of the decomposed state, as well as the two individual bases involved in the tensor product:

In[21]:=
{decomposition, basis1, basis2} = ResourceFunction["QuantumSchmidtDecomposition"][state, "GiveFullDecomposition" -> True]
Out[21]=
In[22]:=
decomposition["Amplitudes"]
Out[22]=
In[23]:=
basis1["BasisElementAssociation"]
Out[23]=
In[24]:=
basis2["BasisElementAssociation"]
Out[24]=

Publisher

Jonathan Gorard

Version History

  • 1.0.0 – 26 April 2021

Related Resources

License Information