|
D.8.7.10 num_prime_decom1
Procedure from library recover.lib (see recover_lib).
- Usage:
- num_prime_decom1(P,D,C); list P, int D, bigint C
P a list of lists representing a witness point set representing an ideal I
D should be a bound to the degree of the elements of the components of the
prime decomposition of I
C the number with which the images of the Veronese embeddings are multiplied
- Return:
- list of ideals: each of the ideals a prime component of the radical of I
- Note:
- Should only be called from a ring over the complex numbers.
Example:
| LIB "recover.lib";
//First, we compute a prime decomposition of the ideal I=x+y;
ring R1=(complex,300,IUnit),(x,y),dp;
list p1=1,-1;
list P=list(p1);
int D=2;
bigint C=bigint(10)**300;
num_prime_decom1(P,D,C);
==> [1]:
==> _[1]=x+y
//Now, we try to obtain a prime decomposition of the ideal I=(x+y)*(y+2z), (x+y)*(x-3z);
ring R2=(complex,20,IUnit),(x,y,z),dp;
p1=1.7381623928,-1.7381623928,0.2819238763;
list p2=-3.578512854,2.385675236,-1.192837618;
P=p1,p2;
num_prime_decom1(P,D,10000);
==> [1]:
==> _[1]=x+y
==> [2]:
==> _[1]=-2*x-3*y
==> _[2]=-y^2+x*z+z^2
==> _[3]=x*z+y*z-z^2
//Now, we look at the result of a purely symbolic algorithm
ring r2=0,(x,y,z),dp;
ideal I=(x+y)*(y+2z), (x+y)*(x-3z);
primdecSY(I);
==> [1]:
==> [1]:
==> _[1]=x+y
==> [2]:
==> _[1]=x+y
==> [2]:
==> [1]:
==> _[1]=y+2z
==> _[2]=x-3z
==> [2]:
==> _[1]=y+2z
==> _[2]=x-3z
//If you compare the results, you may find that they don't match.
//Most likely, the hybrid algorithm got the second component wrong. This is due to the
//way the algorithm looks for homogeneous polynomial relations, and the specific version
//of the LLL algorithm used here (an implementation into Singular of a rather simple
//version which allows real input). It looks in degree 1, finds one relation and is
//thereafter unable to see a second one. Then it moves on to degree 2 and finds
//relations containing degree-1 relations as a factor.
|
|