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? >