Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

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

Search the Archive

Re: FindRoot inside a loop

  • To: mathgroup at smc.vnet.net
  • Subject: [mg23329] Re: [mg23278] FindRoot inside a loop
  • From: Carl Woll <carlw at u.washington.edu>
  • Date: Tue, 2 May 2000 00:43:11 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Carlos,

Rather than using FindRoot for each different value of x, it may be
simpler to
convert your parametric equation into an ODE and solve the ODE. For
example, if
you have the equation

f[x,y]==0

and you want to solve this equation for different values of x, I would
solve
the ODE

D[f[x,y[x],x]==0

with some suitable starting point. To be more concrete, suppose

In[53]:=
f[x_, y_] := y E^-x - x

Then obviously x=0, y=0 is a solution. To find solutions for other
values of x,
we use NDSolve:

In[54]:=
Clear[y]
NDSolve[{D[f[x, y[x]], x] == 0, y[0] == 0}, y, {x, 0, 1}] /. Rule -> Set

Out[55]=
{{InterpolatingFunction[{{0., 1.}}, <>]}}

We're done. Now, y is the function you want. For example,

In[56]:=
y[0.5]
f[0.5, y[0.5]]

Out[56]=
0.824363

Out[57]=
          -6
1.57464 10

Since I chose a particularly simple function, it turns out the exact
solution is

y[x]=x E^x

So, comparing, we have

In[58]:=
0.5 E^0.5

Out[58]=
0.824361

If you want to improve the accuracy of this solution, just increase the
AccuracyGoal and PrecisionGoal in the NDSolve function.

You can plot

Plot[f[x,y[x]],{x,0,1}]

and see that f is close to zero (within ~10^-6 over the whole range).

Carl Woll

"Calle-1, Carlos" wrote:

> I am trying to solve a parametric equation for different values of x.
I
> would like to plot the solutions as a function of x. I set up a loop
(old
> habits from my grad school days programming in FORTRAN). Since
FindRoot has
> the HoldAll attribute, I am using Evaluate. The Print{%] statement
inside
> the loop outputs -graphics-, which were produced right before the loop

> starts. The last % correctly outputs the last value computed.
>
> Clearly, I don't know enough about how Mathematica stores values and
> therefore can't extract them. Do I define a function to store the
values?
> But what are the values called when FindRoot solves the equation at
each
> iteration?
>
>  <<...>>
>
> Thanks,
>
> Carlos Calle



  • Prev by Date: Re: Fit with constraints?
  • Next by Date: Re: plot discrete spectrum
  • Previous by thread: Re: avoid spurious vertical segment in step function plot
  • Next by thread: Re: Follow-up on Do[] Question