Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

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

Search the Archive

Re: FindRoot with parameterized interpolated function from NDSolve

  • To: mathgroup at smc.vnet.net
  • Subject: [mg110754] Re: FindRoot with parameterized interpolated function from NDSolve
  • From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
  • Date: Mon, 5 Jul 2010 06:00:56 -0400 (EDT)

Hi,

try to localize everything:

solnn[a_?NumericQ, xx_?NumericQ] := 
 Module[{x, y, t}, 
  Subtract @@ 
   Through[({x, y} /. 
       First@NDSolve[{x'[t] == a*y[t], y'[t] == -x[t], x[0] == 1, 
          y[0] == 0}, {x, y}, {t, 0, Pi}])[xx]]
  ]

FindRoot[solnn[1, t], {t, 2}]
FindRoot[{solnn[a, t] == 0, a - 1 == 0}, {{a, 0}, {t, 2}}]

and the world is beautiful again.

Cheers
Patrick

PS: Read the error-messages carefully and you understand the bad things
that happen with your t when it's not localized.

PPS: People who use a at b.c as mail-address won't get an answer next time.

On Sun, 2010-07-04 at 06:09 -0400, Ulvi Yurtsever wrote:
> I have an interpolated function obtained
> as the solution to a system of ODEs via NDSOlve.
> The system and the solution depend on a number
> of parameters. I then want to plug this function into
> FindRoot to find the numerical solution of a system
> of equations which depend on both the dependent variable
> of the ODEs and the parameters. Mathematica barfs at
> the use of parameters as in the following example:
> 
> First, what works as expected:
> 
> 
> In[135]:= solnn =.
> 
> In[142]:= 
> solnn[a_] := 
>  NDSolve[{x'[t] == a *y[t], y'[t] == -x[t], x[0] == 1, y[0] == 0}, {x,
>     y}, {t, 0, Pi}]
> 
> In[144]:= FindRoot[(x /. solnn[1][[1]])[t] - (y /. solnn[1][[1]])[
>     t] == 0, {t, 2}]
> 
> Out[144]= {t -> 2.35619}
> 
> 
> however:
> 
> 
> FindRoot[{(x /. solnn[a][[1]])[t] - (y /. solnn[a][[1]])[t] == 0, 
>   a - 1 == 0}, {{a, 0}, {t, 2}}]
> 
> 
> produces, instead of the expected
> 
> {a->1., t->2.355619},
> 
> lots of error messages to the effect that NDSolve has encountered non-
> numerical initial values etc
> 
> Is there any  other way to use FindRoot for the purpose I am trying to 
> use it?
> 



  • Prev by Date: Re: Display/manipulating numeric values inside a DynamicModule[]
  • Next by Date: Re: FindRoot with parameterized interpolated function from NDSolve
  • Previous by thread: Re: FindRoot with parameterized interpolated function from NDSolve
  • Next by thread: Re: FindRoot with parameterized interpolated function from NDSolve