Singular
https://www.singular.uni-kl.de/forum/

A question about the C interface
https://www.singular.uni-kl.de/forum/viewtopic.php?f=10&t=2776
Page 1 of 1

Author:  Uffish8 [ Wed Aug 15, 2018 12:07 pm ]
Post subject:  A question about the C interface

Dear all,

I'm trying to solve a system of polynomial equation via the singular C interface (the polynomials I need are quite complicated to generate, and I already have the code to do it in C). I created an ideal which describes the variety of solutions and called kStdfac and got a list of irreducible components (right?). Now I need to find out the dimensions of the components and get the point (if zero) or a simple description of the component (if non-zero, I conjecture all non-zero components are simple x=y, z=w style components).

So, what's the C equivalent of the "std" and "dim" interface commands?

Thanks a lot!

P.S. Is the C interface documented anywhere?
P.P.S. My request to register has been unanswered for a week :cry:

Author:  hannes [ Wed Aug 15, 2018 2:36 pm ]
Post subject:  Re: A question about the C interface

kStdFac: no, it does not (always) return the irreducible decomposition of an ideal;
it returns a decomposition of the radical (the components need not be irreducible),
which often is already a irreducible decomposition of the radical.
See http://www.singular.uni-kl.de/Manual/4-1-1/sing_240.htm
To get a complete decomposition, use minAssGTZ from primdec.lib

std: corresponds to kStd, see
https://www.singular.uni-kl.de/dox/html/kstd1_8h.html
(for the interface, see jjSTD,
https://www.singular.uni-kl.de/dox/html ... fd713db194
)

dim: corresponds to scDimInt

doxygen-documentation:
https://www.singular.uni-kl.de/dox/html/

Author:  Uffish8 [ Fri Aug 17, 2018 3:00 am ]
Post subject:  Re: A question about the C interface

I tried a minimal example for kStd and I didn't get the same answer the interpreter gives. What am I doing wrong? Is it one of the parameters of kStd?

Thanks!

char **nm=(char**)omalloc(3*sizeof(char*));
nm[0]=omStrDup("x");
nm[1]=omStrDup("y");
nm[2]=omStrDup("z");

R=rDefault(0,3,nm);
rChangeCurrRing(R);

// create the polynomial 3x^2y^2-2xy^3+3x^2
p1 = p_ISet(3,R);
pSetExp(p1,1,2);
pSetExp(p1,2,2);
p2 = p_ISet(-2,R);
pSetExp(p2,1,1);
pSetExp(p2,2,3);
p1 = p_Add_q(p1, p2, R);
p2 = p_ISet(3,R);
pSetExp(p2,1,2);
p1 = p_Add_q(p1, p2, R);

// 2x^3y-3x^2y^2+3y^2
p2 = p_ISet(2, R);
pSetExp(p2, 1, 3);
pSetExp(p2, 2, 1);
p3 = p_ISet(-3, R);
pSetExp(p3, 1, 2);
pSetExp(p3, 2, 2);
p2 = p_Add_q(p2, p3, R);
p3 = p_ISet(3, R);
pSetExp(p3, 2, 2);
p2 = p_Add_q(p2, p3, R);

// 2z
p3 = p_ISet(2,R);
pSetExp(p3, 3, 1);

I=idInit(3);
id_InsertPolyWithTests(I, 0, p1, true, true, R);
id_InsertPolyWithTests(I, 1, p2, true, true, R);
id_InsertPolyWithTests(I, 2, p3, true, true, R);

J = kStd(I, NULL, testHomog, NULL, NULL, 0, 0, NULL);
for ( int i = 0; i < idSize(J); i++ )
pWrite(J->m[i]);

Author:  hannes [ Fri Aug 17, 2018 3:51 pm ]
Post subject:  Re: A question about the C interface

Each sequence of pSetExp/p_SetExp/p_SetExpV/p_SetExpVL
mut be followed by pSetm/p_Setm,
and kStd is better called with default arguments:
Code:
...
// create the polynomial 3x^2y^2-2xy^3+3x^2
p1 = p_ISet(3,R);
pSetExp(p1,1,2);
pSetExp(p1,2,2);
pSetm(p1);
p2 = p_ISet(-2,R);
pSetExp(p2,1,1);
pSetExp(p2,2,3);
pSetm(p2);
p1 = p_Add_q(p1, p2, R);
p2 = p_ISet(3,R);
pSetExp(p2,1,2);
pSetm(p2);
p1 = p_Add_q(p1, p2, R);
...
J = kStd(I, NULL, testHomog, NULL);
....

Page 1 of 1 All times are UTC + 1 hour [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/