NDSolve with a function which calls N

*To*: mathgroup at smc.vnet.net*Subject*: [mg25459] NDSolve with a function which calls N*From*: Carl Woll <carlw at u.washington.edu>*Date*: Sun, 1 Oct 2000 02:44:43 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

I'm trying to use NDSolve with a rather complicated function, and with a working precision greater than 16. Call the working precision I use ndprec. In computing the complicated function, I need to temporarily set the precision of some my arguments to a much higher value than the working precision in NDSolve. When I try to use the function N within my function with this higher precision, for example N[x,ndprec+10], Mathematica complains that the precision I requested (ndprec+10) is greater than $MaxPrecision, where Mathematica's internal routines have set $MaxPrecision to ndprec. To solve this problem, I tried to reset $MaxPrecision to a higher value, but Mathematica complains that $MaxPrecision has been locked by internal routines. Below I present a simplified example to demonstrate the problem. Any suggestions on how I can use N within the function a would be much appreciated. Carl In[36]:= Clear[a] a[x_?NumericQ]:=Module[{}, N[\[Pi],30]; 1] In[38]:= NDSolve[ {f'[x]+a[x]f[x]==1,f[0]==1/2}, f, {x,0,1}, WorkingPrecision->24] N::preclg: Requested precision 30 is larger than $MaxPrecision. Using current $MaxPrecision of 24 . instead. $MaxPrecision = Infinity specifies that any precision should be allowed. N::preclg: Requested precision 30 is larger than $MaxPrecision. Using current $MaxPrecision of 24 . instead. $MaxPrecision = Infinity specifies that any precision should be allowed. N::preclg: Requested precision 30 is larger than $MaxPrecision. Using current $MaxPrecision of 24 . instead. $MaxPrecision = Infinity specifies that any precision should be allowed. General::stop: Further output of N::preclg will be suppressed during this calculation. Out[38]= {{f -> InterpolatingFunction[{{0, 1.00000000000000000000000}}, <>]}}