MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Differentiating Functions and Root objects [ was Re: ArcCos[]]

  • To: mathgroup at smc.vnet.net
  • Subject: [mg24845] Re: [mg24833] Differentiating Functions and Root objects [ was Re: ArcCos[]]
  • From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
  • Date: Wed, 16 Aug 2000 03:24:09 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Allan:

1. I am afraid that you allowed yourself to be tricked by FindRoot :)

The root you found {t -> -818.986} is a pure illusion. The only roots are
the ones given in my earlier message on the same topic: -1.01505 and
1.01505. You can see this simply by plotting the function:

In[44]:=
Plot[Evaluate[D[Root[-t + 2*#1 + 2*t^2*#1 + #1^3 &, 1],t]],{t,-10,10}]

But actually Mathematica can prove it algebraicalluy and very fast too using
Experimental`CylindricalAlgebraicDecomposition.

In[5]:=
f[t_]:=D[Root[-t + 2*#1 + 2*t^2*#1 + #1^3 &, 1],t]
In[6]:=
Experimental`CylindricalAlgebraicDecomposition[f[t]==0,t]
Out[6]=
                    2        4
t == Root[-1 - 32 #1  + 32 #1  & , 1] ||
 
                      2        4
  t == Root[-1 - 32 #1  + 32 #1  & , 2]
In[7]:=
N[%]
Out[7]=
t == -1.01505 || t == 1.01505


2.  In general, a Root object depending on parameters has a complicated
branching structure with respect to these parameters and at certain points
will not be continuous, and hence certainly not differentiable (as a complex
function). Other than that (and barring bugs) differentiation of root
objects wiht respect to parameters is valid. However note one pitfall.  The
case considered here is rather special: we are looking at a cubic f[t_]:=
Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & with real coefficients, and
Root[f[t],1]--its real root. The function can be viewed either as a real
function or a complex function. In the first case case, the derivative
D[f[t],t] exists at 0 and  we get:

In[8]:=
D[f[t],t]/.t->0
Out[8]=
1
-
2


However both 

In[9]:=
Limit[(f[t]-f[0])/t,t->0]

and 

In[10]:=
f[t]+O[t]^2

fail, since the complex derivative of f at 0 does not exist.
-- 
Andrzej Kozlowski
Toyama International University, JAPAN

For Mathematica related links and resources try:
<http://www.sstreams.com/Mathematica/>



on 8/15/00 9:04 AM, Allan Hayes at hay at haystack.demon.co.uk wrote:

> John's posting stirred me into taking another look a this problem.
> Here are four observations
> 
> 1. We can differentiating a pure function with respect to a parameter
> 
> D[Function[x, Sin[y] x^2], y]
> 
> Function[x, x^2*Cos[y]]
> 
> 
> D[Sin[y] #^2 &, y]
> 
> Cos[y]*#1^2 &
> 
> 2. The original problem, differentiating Root objects
> 
> a = Root[-t + 2*#1 + 2*t^2*#1 + #1^3 &, 1]
> 
> Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1]
> 
> (b = D[a, t]) // InputForm
> 
> (1 - 4*t*Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1])/
> (2 + 2*t^2 + 3*Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1]^
> 2)
> 
> Make this output explicit
> 
> (rb = ToRadicals[b]) // InputForm
> 
> (1 - 4*t*(-(2^(1/3)*(6 + 6*t^2))/
> (3*(27*t + Sqrt[729*t^2 + 4*(6 + 6*t^2)^3])^
> (1/3)) + (27*t + Sqrt[729*t^2 + 4*(6 + 6*t^2)^3])^
> (1/3)/(3*2^(1/3))))/(2 + 2*t^2 +
> 3*(-(2^(1/3)*(6 + 6*t^2))/
> (3*(27*t + Sqrt[729*t^2 + 4*(6 + 6*t^2)^3])^
> (1/3)) +
> (27*t + Sqrt[729*t^2 + 4*(6 + 6*t^2)^3])^(1/3)/
> (3*2^(1/3)))^2)
> 
> Maybe  Solve and NSolve will work on rb == 0,   -- I gave up after a a brief
> wait -- but we can quickly get
> 
> FindRoot[rb == 0, {t, 0}]
> 
> {t -> -818.986}
> 
> Is b correct for the rate of change of a respect to t?
> We can check
> 
> rb - D[ToRadicals[a], t] // Simplify
> 
> 0
> 
> We might expect with sol  the corresponding polynomial would have a multiple
> root.
> 
> Check:
> 
> (poly = -t + 2*#1 + 2*t^2*#1 + #1^3 &[x] /. sol[[1]]) // InputForm
> 
> 818.985893312185 + 1.3414777868887153*^6*x + x^3
> 
> 
> Solve[% == 0, x] // InputForm
> 
> {{x -> -0.0006105102159100438},
> {x -> 0.0003052551079550219 - 1158.2218211072502*I},
> {x -> 0.0003052551079550219 + 1158.2218211072502*I}}
> 
> 
> 3. Can we still get the solution without using ToRadicals?
> 
> sol2 = FindRoot[b == 0, {t, 0}]
> 
> FindRoot::"jsing": "Encountered a singular Jacobian at the point \!\(t\)
> = \!\
> \(0.`\). Try perturbing the initial point(s)."
> 
> FindRoot::"jsing": "Encountered a singular Jacobian at the point \!\(t\)
> = \!\
> \(0.`\). Try perturbing the initial point(s)."
> 
> FindRoot[b == 0, {t, 0}]
> 
> However
> 
> sol2 = FindRoot[b == 0, {t, 0.1}]
> 
> {t -> -1.0150511440294088}
> 
> A different solution.
> 
> And we get
> 
> Solve[(-t + 2*#1 + 2*t^2*#1 + #1^3 &[x] /. sol2[[1]]) == 0, x]
> 
> {{x -> -0.2462928577523092},
> {x -> 0.1231464288761546 - 2.0263644239932934*I},
> {x -> 0.1231464288761546 + 2.0263644239932934*I}}
> 
> 4. Is Differentiation of Root objects always valid? Is this method a general
> one for finding which parameter values give multiple roots?
> 
> Allan
> ---------------------
> Allan Hayes
> Mathematica Training and Consulting
> Leicester UK
> www.haystack.demon.co.uk
> hay at haystack.demon.co.uk
> Voice: +44 (0)116 271 4198
> Fax: +44 (0)870 164 0565
> 
> "John D. Hendrickson" <jdh at hend.net> wrote in message
> news:8n7q9r$1j7 at smc.vnet.net...
>> I've got Mathematica 4.0.2.0.  Since I'm running Win95 I don't mind
>> crashing - thats pretty much a constant, so I tried your dare:)  But mine
>> didn't crash - it gave me output.  Also - I have a substitute that might
> be
>> what you want.
>> 
>> In[1]:=
>> a = Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1];
>> 
>> In[2]:=
>> b = D[a, t];
>> 
>> In[4]:=
>> InputForm[ Solve[b == 0, t] ]
>> 
>> Solve::"tdep": "The equations appear to involve the variables to be solved
> \
>> for in an essentially non-algebraic way."
>> 
>> Out[4]//InputForm=
>> Solve[(1 - 4*t*Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1])/
>> (2 + 2*t^2 + 3*Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1]^
>> 2) == 0, t]
>> 
>> ===================================================================
>> Would the following be acceptible in your circumstance?
>> I assumed by making the unexplicit root object explicit:
>> ====================================================================
>> 
>> In[3]:=
>> Exit[]
>> 
>> In[1]:=
>> a = Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1];
>> 
>> In[2]:=
>> ax = First[a][x]
>> 
>> Out[2]=
>> \!\(\(-t\) + 2\ x + 2\ t\^2\ x + x\^3\)
>> 
>> In[3]:=
>> b = D[ax, t];
>> 
>> In[4]:=
>> InputForm[ Solve[b == 0, t] ]
>> 
>> Out[4]//InputForm=
>> {{t -> 1/(4*x)}}
>> 
>> ===================================================================
>> 
>> Allan Hayes wrote in message <8mtc0m$7qb at smc.vnet.net>...
>>> 
>>> 
>>> 
>>> "Gianluca Gorni" <gorni at dimi.uniud.it> wrote in message
>>> news:8mqvd7$18j at smc.vnet.net...
>>> 
>>> 
>>> -----------  Snip -------------
>>>> An unrelated problem: the following instructions consistently crash
>>>> my Mac Mathematica 4 kernel:
>>>> 
>>>> a = Root[-t + 2*#1 + 2*t^2*#1 + #1^3 & , 1];
>>>> b = D[a, t];
>>>> Solve[b == 0, t]
>>>> 
>>> --
>>> Gianluca ,
>>> It crashes Mathematica 4.02  on Windows also.
>>> 
>>> Allan
>>> ---------------------
>>> Allan Hayes
>>> Mathematica Training and Consulting
>>> Leicester UK
>>> www.haystack.demon.co.uk
>>> hay at haystack.demon.co.uk
>>> Voice: +44 (0)116 271 4198
>>> Fax: +44 (0)870 164 0565
>>> 
>>> 
>>> 
>>> 
>> 
>> 
>> 
> 
> 
> 
> 
> 
> 
> 
> 



  • Prev by Date: Re: Differentiating Functions and Root objects [ was Re: ArcCos[]]
  • Next by Date: Rule
  • Previous by thread: Re: Differentiating Functions and Root objects [ was Re: ArcCos[]]
  • Next by thread: Re: Differentiating Functions and Root objects [ was Re: ArcCos[]]