# IsUPB

Jump to navigation
Jump to search

IsUPB | |

Determines whether or not a set of product vectors form a UPB | |

Other toolboxes required | none |
---|---|

Related functions | MinUPBSize UPB UPBSepDistinguishable |

Function category | 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 here to view this function's source code on github.