From: Pankaj S. <pan...@gm...> - 2014-03-24 19:30:34
|
>>>>>>>>>>>>>>>>>>>>>>>>>> > My conclusion is that if the Maxima > translator/compiler were better, gcl would be able to recognize the tail recursion and optimize it away, as it does in many other situations. I think that the best thing to do is to improve Maxima's translator. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------------- In this case is there any architecture document in place some where if some one would like to see and learn and might try to tweak something. Irrespective of being successful or not, at least it will be a very good experience to a novice. ------------------------------------------------------------------------------------ >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> takewhile4(makelist(i,i,10000),lambda([x],x>0))$ takes 0.55 sec. or occasionally much less. makelist alone takes 0.12 sec... > Another fix would be to have a destructive reverse. In lisp, nreverse. > You do not need to preserve the accumulated answer backwards. > Then the lisp version of cons would be much faster than maxima's which has to preserve the header... Anyway, a lisp version would be faster and maybe shorter. If it matters. RJF >>>>>>>>>>>>>>>> ------------------------------------------------------------------------------------ This is really amazing, I honestly wasn't expecting Maxima to be that fast, but looks I am fairly wrong. Are there other optimization tricks others know that can make programs this blazing fast. Is it that this mode_declare helps in converting it to packed arrays type data format ? Another observation I made is that using makelist is actually costly, for example on my system, Input:: makelist(i,i,10^6)$ Output :: Evaluation took 14.8100 seconds (14.8100 elapsed) Input :: makelist(i,i,10^7)$ Output :: Evaluation took 309.2700 seconds (309.2700 elapsed) So, I thought that arrays take absolutely no time in getting created unless dimensions product lead to some large number, In :: arr:make_array(fixnum,10000,1000); Out ::Evaluation took 0.0700 seconds (0.0700 elapsed) (%o3) Lisp array [10000,1000] In : make_array_2_list(arr,k,n):=block([count:0],mode_declare(count,fixnum),for i:0 thru k-1 do for j:0 thru n-1 do (arr[i,j]:count:count+1),arr)$ In : compile(make_array_2_list); In : make_array_2_list(arr,10000,1000); Out:Evaluation took 21.5300 seconds (21.5300 elapsed) (%o4) Lisp array [10000,1000] In :: length(listarray(arr)); Evaluation took 0.3000 seconds (0.3000 elapsed) (%o6) 1000000 In :: listarray(arr)$ (My system memory is exhausted in case of 10^7) but for 10^6 it takes 1.5 seconds. Hence doing this, it brings down time taken by makelist for 10^7 from 309 seconds to approx max 30 seconds. Is it not a better approach to use array to do general purpose list operation ? I have written small functions to convert data between list-matrix-array in any direction but I want to know if it might fail in some scenario. >>>>>> (defun $takewhile5(L p) (let ((c nil)(idx 0) (test nil)) (declare(fixnum idx)(optimize (speed 3)(safety 0))) (cons '(mlist) (nreverse (loop for x in (cdr L) finally (return c) do (incf idx) (setf test (mfuncall p x)) (if (and (not test) c)(return c)) (if test (push (list '(mlist) x idx) c))))))) So we are talking about 1200 X faster than the original. have fun. >>>>>>>>>>>>>>>>> Thanks but I won't be able to use it in maxima, though when I will learn Lisp, it will be a good example to explore. ------- Regards, Pankaj Sejwal _______________________________________________ "The more I read, the more I acquire, the more certain I am that I know nothing." ------- Voltaire On Tue, Mar 25, 2014 at 12:45 AM, < max...@li...> wrote: > Send Maxima-discuss mailing list submissions to > max...@li... > > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.sourceforge.net/lists/listinfo/maxima-discuss > or, via email, send a message with subject or body 'help' to > max...@li... > > You can reach the person managing the list at > max...@li... > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Maxima-discuss digest..." > > > Today's Topics: > > 1. Re: Kovacic Algorithm (Leo Butler) > 2. Re: make check result match failure (Robert Dodier) > 3. Re: Kovacic Algorithm (Dimiter Prodanov) > 4. Re: Kovacic Algorithm (Evgeniy Maevskiy) > 5. Re: Kovacic Algorithm (Robert Dodier) > 6. How NOT to simplify? (Helmut Jarausch) > 7. Re: How NOT to simplify? (Evgeniy Maevskiy) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Sun, 23 Mar 2014 22:01:41 +0000 > From: Leo Butler <l_b...@us...> > Subject: Re: [Maxima-discuss] Kovacic Algorithm > To: max...@li... > Message-ID: <1qp...@ma...> > Content-Type: text/plain; charset=us-ascii > > Nijso Beishuizen <ni...@ho...> writes: > > > Dear list, please see below. If someone is interested in kovacicODE.mac > > (around 34kb), just let me know. > > > > Best, > > Nyso > > Nyso, > May I suggest that you put this code here: > > http://sourceforge.net/apps/phpbb/maxima/viewforum.php?f=3 > > Leo > > > > > > On Sun, 2014-03-23 at 22:02 +0100, Nijso Beishuizen wrote: > >> Dear Neeraj, > >> > >> > >> kovacicODE solves second order linear ODE's with Liouvillian solutions > >> In maxima, just do something like this: > >> > >> load('kovacic.mac'); > >> ode:'diff(y,x,2)+a*'diff(y,x)+b*x=c; > >> kovacicODE(ode,y,x); > >> > >> Note that there is a lot of output before the final solution is given > >> > >> kovacicODE was tested using the Kamke database, which is included in > >> maxima in share/contrib/diffequations. > >> It solves around 50% or so of the second order linear equations. > >> > >> > >> The Kovacic algorithm is known to take a long time to finish for certain > >> ODE's, on my pc sometimes 5 minutes before it finally concludes that no > >> Liouvillian solutions exist. > >> > >> > >> It is recommended to define constants appearing in the ODE as constants. > >> It might be necessary to restrict the constants further, i.e. say that > >> a>0 or even x>0. > >> It is sometimes necessary to load absimp to get rid of abs(a) when a>0. > >> > >> > >> > >> After kovacicODE has found a solution, it tries to simplify the > solution by > >> merging constants into the integration constants %k1 and %k2. > >> I also try some simplifications and check the number of operators in the > >> new result. If the result has less operators, the simplification is > >> accepted. > >> In some cases, you will still end up with a complex solution, or with a > >> solution containing exponential integrals or gamma_incomplete solutions, > >> even though the solution can be simplified further. > >> > >> > >> > >> > >> On Wed, 2014-03-19 at 12:14 +0530, Neeraj Sangwan wrote: > >> > I am interested in development version. Could you please send it to > me. > >> > > >> > Thanking you > >> > Neeraj > >> > > >> > On Wed, Mar 19, 2014 at 2:32 AM, nijso beishuizen <ni...@ho...> > wrote: > >> > > Hello Neeraj, > >> > > > >> > > I have written an implementation of the Kovacic algorithm. It is > based on > >> > > the thesis of Carolyn Smith which you can download from the > university of > >> > > waterloo as a pdf: > >> > > > >> > > https://cs.uwaterloo.ca/research/tr/1984/CS-84-35.pdf > >> > > > >> > > I have a development version, if you are interested I can send it > to you. > >> > > > >> > > Best, > >> > > Nijso > >> > > > >> > > > >> > >> Date: Sat, 8 Mar 2014 11:23:17 +0530 > >> > >> Subject: Kovacic Algorithm > >> > >> From: ms...@gm... > >> > >> To: ni...@ho... > >> > > > >> > >> > >> > >> Respected Sir > >> > >> > >> > >> I was searching form some implemntation of kovacic algorithm and I > >> > >> fouund your question regarding the same somewhere. Did you find > some > >> > >> implementation? If yes could you please send some inks or files > >> > >> regarding this? > >> > >> > >> > >> Thanking you > >> > >> Neeraj > >> > >> 5th year Integrated MS student > >> > >> IISER Mohali > >> > > >> > >> > >> > > > > > > > > > ------------------------------------------------------------------------------ > > Learn Graph Databases - Download FREE O'Reilly Book > > "Graph Databases" is the definitive new guide to graph databases and > their > > applications. Written by three acclaimed leaders in the field, > > this first edition is now available. Download your free book today! > > http://p.sf.net/sfu/13534_NeoTech > > -- > Leo Butler leo...@me... > SDF Public Access UNIX System - http://sdf.lonestar.org > > > > > ------------------------------ > > Message: 2 > Date: Mon, 24 Mar 2014 00:44:10 +0000 (UTC) > From: Robert Dodier <rob...@gm...> > Subject: Re: [Maxima-discuss] make check result match failure > To: max...@li... > Message-ID: <slrnliuvv9.2ab.robert.dodier@freekbox.fglan> > > On 2014-03-23, Nijso Beishuizen <ni...@ho...> wrote: > > > I'm not sure how to make this result pass the test. Subtract the > > expected result, simplify and make "0" the expected result? I would > > expect that 'make check' does that internally, or not? > > The code to test actual against expected results tests only for exact > identity, not equivalence, since sometimes it is important to see that > the simlifier is returning one result or another. However, that also > makes the test machinery more sensitive to unimportant differences. > If it's enough for your purposes to test for equivalence, then it's OK > to compare ratsimp(actual - expected) to 0. > > best > > Robert Dodier > > > > > ------------------------------ > > Message: 3 > Date: Mon, 24 Mar 2014 11:40:44 +0100 > From: Dimiter Prodanov <dim...@gm...> > Subject: Re: [Maxima-discuss] Kovacic Algorithm > To: "max...@li..." > <max...@li...> > Message-ID: > < > CAF...@ma...> > Content-Type: text/plain; charset="iso-8859-1" > > Dear Nijso, > > I am interested to try it. > BTW why don't you set a github site for the code if you are willing to > share it. > > best regards, > > Dimiter Prodanov > -------------- next part -------------- > An HTML attachment was scrubbed... > > ------------------------------ > > Message: 4 > Date: Mon, 24 Mar 2014 16:51:33 +0300 > From: Evgeniy Maevskiy <ema...@e-...> > Subject: Re: [Maxima-discuss] Kovacic Algorithm > To: max...@li... > Message-ID: <533...@e-...> > Content-Type: text/plain; charset=windows-1251; format=flowed > > This is very interesting, thank you! > > Evgeniy > > > 24.03.2014 0:11, Nijso Beishuizen ?????: > > Dear list, please see below. If someone is interested in kovacicODE.mac > > (around 34kb), just let me know. > > > > Best, > > Nyso > > > > On Sun, 2014-03-23 at 22:02 +0100, Nijso Beishuizen wrote: > >> Dear Neeraj, > >> > >> > >> kovacicODE solves second order linear ODE's with Liouvillian solutions > >> In maxima, just do something like this: > >> > >> load('kovacic.mac'); > >> ode:'diff(y,x,2)+a*'diff(y,x)+b*x=c; > >> kovacicODE(ode,y,x); > >> > >> Note that there is a lot of output before the final solution is given > >> > >> kovacicODE was tested using the Kamke database, which is included in > >> maxima in share/contrib/diffequations. > >> It solves around 50% or so of the second order linear equations. > >> > >> > >> The Kovacic algorithm is known to take a long time to finish for certain > >> ODE's, on my pc sometimes 5 minutes before it finally concludes that no > >> Liouvillian solutions exist. > >> > >> > >> It is recommended to define constants appearing in the ODE as constants. > >> It might be necessary to restrict the constants further, i.e. say that > >> a>0 or even x>0. > >> It is sometimes necessary to load absimp to get rid of abs(a) when a>0. > >> > >> > >> > >> After kovacicODE has found a solution, it tries to simplify the > solution by > >> merging constants into the integration constants %k1 and %k2. > >> I also try some simplifications and check the number of operators in the > >> new result. If the result has less operators, the simplification is > >> accepted. > >> In some cases, you will still end up with a complex solution, or with a > >> solution containing exponential integrals or gamma_incomplete solutions, > >> even though the solution can be simplified further. > >> > >> > >> > >> > >> On Wed, 2014-03-19 at 12:14 +0530, Neeraj Sangwan wrote: > >>> I am interested in development version. Could you please send it to me. > >>> > >>> Thanking you > >>> Neeraj > >>> > >>> On Wed, Mar 19, 2014 at 2:32 AM, nijso beishuizen <ni...@ho...> > wrote: > >>>> Hello Neeraj, > >>>> > >>>> I have written an implementation of the Kovacic algorithm. It is > based on > >>>> the thesis of Carolyn Smith which you can download from the > university of > >>>> waterloo as a pdf: > >>>> > >>>> https://cs.uwaterloo.ca/research/tr/1984/CS-84-35.pdf > >>>> > >>>> I have a development version, if you are interested I can send it to > you. > >>>> > >>>> Best, > >>>> Nijso > >>>> > >>>> > >>>>> Date: Sat, 8 Mar 2014 11:23:17 +0530 > >>>>> Subject: Kovacic Algorithm > >>>>> From: ms...@gm... > >>>>> To: ni...@ho... > >>>> > >>>>> > >>>>> Respected Sir > >>>>> > >>>>> I was searching form some implemntation of kovacic algorithm and I > >>>>> fouund your question regarding the same somewhere. Did you find some > >>>>> implementation? If yes could you please send some inks or files > >>>>> regarding this? > >>>>> > >>>>> Thanking you > >>>>> Neeraj > >>>>> 5th year Integrated MS student > >>>>> IISER Mohali > >>> > >> > >> > >> > > > > > > > > > ------------------------------------------------------------------------------ > > Learn Graph Databases - Download FREE O'Reilly Book > > "Graph Databases" is the definitive new guide to graph databases and > their > > applications. Written by three acclaimed leaders in the field, > > this first edition is now available. Download your free book today! > > http://p.sf.net/sfu/13534_NeoTech > > _______________________________________________ > > Maxima-discuss mailing list > > Max...@li... > > https://lists.sourceforge.net/lists/listinfo/maxima-discuss > > > > > > > ------------------------------ > > Message: 5 > Date: Mon, 24 Mar 2014 16:30:30 +0000 (UTC) > From: Robert Dodier <rob...@gm...> > Subject: Re: [Maxima-discuss] Kovacic Algorithm > To: max...@li... > Message-ID: <slrnlj0ndl.289.robert.dodier@freekbox.fglan> > > On 2014-03-23, Nijso Beishuizen <ni...@ho...> wrote: > > > Dear list, please see below. If someone is interested in kovacicODE.mac > > (around 34kb), just let me know. > > If you will distribute it under terms of the GNU GPL or a compatible > license, let's talk about distributing it with Maxima. Establishing > a Github project (maybe as an umbrella for any such stuff you write) > would make it easy to look at the code & discuss changes or what-not. > > best, > > Robert Dodier > > > > > ------------------------------ > > Message: 6 > Date: Mon, 24 Mar 2014 19:44:13 +0100 > From: Helmut Jarausch <jar...@ig...> > Subject: [Maxima-discuss] How NOT to simplify? > To: max...@li... > Message-ID: <139...@nu...> > Content-Type: text/plain; charset=us-ascii; DelSp=Yes; Format=Flowed > > Hi, > > I'd like to write a function which converts expressions of type > a/sqrt(b) > to a*sqrt(b)/b > > For that I need to build the quotient a*sqrt(b)/b > > I've tried ev(a*sqrt(b)/b,simp:false) > > but it still simplifies this to a/sqrt(b). > > What am I missing? > > Many thanks for a hint, > Helmut > > > > ------------------------------ > > Message: 7 > Date: Mon, 24 Mar 2014 23:23:45 +0300 > From: Evgeniy Maevskiy <ema...@e-...> > Subject: Re: [Maxima-discuss] How NOT to simplify? > To: max...@li... > Message-ID: <533...@e-...> > Content-Type: text/plain; charset=windows-1251; format=flowed > > algebraic:true; > a/sqrt(b); > rat(%); > > > 24.03.2014 21:44, Helmut Jarausch ?????: > > Hi, > > > > I'd like to write a function which converts expressions of type > > a/sqrt(b) > > to a*sqrt(b)/b > > > > For that I need to build the quotient a*sqrt(b)/b > > > > I've tried ev(a*sqrt(b)/b,simp:false) > > > > but it still simplifies this to a/sqrt(b). > > > > What am I missing? > > > > Many thanks for a hint, > > Helmut > > > > > ------------------------------------------------------------------------------ > > Learn Graph Databases - Download FREE O'Reilly Book > > "Graph Databases" is the definitive new guide to graph databases and > their > > applications. Written by three acclaimed leaders in the field, > > this first edition is now available. Download your free book today! > > http://p.sf.net/sfu/13534_NeoTech > > _______________________________________________ > > Maxima-discuss mailing list > > Max...@li... > > https://lists.sourceforge.net/lists/listinfo/maxima-discuss > > > > > > > ------------------------------ > > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/13534_NeoTech > > ------------------------------ > > _______________________________________________ > Maxima-discuss mailing list > Max...@li... > https://lists.sourceforge.net/lists/listinfo/maxima-discuss > > > End of Maxima-discuss Digest, Vol 2, Issue 44 > ********************************************* > -- Regards, Pankaj Sejwal _______________________________________________ "The more I read, the more I acquire, the more certain I am that I know nothing." ------- Voltaire<http://www.goodreads.com/author/show/5754446.Voltaire> |