OperatorSchmidtDecomposition

OperatorSchmidtDecomposition is a function that computes the operator Schmidt decomposition of a bipartite operator. The user may specify how many terms in the operator Schmidt decomposition they wish to be returned.

Syntax

 * S = OperatorSchmidtDecomposition(X)
 * S = OperatorSchmidtDecomposition(X,DIM)
 * S = OperatorSchmidtDecomposition(X,DIM,K)
 * [S,U,V] = OperatorSchmidtDecomposition(X,DIM,K)

Input arguments

 * X: A bipartite operator to have its operator Schmidt decomposition computed.
 * DIM (optional, by default has both subsystems of equal dimension): A specification of the dimensions of the subsystems that X lives on. DIM</tt> can be provided in one of three ways:
 * If DIM</tt> is a scalar, it is assumed that the first subsystem has dimension DIM</tt> and the second subsystem has dimension length(X)/DIM</tt>.
 * If $X \in M_{n_1} \otimes M_{n_2}$ then DIM</tt> should be a row vector containing the dimensions (i.e., DIM = [n_1, n_2]</tt>).
 * If the subsystems aren't square (i.e., $X \in M_{m_1, n_1} \otimes M_{m_2, n_2}$) then DIM</tt> should be a matrix with two rows. The first row of DIM</tt> should contain the row dimensions of the subsystems (i.e., the mi's) and its second row should contain the column dimensions (i.e., the ni's). In other words, you should set DIM = [m_1, m_2; n_1, n_2]</tt>.
 * K</tt> (optional, default 0): A flag that determines how many terms in the operator Schmidt decomposition should be computed. If K</tt> = 0 then all terms with non-zero operator Schmidt coefficients are computed. If K</tt> = -1 then all terms (including zero terms) are computed. If K</tt> &gt; 0 then the K</tt> terms with largest operator Schmidt coefficients are computed.

Output arguments

 * S</tt>: A vector containing the operator Schmidt coefficients of X</tt>.
 * <tt>U</tt> (optional): A cell containing the left Schmidt operators of <tt>X</tt>.
 * <tt>V</tt> (optional): A cell containing the right Schmidt operators of <tt>X</tt>.

A random example
The following code computes the operator Schmidt decomposition of a random density matrix in $M_2 \otimes M_4$ and verifies that it is indeed a valid tensor decomposition of that density matrix:

As an alternative (and easier) way to verify that we have a valid tensor decomposition of <tt>rho</tt>, we can use the <tt>TensorSum</tt> function: