Re: Simplifying a "fixed-point" inner loop
- To: mathgroup at smc.vnet.net
- Subject: [mg43165] Re: [mg43128] Simplifying a "fixed-point" inner loop
- From: Dr Bob <drbob at bigfoot.com>
- Date: Fri, 15 Aug 2003 04:27:10 -0400 (EDT)
- References: <200308131149.HAA28316@smc.vnet.net>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
I don't think this will speed things up, but the inner loop might be replaced by something like this: r = 1; deriv[[i, k]] = Catch@FixedPoint[ If[r++ > rmax, Throw@Print@"Recursion OVF, j loop", Simplify@Normal@Series[# /. rep, {h, 0, order - i}]] &, derold] Bobby On Wed, 13 Aug 2003 07:49:58 -0400 (EDT), Carlos Felippa <carlos at colorado.edu> wrote: > I am writing a module to get modified differential equations (MDEs). > It gets exponentially slow as the truncation order grows. Most > of the work is spent in the r (recursion) inner loop shown below: > > <code removed> > For [k=1, k<=n, k++, For [i=order-1, i>=1, i--, > For [j=i+1, j<=order, j++, ykj=D[y[[k]],{t,j}]; > rep={ykj->deriv[[j,k]]}; derold=Simplify[deriv[[i,k]]]; > For [r=1, r<=rmax, r++, > dernew=derold/.rep; > dernew=Simplify[Normal[Series[dernew,{h,0,order-i}]]]; > If [dernew==derold, deriv[[i,k]]=dernew; Break[]]; > If [r==rmax, Print["Recursion OVF, j loop"];Return[Null]]; > derold=dernew; > ]; > ]; > <code removed> > > Here deriv is a Table of symbolic function expressions and their > derivatives. On exit it will contain the MDE. rmax is the > recursion count limit to get a fixed-point match. > > Question: can the r-loop be replaced by a single Map or FixedPoint > command, with some form of error check? Thanks. > > -- majort at cox-internet.com Bobby R. Treat
- References:
- Simplifying a "fixed-point" inner loop
- From: carlos@colorado.edu (Carlos Felippa)
- Simplifying a "fixed-point" inner loop