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

Function Repository Resource:

QuantumSpectralDecomposition

Source Notebook

Perform a spectral decomposition (diagonalization) on a quantum state or operator

Contributed by: Jonathan Gorard and Ruhi Shah

ResourceFunction["QuantumSpectralDecomposition"][QuantumDiscreteState[]]

performs a spectral decomposition on the specified QuantumDiscreteState.

ResourceFunction["QuantumSpectralDecomposition"][QuantumDiscreteOperator[]]

performs a spectral decomposition on the specified QuantumDiscreteOperator.

ResourceFunction["QuantumSpectralDecomposition"][QuantumMeasurementOperator[]]

performs a spectral decomposition on the specified QuantumMeasurementOperator.

ResourceFunction["QuantumSpectralDecomposition"][QuantumHamiltonianOperator[]]

performs a spectral decomposition on the specified QuantumHamiltonianOperator.

ResourceFunction["QuantumSpectralDecomposition"][QuantumCircuitOperator[]]

performs a spectral decomposition on the specified QuantumCircuitOperator, represented as a QuantumDiscreteOperator.

Details

The spectral decomposition in linear algebra and functional analysis represents a Hermitian/normal matrix (or linear operator) as a diagonal matrix/operator in some basis. In the context of quantum information theory, it diagonalizes a density matrix, evolution operator, measurement operator, Hamiltonian operator or circuit operator by introducing an appropriate orthonormal basis.
ResourceFunction["QuantumSpectralDecomposition"] will return a QuantumDiscreteState object if the input was a QuantumDiscreteState object, a QuantumDiscreteOperator object if the input was a QuantumDiscreteOperator object, etc. The only exception to this rule is the QuantumCircuitOperator object, whose spectral decomposition is always a QuantumDiscreteOperator object (i.e. ResourceFunction["QuantumSpectralDecomposition"] always returns the operator representation of the resulting circuit).
ResourceFunction["QuantumSpectralDecomposition"] is defined for projection-valued QuantumMeasurementOperator objects, but not for positive operator-valued QuantumMeasurementOperator objects.
The basis elements in the resulting orthonormal basis are named s1,s2,.

Examples

Basic Examples (5) 

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

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

Perform a spectral decomposition of the state, resulting in a pure state with a diagonalized density matrix and a new (spectral-decomposed) basis:

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

Show the basis elements of the new (spectral-decomposed) basis:

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

Perform a spectral decomposition of a single-qubit mixed discrete quantum state in the computational basis instead, resulting in a mixed state with a diagonalized density matrix:

In[8]:=
state2 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
state2["Amplitudes"]
Out[8]=
In[9]:=
state2["Basis"]
Out[9]=
In[10]:=
decomposition2 = ResourceFunction["QuantumSpectralDecomposition"][state2]
Out[10]=
In[11]:=
decomposition2["Amplitudes"]
Out[11]=

Show the new (spectral-decomposed) basis:

In[12]:=
decomposition2["Basis"]
Out[12]=
In[13]:=
decomposition2["Basis"]["BasisElementAssociation"]
Out[13]=

Perform a spectral decomposition of an arity-2 QuantumDiscreteOperator object, resulting in a QuantumDiscreteOperator object with a diagonalized matrix representation:

In[14]:=
operator = ResourceFunction["QuantumSpectralDecomposition"][
   ResourceFunction["QuantumDiscreteOperator"]["Fourier", {1, 2}]];
operator["Operator"]
Out[14]=

Show the new (spectral-decomposed) basis:

In[15]:=
operator["Basis"]
Out[15]=
In[16]:=
operator["Basis"]["BasisElementAssociation"]
Out[16]=

Perform a spectral decomposition of an arity-3 projection-valued QuantumMeasurementOperator object, resulting in a projection-valued QuantumMeasurementOperator object with a diagonalized matrix representation:

In[17]:=
measurement = ResourceFunction["QuantumSpectralDecomposition"][
   ResourceFunction["QuantumMeasurementOperator"][
    "FourierBasis", {1, 2, 3}]];
measurement["MatrixRepresentation"]
Out[17]=

Show the new (spectral decomposed) basis:

In[18]:=
measurement["Basis"]
Out[18]=
In[19]:=
measurement["Basis"]["BasisElementAssociation"]
Out[19]=

Perform a spectral decomposition on an arity-1 QuantumHamiltonianOperator object, resulting in a QuantumHamiltonianOperator object with a diagonalized matrix representation:

In[20]:=
hamiltonian = ResourceFunction["QuantumSpectralDecomposition"][
   ResourceFunction[
     "QuantumHamiltonianOperator"][{{1 + \[FormalT]^2, 1 - \[FormalT]^2}, {1 - \[FormalT]^2, 1 + \[FormalT]^2}}]];
hamiltonian["Operator"]
Out[20]=

Show the new (spectral-decomposed) basis:

In[21]:=
hamiltonian["Basis"]
Out[21]=
In[22]:=
hamiltonian["Basis"]["BasisElementAssociation"]
Out[22]=

Perform a spectral decomposition of an arity-2 QuantumCircuitOperator object, resulting in a QuantumDiscreteOperator object with a diagonalized matrix representation:

In[23]:=
circuit = ResourceFunction[
    "QuantumCircuitOperator"][{ResourceFunction[
      "QuantumDiscreteOperator"]["Hadamard", {1}], ResourceFunction["QuantumDiscreteOperator"]["CNOT", {2, 1}], ResourceFunction["QuantumDiscreteOperator"]["S", {1}]}];
circuit["Diagram"]
Out[23]=
In[24]:=
operator = ResourceFunction["QuantumSpectralDecomposition"][circuit]
Out[24]=

Show the resulting operator association:

In[25]:=
operator["Operator"]
Out[25]=

Show the new (spectral-decomposed) basis:

In[26]:=
operator["Basis"]
Out[26]=
In[27]:=
operator["Basis"]["BasisElementAssociation"]
Out[27]=

Scope (2) 

QuantumSpectralDecomposition can perform spectral decompositions of quantum objects in arbitrary bases:

In[28]:=
operator = ResourceFunction["QuantumDiscreteOperator"][
   ResourceFunction["QuantumDiscreteOperator"]["CNOT", {1, 2}], ResourceFunction["QuantumBasis"]["PauliX", 2]];
operator["Operator"]
Out[28]=
In[29]:=
decomposition = ResourceFunction["QuantumSpectralDecomposition"][operator];
decomposition["Operator"]
Out[29]=
In[30]:=
decomposition["Basis"]
Out[30]=

Perform spectral decompositions of higher-dimensional quantum objects:

In[31]:=
state = ResourceFunction["QuantumDiscreteState"][{1, 1 + I, 1 - I}, 3];
state["Amplitudes"]
Out[31]=
In[32]:=
decomposition = ResourceFunction["QuantumSpectralDecomposition"][state];
decomposition["Amplitudes"]
Out[32]=
In[33]:=
decomposition["Basis"]
Out[33]=

Publisher

Jonathan Gorard

Version History

  • 1.0.0 – 02 June 2021

Related Resources

License Information