Bill Allombert on Sat, 17 Dec 2016 15:46:53 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Ratpoint


On Sat, Dec 17, 2016 at 10:21:46AM +0100, Henri.Cohen@math.u-bordeaux.fr wrote:
> If you have it compiled in your directory, I have this very old script which
> may work (not tested in 5 years):
> 
> ratpoints(Curve,bound=1024,flags="")=
> {
>   local(lc,infty);
>   lc = length(Curve);
>   if (lc<=1,error("The polynomial must have degree >=1"));
>   if (lc>=12,error("The polynomial must have degree <=10"));
>   Curve=concat(vector(lc,i,Str(Curve[lc+1-i]" ")));
>   Curve=extern(concat(["echo \\{\\[ 0; ratpoints '",Curve,"' ",bound," -q
> ",fla\
> gs," | sed -e 's/(\\([-/0-9]\\+\\) : \\([-/0-9]\\+\\))/,[\\1 ,\\2 ]/'; echo
> \\\
> ]\\}"]));
>   lc = length(Curve);
>   if(lc==1 || (lc==2 && Curve[2][2]==0),return([]));
>   infty= Curve[2][2]==0;
>   vector(lc-1-infty,i,Curve[i+1+infty][1]/Curve[i+1+infty][2])
> }

In that spirit, I use this one:

ratpoints(pol,lim:small=1,singlepoint=1)=
{
  my(v=concat(apply(x->concat(x," "),Vecrev(pol))));
  my(opt=if(singlepoint," -1",""));
  my(e=externstr(Str("./ratpoints '",v,"' ",lim, " -q -i ",opt," | tr
'():' '[],'")));
  my(L=apply(x->[x[1],x[2]]/x[3],eval(e)));
  if(#L && singlepoint,L[1],L);
}

Cheers,
Bill.