Problem with ActionIsProper (by jaradat and drueda)
drueda · Wed Apr 28, 2010 6:22 pm
Using the procedure actionIsProper of the library ainvar.lib of Singular, we (jaradat and drueda)
identified a problem: during the computation of the exponential, the formula for the calculation of the denominator works correctly only for the first three terms (iterations). Here it is the code:
///////////////////////////////////////////////////////////////////////////
proc actionIsProper(matrix m)
.
.
.
{
poly inv,delta,tee,j;
ideal id=imap(bsr,id);
matrix @m[size(id)+1][1];
@m=imap(bsr,m),0;
//computes the exp(@t*m)(var(i)) for all i
for(i=1;i<=nvars(basering)-1;i++)
{
inv=var(i);
delta=derivate(@m,inv);
j=1;
tee=@t;
while(delta!=0)
{
inv=inv+1/j*delta*tee;
j=j*(j+1); ////Problem Line (denominator)
tee=tee*@t;
delta=derivate(@m,delta);
}
id=id+ideal(inv);
}
.
.
.
///////////////////////////////////////////////////////////////////////////
One way to fix it is by introducing a new variable (auxv) as seen in the
following modified version of your code:
///////////////////////////////////////////////////////////////////////////
proc actionIsProper(matrix m)
.
.
.
{
.
.
.
@m=imap(bsr,m),0;
int auxv; ///Added this line (1 of 3) to replace the line j=j+1
//computes the exp(@t*m)(var(i)) for all i
for(i=1;i<=nvars(basering)-1;i++)
{
inv=var(i);
delta=derivate(@m,inv);
j=1;
auxv=0; ///Added this line (2 of 3) to replace j=j+1
tee=@t;
while(delta!=0)
{
cc=cc+1;
inv=inv+1/j*delta*tee;
j=j*(auxv+1); ///Added this line (3 of 3) to replace j=j+1
below
/// j=j+1 ///Commented this line (1/1).
tee=tee*@t;
delta=derivate(@m,delta);
}
id=id+ideal(inv);
}
i=inSubring(@t,id)[1];
setring(bsr);
return(i);
}
///////////////////////////////////////////////////////////////////////////
We are not sure if this "bug" has already been reported.
Best regards,
jaradat, drueda
identified a problem: during the computation of the exponential, the formula for the calculation of the denominator works correctly only for the first three terms (iterations). Here it is the code:
///////////////////////////////////////////////////////////////////////////
proc actionIsProper(matrix m)
.
.
.
{
poly inv,delta,tee,j;
ideal id=imap(bsr,id);
matrix @m[size(id)+1][1];
@m=imap(bsr,m),0;
//computes the exp(@t*m)(var(i)) for all i
for(i=1;i<=nvars(basering)-1;i++)
{
inv=var(i);
delta=derivate(@m,inv);
j=1;
tee=@t;
while(delta!=0)
{
inv=inv+1/j*delta*tee;
j=j*(j+1); ////Problem Line (denominator)
tee=tee*@t;
delta=derivate(@m,delta);
}
id=id+ideal(inv);
}
.
.
.
///////////////////////////////////////////////////////////////////////////
One way to fix it is by introducing a new variable (auxv) as seen in the
following modified version of your code:
///////////////////////////////////////////////////////////////////////////
proc actionIsProper(matrix m)
.
.
.
{
.
.
.
@m=imap(bsr,m),0;
int auxv; ///Added this line (1 of 3) to replace the line j=j+1
//computes the exp(@t*m)(var(i)) for all i
for(i=1;i<=nvars(basering)-1;i++)
{
inv=var(i);
delta=derivate(@m,inv);
j=1;
auxv=0; ///Added this line (2 of 3) to replace j=j+1
tee=@t;
while(delta!=0)
{
cc=cc+1;
inv=inv+1/j*delta*tee;
j=j*(auxv+1); ///Added this line (3 of 3) to replace j=j+1
below
/// j=j+1 ///Commented this line (1/1).
tee=tee*@t;
delta=derivate(@m,delta);
}
id=id+ideal(inv);
}
i=inSubring(@t,id)[1];
setring(bsr);
return(i);
}
///////////////////////////////////////////////////////////////////////////
We are not sure if this "bug" has already been reported.
Best regards,
jaradat, drueda