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