Example computation
We replicate here Example 3.2 of the paper using step by step the code described in Code and implementation.
i1 : load "main_algorithm.m2"
i2 : R = QQ[x_(1,1)..x_(1,3)]**QQ[x_(2,1),x_(2,2)]**QQ[x_(3,1),x_(3,2)]**QQ[x_(4,1),x_(4,2)];
i3 : T = 12*x_(1,1)*x_(2,1)*x_(3,1)*x_(4,1)+8*x_(1,1)*x_(2,1)*x_(3,1)*x_(4,2)+
6*x_(1,1)*x_(2,1)*x_(3,2)*x_(4,1)+
4*x_(1,1)*x_(2,1)*x_(3,2)*x_(4,2)+30*x_(1,1)*x_(2,2)*x_(3,1)*x_(4,1)+20*x_(1,1)*x_(2,2)*x_(3,1)*x_(4,2)+
15*x_(1,1)*x_(2,2)*x_(3,2)*x_(4,1)+10*x_(1,1)*x_(2,2)*x_(3,2)*x_(4,2)+8*x_(1,2)*x_(2,1)*x_(3,1)*x_(4,1)+
8*x_(1,2)*x_(2,1)*x_(3,1)*x_(4,2)+5*x_(1,2)*x_(2,1)*x_(3,2)*x_(4,1)+6*x_(1,2)*x_(2,1)*x_(3,2)*x_(4,2)+
35*x_(1,2)*x_(2,2)*x_(3,1)*x_(4,1)+38*x_(1,2)*x_(2,2)*x_(3,1)*x_(4,2)+23*x_(1,2)*x_(2,2)*x_(3,2)*x_(4,1)+
30*x_(1,2)*x_(2,2)*x_(3,2)*x_(4,2)+16*x_(1,3)*x_(2,1)*x_(3,1)*x_(4,1)+16*x_(1,3)*x_(2,1)*x_(3,1)*x_(4,2)+
10*x_(1,3)*x_(2,1)*x_(3,2)*x_(4,1)+12*x_(1,3)*x_(2,1)*x_(3,2)*x_(4,2)+52*x_(1,3)*x_(2,2)*x_(3,1)*x_(4,1)+
64*x_(1,3)*x_(2,2)*x_(3,1)*x_(4,2)+37*x_(1,3)*x_(2,2)*x_(3,2)*x_(4,1)+54*x_(1,3)*x_(2,2)*x_(3,2)*x_(4,2);
i4 : Rten = spaceReshape((1,2),T)--reshape of the first two factors of T
o4 = 12x x x + 8x x x + 6x x x + 4x x x + 30x x x + 20x x x + 15x x x + 10x x x + 8x x x + 8x x x + 5x x x + 6x x x + 35x x x + 38x x x + 23x x x + 30x x x + 16x x x + 16x x x + 10x x x + 12x x x + 52x x x + 64x x x + 37x x x + 54x x x
(1, 2),0 3,1 4,1 (1, 2),0 3,1 4,2 (1, 2),0 3,2 4,1 (1, 2),0 3,2 4,2 (1, 2),1 3,1 4,1 (1, 2),1 3,1 4,2 (1, 2),1 3,2 4,1 (1, 2),1 3,2 4,2 (1, 2),2 3,1 4,1 (1, 2),2 3,1 4,2 (1, 2),2 3,2 4,1 (1, 2),2 3,2 4,2 (1, 2),3 3,1 4,1 (1, 2),3 3,1 4,2 (1, 2),3 3,2 4,1 (1, 2),3 3,2 4,2 (1, 2),4 3,1 4,1 (1, 2),4 3,1 4,2 (1, 2),4 3,2 4,1 (1, 2),4 3,2 4,2 (1, 2),5 3,1 4,1 (1, 2),5 3,1 4,2 (1, 2),5 3,2 4,1 (1, 2),5 3,2 4,2
o4 : QQ[x ..x , x ..x ]
(1, 2),0 (1, 2),5 3,1 4,2
i5 : checkfun(secondSec(Rten)) --verify that \theta_{1,2}(T) belongs to the second secant variety
o5 = true
i6 : (A,tconc,cindList) = concisionFirst(1,Rten) --A is the matrix of the first flattening of \theta_{1,2}(T)
o6 = (| 12 8 6 4 |, | 1 0 1/4 -1/2 |, {0, 1})
| 30 20 15 10 | | 0 1 3/8 5/4 |
| 8 8 5 6 |
| 35 38 23 30 |
| 16 16 10 12 |
| 52 64 37 54 |
o6 : Sequence
i7 : tenCONC = reconstructFromMatrixConc(A,tconc,cindList) --concise tensor T' of \theta_{1,2}(T)
1 1 3 5
o7 = y x x + -y x x - -y x x + y x x + -y x x + -y x x
0 3,1 4,1 4 0 3,2 4,1 2 0 3,2 4,2 1 3,1 4,2 8 1 3,2 4,1 4 1 3,2 4,2
o7 : newfirst
i8 : Mat = flattening(tenCONC,1)
o8 = {{-1, 0, 0} | 1 0 0 0 0 0 0 0 |, {0, -1, 0} | 1 1/4 |, {0, 0, -1} | 1 0 |}
{-1, 0, 0} | 0 1 0 0 0 0 0 0 | {0, -1, 0} | 0 -1/2 | {0, 0, -1} | 1/4 -1/2 |
{-1, 0, 0} | 1/4 3/8 0 0 0 0 0 0 | {0, -1, 0} | 0 3/8 | {0, 0, -1} | 0 1 |
{-1, 0, 0} | -1/2 5/4 0 0 0 0 0 0 | {0, -1, 0} | 1 5/4 | {0, 0, -1} | 3/8 5/4 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
{0, -1, 0} | 0 0 | {0, 0, -1} | 0 0 |
o8 : List
i9 : Mat = Mat_0
o9 = {-1, 0, 0} | 1 0 0 0 0 0 0 0 |
{-1, 0, 0} | 0 1 0 0 0 0 0 0 |
{-1, 0, 0} | 1/4 3/8 0 0 0 0 0 0 |
{-1, 0, 0} | -1/2 5/4 0 0 0 0 0 0 |
4 8
o9 : Matrix newfirst <--- newfirst
i10 : Mat = transpose(Mat)
o10 = {1, 0, 0} | 1 0 1/4 -1/2 |
{1, 0, 0} | 0 1 3/8 5/4 |
{1, 0, 0} | 0 0 0 0 |
{1, 0, 0} | 0 0 0 0 |
{1, 0, 0} | 0 0 0 0 |
{1, 0, 0} | 0 0 0 0 |
{1, 0, 0} | 0 0 0 0 |
{1, 0, 0} | 0 0 0 0 |
8 4
o10 : Matrix newfirst <--- newfirst
i11 : Cc_1 = Mat_{0..(numcols(Mat)//2-1)}^{0,1} ---first face of the pencil
o11 = {1, 0, 0} | 1 0 |
{1, 0, 0} | 0 1 |
2 2
o11 : Matrix newfirst <--- newfirst
i12 : Cc_2 = Mat_{(numcols(Mat)//2)..numcols(Mat)-1}^{0,1} --second face of the pencil
o12 = {1, 0, 0} | 1/4 -1/2 |
{1, 0, 0} | 3/8 5/4 |
2 2
o12 : Matrix newfirst <--- newfirst
i13 : rightIn = transpose(Cc_2)*(inverse(Cc_2*transpose(Cc_2))) --right inverse of C2
o13 = {-1, 0, 0} | 5/2 1 |
{-1, 0, 0} | -3/4 1/2 |
2 2
o13 : Matrix newfirst <--- newfirst
i14 : D = Cc_1*rightIn --C1*C2^{-1}
o14 = {1, 0, 0} | 5/2 1 |
{1, 0, 0} | -3/4 1/2 |
2 2
o14 : Matrix newfirst <--- newfirst
i15 : D = sub(D,QQ);
2 2
o15 : Matrix QQ <--- QQ
i16 : (e,v) = eigenvectors(D) --we need the eigenvalues of C1*C2^{-1}
o16 = ({2}, | .894427 -.5547 |)
{1} | -.447214 .83205 |
o16 : Sequence
i17 : for i to 1 do(
w_i = mingens(ker(D-(realPart(e_i))*id_(RR^2))); --these are the eigenvectors
);--we do not use the eigenvectors given by the M2 builted function because of the numerical inaccuracy
-- warning: experimental computation over inexact field begun
-- results not reliable (one warning given per session)
i18 : firstindcol = sub(A_{cindList_0},RR)--first indep column of the flattening matrix A
o18 = | 12 |
| 30 |
| 8 |
| 35 |
| 16 |
| 52 |
6 1
o18 : Matrix RR <--- RR
53 53
i19 : secondindcol = sub(A_{cindList_1},RR)--second indep column of the flattening matrix A
o19 = | 8 |
| 20 |
| 8 |
| 38 |
| 16 |
| 64 |
6 1
o19 : Matrix RR <--- RR
53 53
i20 : for i to 1 do(
rmat_i = firstindcol*w_i_(0,0)+secondindcol*w_i_(1,0);--matrix of the eigenvector
rmat_i = transpose reshape(RR^2,RR^3,rmat_i);--matrix of the eigenvector
print minors(2,rmat_i);--we do not compute the rank usinf the builted funtion "rank" to avoid problems due to the fact that we are in an inexact field
);
ideal (192, -192)
ideal ()
i21 : --Equivalently one can simply check the result of the following
i22: restart
Macaulay2, version 1.19.1
with packages: ConwayPolynomials, Elimination, IntegralClosure, InverseSystems, LLLBases, MinimalPrimes, PrimaryDecomposition, ReesAlgebra, Saturation, TangentCone
i1 : load "eqnTangential.m2"
i2 : load "main_algorithm.m2"
i3 : R = QQ[x_(1,1)..x_(1,3)]**QQ[x_(2,1),x_(2,2)]**QQ[x_(3,1),x_(3,2)]**QQ[x_(4,1),x_(4,2)];
i4 : T = 12*x_(1,1)*x_(2,1)*x_(3,1)*x_(4,1)+8*x_(1,1)*x_(2,1)*x_(3,1)*x_(4,2)+6*x_(1,1)*x_(2,1)*x_(3,2)*x_(4,1)+
4*x_(1,1)*x_(2,1)*x_(3,2)*x_(4,2)+30*x_(1,1)*x_(2,2)*x_(3,1)*x_(4,1)+20*x_(1,1)*x_(2,2)*x_(3,1)*x_(4,2)+
15*x_(1,1)*x_(2,2)*x_(3,2)*x_(4,1)+10*x_(1,1)*x_(2,2)*x_(3,2)*x_(4,2)+8*x_(1,2)*x_(2,1)*x_(3,1)*x_(4,1)+
8*x_(1,2)*x_(2,1)*x_(3,1)*x_(4,2)+5*x_(1,2)*x_(2,1)*x_(3,2)*x_(4,1)+6*x_(1,2)*x_(2,1)*x_(3,2)*x_(4,2)+
35*x_(1,2)*x_(2,2)*x_(3,1)*x_(4,1)+38*x_(1,2)*x_(2,2)*x_(3,1)*x_(4,2)+23*x_(1,2)*x_(2,2)*x_(3,2)*x_(4,1)+
30*x_(1,2)*x_(2,2)*x_(3,2)*x_(4,2)+16*x_(1,3)*x_(2,1)*x_(3,1)*x_(4,1)+16*x_(1,3)*x_(2,1)*x_(3,1)*x_(4,2)+
10*x_(1,3)*x_(2,1)*x_(3,2)*x_(4,1)+12*x_(1,3)*x_(2,1)*x_(3,2)*x_(4,2)+52*x_(1,3)*x_(2,2)*x_(3,1)*x_(4,1)+
64*x_(1,3)*x_(2,2)*x_(3,1)*x_(4,2)+37*x_(1,3)*x_(2,2)*x_(3,2)*x_(4,1)+54*x_(1,3)*x_(2,2)*x_(3,2)*x_(4,2);
i5 : moreThanThreeF(T)
T corresp. to case f