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: [mg110756] Re: FindRoot with parameterized interpolated function from NDSolve
  • From: danl at wolfram.com
  • Date: Mon, 5 Jul 2010 06:01:18 -0400 (EDT)

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

It is best done by restricting some functions to numeric arguments. That
way FindRoot will not try to evaluate symbolic things for which it does
not have numeric parameter values.

solnn[a_?NumericQ] := {x, y} /.
  First[NDSolve[{x'[t] == a*y[t], y'[t] == -x[t], x[0] == 1,
     y[0] == 0}, {x, y}, {t, 0, Pi}]]

eqn[a_?NumericQ, t_?NumericQ] :=
 With[{sol = solnn[a]}, sol[[1]][t] - sol[[2]][t]]

In[85]:= FindRoot[{eqn[a, tt] == 0, a - 1 == 0}, {{a, 0}, {tt, 2}}]

Out[85]= {a -> 1., tt -> 2.35619}

Daniel Lichtblau
Wolfram Research





  • Prev by Date: Re: Is it possible to query current plot range values (or have
  • Next by Date: Re: FindRoot with parameterized interpolated function
  • Previous by thread: FindRoot with parameterized interpolated function from NDSolve
  • Next by thread: Re: FindRoot with parameterized interpolated function from NDSolve