Post new topic Reply to topic  [ 3 posts ] 
Author Message
 Post subject: Problem with ActionIsProper (by jaradat and drueda)
PostPosted: Wed Apr 28, 2010 6:22 pm 

Joined: Mon Mar 24, 2008 10:52 pm
Posts: 5
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


Report this post
Top
 Profile  
Reply with quote  
 Post subject: Re: Problem with ActionIsProper (by jaradat and drueda)
PostPosted: Thu Apr 29, 2010 1:35 pm 
Site Admin

Joined: Wed Nov 12, 2008 5:09 pm
Posts: 20
Thanks for the bug report!

I have fixed this by the following code which is a bit different from your suggestion. (Your code mentions a variable 'cc' which should also be 'auxv', I suppose.)
This is going to be in the next minor release.

...
int auxv;

//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=1;
tee=@t;
while(delta!=0)
{
inv=inv+1/j*delta*tee;
auxv=auxv+1;
j=j*auxv;
tee=tee*@t;
delta=derivate(@m,delta);
}
id=id+ideal(inv);
}
...

Regards,
Frank


Report this post
Top
 Profile  
Reply with quote  
 Post subject: Re: Problem with ActionIsProper (by jaradat and drueda)
PostPosted: Thu Apr 29, 2010 7:37 pm 

Joined: Mon Mar 24, 2008 10:52 pm
Posts: 5
You are right. We called that variable cc (for counter) at first but we thought auxv (auxiliary variable) would be more "mnemonic" so we renamed it but missed one instance. Thank you.


Report this post
Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

It is currently Fri May 13, 2022 11:05 am
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group