# AntisymmetricProjection

 Other toolboxes required AntisymmetricProjection Produces the projection onto the antisymmetric subspace none SymmetricProjectionSwapOperator Permutations and symmetry of subsystems

AntisymmetricProjection is a function that computes the orthogonal projection onto the antisymmetric subspace of two or more subsystems. The output of this function is always a sparse matrix.

## Syntax

• PA = AntisymmetricProjection(DIM)
• PA = AntisymmetricProjection(DIM,P)
• PA = AntisymmetricProjection(DIM,P,PARTIAL)
• PA = AntisymmetricProjection(DIM,P,PARTIAL,MODE)

## Argument descriptions

• DIM: The dimension of each of the subsystems.
• P (optional, default 2): The number of subsystems.
• PARTIAL (optional, default 0): If PARTIAL = 1 then PA isn't the orthogonal projection itself, but rather a matrix whose columns form an orthonormal basis for the antisymmetric subspace (and hence PA*PA' is the orthogonal projection onto the antisymmetric subspace).
• MODE (optional, default -1): A flag that determines which of two algorithms is used to compute the antisymmetric projection. If MODE = -1 then this script chooses which algorithm it thinks will be faster based on the values of DIM and P. If you wish to force the script to use a specific one of the algorithms (not recommended!), they are as follows:
• MODE = 0: Computes the antisymmetric projection by explicitly constructing an orthonormal basis of the antisymmetric subspace. The method for constructing such a basis is a modification of the procedure described for the symmetric subspace in [1]. This method is typically fast when DIM is small compared to P.
• MODE = 1: Computes the antisymmetric projection by averaging all P! permutation operators (in the sense of the PermutationOperator function). Permutation operators corresponding to an even permutation are given a weight of +1, while permutation operators corresponding to an odd permutation are given a weight of -1.[2] Because P! grows very quickly, this method is only practical when P is small.

## Examples

### Two subsystems

To compute the antisymmetric projection on two-qubit space, the following code suffices:

```>> AntisymmetricProjection(2)

ans =

(2,2)       0.5000
(3,2)      -0.5000
(2,3)      -0.5000
(3,3)       0.5000```

Note that the output of this function is always sparse. If you want a full matrix (not recommended for even moderately large DIM or P), you must explicitly convert it using MATLAB's built-in full function.

### More subsystems and PARTIAL

To compute a matrix whose columns form an orthonormal basis for the symmetric subspace of three-qutrit space, set PARTIAL = 1:

```>> PA = AntisymmetricProjection(3,3,1)

PA =

(6,1)       0.4082
(8,1)      -0.4082
(12,1)      -0.4082
(16,1)       0.4082
(20,1)       0.4082
(22,1)      -0.4082```

Note that PA is an isometry from the antisymmetric subspace (which is one-dimensional in this case) to the full three-qutrit space. In other words, PA'*PA is the identity matrix (i.e., the scalar 1 here) and PA*PA' is the orthogonal projection onto the antisymmetric subspace, which we can verify as follows:

```>> PA'*PA

ans =

(1,1)       1.0000

>> norm(PA*PA' - AntisymmetricProjection(3,3),'fro')

ans =

3.3307e-016```

### When DIM is too small

When DIM < P, the antisymmetric subspace is zero-dimensional, as verified in the DIM = 4, P = 6 case by the following line of code:

```>> AntisymmetricProjection(4,6)

ans =

All zero sparse: 4096-by-4096```