Re: A zillion times slower in version 5

*To*: mathgroup at smc.vnet.net*Subject*: [mg46326] Re: A zillion times slower in version 5*From*: drbob at bigfoot.com (Bobby R. Treat)*Date*: Sat, 14 Feb 2004 04:38:03 -0500 (EST)*References*: <c0k3sd$8kn$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

I'm not altogether sure what's going on, but I gather that most of the variables don't matter -- their partials are miniscule -- but Mathematica doesn't know this and spends a lot of time making sure it doesn't lose precision. bug[x_, {a_, b_, c_, d_}] = c + (1 - c - d)(1 - Exp[-(10^((x - a)/20))^b]); grad[expr_] := D[expr, #] & /@ {x, a, b, c, d} bugGrad[x_, {a_, b_, c_, d_}] = grad@bug[x, {a, b, c, d}]; In its pure form, the gradient at your input point crashed Mathematica on both my machines (WinXP and Mac OSX, running 5.0.1). I did a little experimenting to simplify the form of the gradient: bugGrad[x, {a, b, c, d}] /. {E^(-(10^((1/20)*(-a + x)))^b) -> f, 10^((1/20)*(-a + x)) -> g, 5^(-1 + (1/20)*(-a + x)) -> h, 2^(-2 + (1/20)*(-a + x)) -> i} {b*(1 - c - d)*f*g^(-1 + b)*h*i*Log[10], (-b)*(1 - c - d)*f*g^(-1 + b)*h*i*Log[10], (1 - c - d)*f*g^b*Log[g], f, -1 + f} Then I defined a gradient function that avoids duplicated effort (but may lose precision, I admit): buggy[x_, {a_, b_, c_, d_}] = Module[{f = E^(-(10^((1/20)*(-a + x)))^b), g = 10^((1/20)*(-a + x)), h = 5^(-1 + (1/20)*(-a + x)), i = 2^(-2 + (1/20)*(-a + x))}, N[{b*(1 - c - d)*f*g^(-1 + b)*h*i*Log[10], (-b)*(1 - c - d)*f*g^(-1 + b)*h*i*Log[10], (1 - c - d)*f*g^b*Log[g], f, -1 + f}]] (Omitting N gives another expression that crashes at your input.) Here's the resulting gradient at your input: buggy[-8, {-60, 3.5, 0.5, 0.01}] { 8.422939279977523406680017`\ 6.854589769156088*^-546744352\ , -8.422939279977523406680017`\ 6.854589769156088*^-546744352\ , 1.2514081215966605`6.854589\ 769501057*^-546744350, 3.3885496428112179`6.854589\ 770191002*^-546744360, -1.} It appears from this that bug is (virtually) a function of d alone... particularly when d is not exact. Bobby "Joshua A. Solomon" <J.A.Solomon at city.ac.uk> wrote in message news:<c0k3sd$8kn$1 at smc.vnet.net>... > In[1]:= bug[x_,{a_,b_,c_,d_}]:=c+(1-c-d)(1-Exp[-(10^((x-a)/20))^b]) > > Using Mathematica 4... > > In[2]:= {$Version, $ReleaseNumber} > Out[2]:= {4.1 for Mac OS X (November 5, 2001),5} > > In[3]:= Timing[bug[-8,{-60,3.5,0.5,0.01}]] > Out[3]:= {0. Second,0.99} > > Using Mathematica 5... > > In[2]:= {$Version, $ReleaseNumber} > Out[2]:= {5.0 for Mac OS X (June 10, 2003),0} > > In[3]:= Timing[bug[-8,{-60,3.5,0.5,0.01}]] > Out[3]:= {6.21 Second,0.99} > > Six seconds! What is it doing? What is the best way to streamline this? > > js