state_props.schmidt_rank¶
Calculate the Schmidt rank of a quantum state.
Functions¶
|
Compute the Schmidt rank [1]. |
|
Operator Schmidt rank of variable. |
Module Contents¶
- state_props.schmidt_rank.schmidt_rank(rho, dim=None)¶
Compute the Schmidt rank [1].
For complex Euclidean spaces \(\mathcal{X}\) and \(\mathcal{Y}\), a pure state \(u \in \mathcal{X} \otimes \mathcal{Y}\) possesses an expansion of the form:
\[u = \sum_{i} \lambda_i v_i w_i,\]where \(v_i \in \mathcal{X}\) and \(w_i \in \mathcal{Y}\) are orthonormal states.
The Schmidt coefficients are calculated from
\[A = \text{Tr}_{\mathcal{B}}(u^* u).\]The Schmidt rank is the number of non-zero eigenvalues of \(A\). The Schmidt rank allows us to determine if a given state is entangled or separable. For instance:
If the Schmidt rank is 1: The state is separable,
If the Schmidt rank > 1: The state is entangled.
Compute the Schmidt rank of the input
rho
, provided as either a vector or a matrix that is assumed to live in bipartite space, where both subsystems have dimension equal tosqrt(len(vec))
.The dimension may be specified by the 1-by-2 vector
dim
and the rank in that case is determined as the number of Schmidt coefficients larger thantol
.Examples
Computing the Schmidt rank of the entangled Bell state should yield a value greater than one.
>>> from toqito.states import bell >>> from toqito.state_props import schmidt_rank >>> rho = bell(0) @ bell(0).conj().T >>> schmidt_rank(rho) np.int64(4)
Computing the Schmidt rank of the entangled singlet state should yield a value greater than \(1\).
>>> from toqito.states import bell >>> from toqito.state_props import schmidt_rank >>> u = bell(2) @ bell(2).conj().T >>> schmidt_rank(u) np.int64(4)
Computing the Schmidt rank of a separable state should yield a value equal to \(1\).
>>> from toqito.states import basis >>> from toqito.state_props import schmidt_rank >>> import numpy as np >>> e_0, e_1 = basis(2, 0), basis(2, 1) >>> e_00 = np.kron(e_0, e_0) >>> e_01 = np.kron(e_0, e_1) >>> e_10 = np.kron(e_1, e_0) >>> e_11 = np.kron(e_1, e_1) >>> >>> rho = 1 / 2 * (e_00 - e_01 - e_10 + e_11) >>> rho = rho @ rho.conj().T >>> schmidt_rank(rho) np.int64(1)
References
[1] (1,2)Wikipedia. Schmidt decomposition. URL: https://en.wikipedia.org/wiki/Schmidt_decomposition.
- Parameters:
rho (numpy.ndarray) – A bipartite vector or matrix to have its Schmidt rank computed.
dim (int | list[int] | numpy.ndarray) – A 1-by-2 vector or matrix.
- Returns:
The Schmidt rank of
rho
.- Return type:
float
- state_props.schmidt_rank._operator_schmidt_rank(rho, dim=None)¶
Operator Schmidt rank of variable.
If the input is provided as a density operator instead of a vector, compute the operator Schmidt rank.
- Parameters:
rho (numpy.ndarray)
dim (int | list[int] | numpy.ndarray)
- Return type:
float