IMPORTANT UPDATE: A much faster and more robust version of this script is now available here, as part of a MATLAB package I am putting together called QETLAB. You may still use the old script (below) if you prefer, but it is highly recommended that you upgrade to the QETLAB version.
SchmidtOperatorNorm.m is a MATLAB script that bounds (or computes exactly, in low dimensions) the Schmidt operator norm of operators. The lower bounds that it computes were derived in . The semidefinite programming method for deriving upper bounds (and computing the exact answer in small dimensions) was derived in .
Download and Install
To use this script, you should first install the MATLAB semidefinite program solver SeDuMi using the steps outlined on its homepage. If possible, install SeDuMi 1.1R3, not SeDuMi 1.21, since there is a bug with version 1.21 when dealing with complex matrices. Note that you do not need to download the QuantumSeDuMi.m script separately — it is included with this Schmidt operator norm script.
Installing SeDuMi isn’t strictly necessary (see the “Usage Examples” section below), but it greatly improves the upper bounds provided by the script.
Once SeDuMi is installed (or not), download the SchmidtOperatorNorm.zip package, unzip it, and put its contents in your MATLAB scripts directory. The main file that you will be using is SchmidtOperatorNorm.m — the other files are helper functions that perform auxiliary tasks.
MATLAB Help File
SCHMIDTOPERATORNORM Estimate the Schmidt operator norm of a matrix NRM = SchmidtOperatorNorm(X,K,DIM) is a 1x2 vector containing a lower bound and an upper bound of the Schmidt K-norm of the operator X acting on two subsystems of dimension given by the 1x2 vector DIM NRM = SchmidtOperatorNorm(X,K) is a 1x2 vector containing a lower bound and an upper bound of the Schmidt K-norm of the operator X acting on two subsystems of dimension each of size sqrt(length(X)) NRM = SchmidtOperatorNorm(X,K,DIM,DOSDP,ITS) is a 1x2 vector containing a lower bound and an upper bound of the Schmidt K-norm of the operator X acting on two subsystems of dimension given by the 1x2 vector DIM. DOSDP specifies whether or not semidefinite programming should be used to improve the upper bound (0 for false, 1 for true, default is 1), and ITS is the number of iterations that should be used in the randomized approach to improve the lower bound (and higher number leads to a better estimate, but is slower) If DIM is a scalar instead of a vector, then it is assumed that the first subsystem of size DIM and the second subsystem of size length(X)/DIM Most of the lower bounds and basic facts about these norms were derived in . The semidefinite program method for computing upper bounds was derived in . v1.00 -- last updated November 18, 2009 Algorithm by Nathaniel Johnston and David W. Kribs Coded by Nathaniel Johnston  N. Johnston and D. W. Kribs, Schmidt Norms for Quantum States. Preprint (2009). arXiv:0909.3907v2 [quant-ph]  N. Johnston and D. W. Kribs, Computation of Schmidt Operator Norms with Applications in Quantum Information. Preprint (2009). http://www.nathanieljohnston.com/index.php/schmidtoperatornorm/
The following example shows how to compute the Schmidt operator 1 and 2-norm of a simple density matrix in M2 ⊗ M2. The 2-norm simply coincides with the standard operator norm of the matrix. The Schmidt 1-norm is computed exactly since the operator lives in small dimensions.
>> rho = [2 0 0 1;0 1 1 0;0 1 1 0;1 0 0 2]; >> eig(rho) ans = 0 1 2 3 >> SchmidtOperatorNorm(rho,1) ans = 2.5000 2.5000 >> SchmidtOperatorNorm(rho,2) ans = 3.0000 3.0000
The two numbers output by the script (e.g., 2.5000 and 2.5000) are a lower bound and an upper bound, respectively, of the Schmidt operator norm. These numbers will always coincide if the density operator lives in M2 ⊗ M2 or M2 ⊗ M3. When the two subsystems have different dimension, you must specify their dimensions so the script knows what subsystems are being considered. The following example shows, for example, that the norm when considering the space as M2 ⊗ M3 need not be the same as the norm when the space is thought of as M3 ⊗ M2.
>> rho = [6 1 0 0 2 1;1 3 0 0 2 1;0 0 1 0 0 0;0 0 0 1 0 0;2 2 0 0 2 1;1 1 0 0 1 2]; >> norm(rho) ans = 7.9618 >> SchmidtOperatorNorm(rho,1,[2,3]) ans = 6.5000 6.5000 >> SchmidtOperatorNorm(rho,1,[3,2]) ans = 7.9519 7.9519
To see that the script can not always compute the Schmidt norms exactly, consider the following example in M3 ⊗ M3. The first number output by SchmidtOperatorNorm is a lower bound of the norm, and the second number is an upper bound.
>> P=[2 0 -1 0 1 1 -1 2 -1; 0 2 -1 0 1 -1 -1 0 -1; -1 -1 1 0 -1 0 1 -1 1; 0 0 0 0 0 0 0 0 0; 1 1 -1 0 1 0 -1 1 -1; 1 -1 0 0 0 1 0 1 0; -1,-1,1,0,-1,0,1,-1,1; 2,0,-1,0,1,1,-1,2,-1; -1,-1,1,0,-1,0,1,-1,1]; >> norm(P) ans = 7.3028 >> SchmidtOperatorNorm(P,1) ans = 3.5317 4.6429 >> SchmidtOperatorNorm(P,2) ans = 4.8685 6.6588
If you, for whatever reason, are unable to unwilling to install the SeDuMi package that is used to perform the semidefinite programming part of the computation, you can tell the SchmidtOperatorNorm function to avoid the SDP part of the algorithm by setting its optional fourth argument to zero. The following example uses the same 9 × 9 matrix P from the previous example:
>> SchmidtOperatorNorm(P,1,[3,3],0) ans = 3.8405 6.5592 >> SchmidtOperatorNorm(P,2,[3,3],0) ans = 4.8685 7.3028
Notice that the upper bounds are much poorer than the upper bounds computed when using semidefinite programming. Also notice that one of the lower bounds is different than the lower bound computed earlier — this is because a simple randomized algorithm is used to try to improve the lower bound when possible.
- N. Johnston and D. W. Kribs, A Family of Norms With Applications In Quantum Information Theory. Preprint (2009). arXiv:0909.3907v2 [quant-ph]
- N. Johnston and D. W. Kribs, A Family of Norms With Applications In Quantum Information Theory II. Preprint (2010).