MathGroup Archive 2004

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

Search the Archive

Re: FindRoot in Version 5

  • To: mathgroup at smc.vnet.net
  • Subject: [mg46298] Re: FindRoot in Version 5
  • From: bghiggins at ucdavis.edu (Brian Higgins)
  • Date: Fri, 13 Feb 2004 21:57:07 -0500 (EST)
  • References: <c0fh4j$9ls$1@smc.vnet.net> <c0hvrv$oq2$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Bobby, Your version of the code does not converge on my mac OSX  using
version 5.0 for Mac OS X (June 11, 2003). What I have found is that
removing the equality sign from the first argument of FindRoot  is
required (after  one has forced the function passed to FindRoot to be
numerical.) Thus the following works on my system

system[a_] := {Derivative[1][y1][x] == 
     y2[x], Derivative[1][y2][x] == -Sin[y2[ x]] + Cos[5*x], y1[-1] ==
0,
    y2[-1] == a}; 
myODEsoln[a_] := NDSolve[system[a],  {y1[x], y2[x]}, {x, -1, 1}]
yend[(a_)?NumericQ] := First[y1[x] /. myODEsoln[a] /. x -> 1]
bc = FindRoot[yend[a], {a, -2, 2}]; 
Plot[Evaluate[y1[x] /. myODEsoln[a /. bc]], {x, -1, 1}, 
   AxesLabel -> {"x", "y1(x)"}]; 

I have tested this remedy out on other code that I have  and it fixes
the problem (both on windows and Mac system with Version 5)

 The original code I posted got warped during transcription from the
notebook; the "?" should have been  an omega. And yes it would not
have worked on any of my versions of Mathematica. I posted a
correction. Sorry for the confusion
Thanks much

Brian

drbob at bigfoot.com (Bobby R. Treat) wrote in message news:<c0hvrv$oq2$1 at smc.vnet.net>...
> This works in version 5:
> 
> system[a_] := {Derivative[1][y1][x] == 
>      y2[x], Derivative[1][y2][x] == 
>      -Sin[y2[x]] + Cos[5*x], y1[-1] == 0, 
>     y2[-1] == a}; 
> myODEsoln[a_] := NDSolve[system[a], 
>    {y1[x], y2[x]}, {x, -1, 1}]
> yend[(a_)?NumericQ] := 
>   y1[x] /. myODEsoln[a] /. x -> 1
> bc = FindRoot[First[yend[a]] == 0, 
>     {a, -2, 2}]; 
> Plot[Evaluate[y1[x] /. myODEsoln[
>       a /. bc]], {x, -1, 1}, 
>    AxesLabel -> {"x", "y1(x)"}]; 
> 
> It's hard to imagine how your code could have worked in ANY version,
> but if you say so....
> 
> Bobby
> 
> bghiggins at ucdavis.edu (Brian Higgins) wrote in message news:<c0fh4j$9ls$1 at smc.vnet.net>...
> > Hi,
> > 
> > In version 4 I used the following code to solve nonlinear BVP using
> > NDSolve
> > 
> > system[?_] := {y1'[x] == y2[
> >     x], y2'[x] == -Sin[y2[x]] + Cos[5x], y1[-1] == 0, y2[-1] == ?};
> > myODEsoln[?_] := NDSolve[system[?], {y1[x], y2[x]}, {x, -1, 1}]
> > yend[?_] := (y1[x] /. myODEsoln[?]) /. x -> 1
> > bc = FindRoot[First[yend[?]] == 0, {?, -2, 2}];
> > Plot[Evaluate[y1[x] /. myODEsoln[? /. bc]], {
> >       x, -1, 1}, AxesLabel -> {"x", "y1(x)"}];
> > 
> > In Version 5 is does not work. I have read on this group that FindRoot
> > was modified so that it now requires that in the above code I replace
> > yend[Q_] with yend[Q_?NumericQ]. But now the problem is that FindRoot
> > fails to converge.
> > 
> > So my question: Does anyone know what other modifications have been
> > made to FindRoot so that I can get this code and many others like it
> > to work again?
> > 
> > Thanks much
> > 
> > Brian


  • Prev by Date: Re: Estimating parameters p and q in y'' + p y' + q y = Tide(t)
  • Next by Date: Re: dvips complaint regarding Mathematica 5.0 eps graphics
  • Previous by thread: Re: FindRoot in Version 5
  • Next by thread: Re: FindRoot in Version 5