Simplifying a "fixed-point" inner loop
- To: mathgroup at smc.vnet.net
- Subject: [mg43128] Simplifying a "fixed-point" inner loop
- From: carlos at colorado.edu (Carlos Felippa)
- Date: Wed, 13 Aug 2003 07:49:58 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
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.
- Follow-Ups:
- Re: Simplifying a "fixed-point" inner loop
- From: Dr Bob <drbob@bigfoot.com>
- Re: Simplifying a "fixed-point" inner loop