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.