# IsUPB

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
 Other toolboxes required IsUPB Determines whether or not a set of product vectors form a UPB none MinUPBSizeUPBUPBSepDistinguishable Distinguishing objects

IsUPB is a function that determines whether or not a given set of product vectors forms an unextendible product basis (UPB).

## Syntax

• IU = IsUPB(U,V,W,...)

## Argument descriptions

### Input arguments

• U,V,W,...: Matrices, each with the same number of columns as each other, whose columns are the local vectors of the supposed UPB.

### Output arguments

• IU: A flag (either 1 or 0) specifying that the set of vectors described by U,V,W,... is or is not a UPB.
• WIT (optional): If IU = 0 then this is a cell containing local vectors for a product vector orthogonal to every member of the non-UPB described by U,V,W,... (thus, it acts as a witness to the fact that it really is not a UPB). If IU = 1 then WIT is meaningless.

## Examples

### The "Tiles" UPB

The following code verifies that the well-known "Tiles" UPB is indeed a UPB:

```>> [u,v] = UPB('Tiles') % generate the local vectors of the "Tiles" UPB

u =

1.0000    0.7071         0         0    0.5774
0   -0.7071         0    0.7071    0.5774
0         0    1.0000   -0.7071    0.5774

v =

0.7071         0         0    1.0000    0.5774
-0.7071         0    0.7071         0    0.5774
0    1.0000   -0.7071         0    0.5774

>> IsUPB(u,v)

ans =

1```

However, if we remove the fifth vector from this set, then it is no longer a UPB:

```>> [iu,wit] = IsUPB(u(:,1:4),v(:,1:4));
>> iu

iu =

0

>> celldisp(wit) % display the witness

wit{1} =

0
0
1

wit{2} =

0.0000
0.7071
0.7071```

Indeed, it is not difficult to verify that wit{1} is orthogonal to u(:,1) and u(:,2), and wit{2} is orthogonal to v(:,3) and v(:,4), so the first four columns of u,v do not specify a UPB.

## Source code

Click on "expand" to the right to view the MATLAB source code for this function.