Re: FindRoot
- To: mathgroup at smc.vnet.net
- Subject: [mg8902] Re: FindRoot
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Thu, 2 Oct 1997 22:56:54 -0400
- Organization: University of Western Australia
- Sender: owner-wri-mathgroup at wolfram.com
David Djajaputra wrote:
> I need to plot the root of a transcendental equation
>
> sin(x)=x/a, for a from 2 to 3.
>
> I can find the root for each a using FindRoot. But how do I make a
> continuous plot using FindRoot?
Using ListPlot with PlotJoined->True is one way to do what you want,
i.e.,
In[1]:=
ListPlot[Table[{a,x/.FindRoot[Sin[x]==x/a,{x,2}]},{a,2,3,0.05}],
PlotJoined->True];
For another approach, see the Mathematica Journal 3(3):28. I have
attached a Mathematica 3.0 Notebook below relevant for your example.
Cheers,
Paul
____________________________________________________________________
Paul Abbott Phone: +61-8-9380-2734
Department of Physics Fax: +61-8-9380-1014
The University of Western Australia
Nedlands WA 6907 mailto:paul at physics.uwa.edu.au
AUSTRALIA http://www.pd.uwa.edu.au/~paul
God IS a weakly left-handed dice player
____________________________________________________________________
Notebook[{
Cell[CellGroupData[{
Cell["Root Finding with a Parameter", "Section",
CellTags->"root finding"],
Cell[TextData[{
"Suppose that we wish to find the roots of the transcendental equation
",
Cell[BoxData[
\(TraditionalForm\`Sin[x] = \ x/a\)]],
" where ",
Cell[BoxData[
\(TraditionalForm\`a\)]],
" is a parameter. For a fixed value of ",
Cell[BoxData[
\(TraditionalForm\`a\)]],
", this can be easily accomplished using the ",
Cell[BoxData[
FormBox[
StyleBox["FindRoot",
"Input"], TraditionalForm]]],
" command. For example, if ",
Cell[BoxData[
\(TraditionalForm\`a = 2\)]],
" then to find the root near ",
Cell[BoxData[
\(TraditionalForm\`x = 2\)]],
" we use"
}], "Text",
CellTags->{"FindRoot", "transcendental equation"}],
Cell[CellGroupData[{
Cell[BoxData[
\(TraditionalForm\`start = {2, x /. FindRoot(sin(x) == x\/2, {x,
2})}\)],
"Input"],
Cell[BoxData[
\(TraditionalForm\`{2, 1.89549426720871316`}\)], "Output"]
}, Open ]],
Cell[TextData[{
"An efficient technique for finding the values of a root as a function
of \
the parameter is to use the functional iteration operation ",
Cell[BoxData[
FormBox[
StyleBox["NestList",
"Input"], TraditionalForm]]],
". First, define a function whose first argument is the parameter:"
}], "Text",
CellTags->{"functional iteration", "NestList"}],
Cell[BoxData[
\(TraditionalForm\`f(a_, x_) := sin(x) - x\/a\)], "Input"],
Cell[TextData[{
"Then step along the ",
Cell[BoxData[
\(TraditionalForm\`a\)]],
"-axis by ",
Cell[BoxData[
\(TraditionalForm\`h\)]],
" and find the root of the transcendental equation using the previous
root \
as an initial guess:"
}], "Text",
CellTags->"iterative guessing"],
Cell[BoxData[
\(TraditionalForm
\`FRStep(f_, {a_, x_}, h_: 0.05) :=
Module({b}, {a + h, b /. FindRoot(f(a + h, b) == 0, {b, x})})\)],
"Input"],
Cell[CellGroupData[{
Cell[BoxData[
\(TraditionalForm\`FRStep(f, start)\)], "Input"],
Cell[BoxData[
\(TraditionalForm\`{2.04999999999999982`, 1.92367954032495482`}\)],
"Output"]
}, Open ]],
Cell[TextData[{
"That is, at ",
Cell[BoxData[
\(TraditionalForm\`a = 2.05\)]],
", ",
StyleBox["x",
FontSlant->"Italic"],
" is approximately 1.92368. ",
Cell[BoxData[
FormBox[
StyleBox["NestList",
"Input"], TraditionalForm]]],
" can then be used to create a list of the roots in the form ",
Cell[BoxData[
\(TraditionalForm\`{a, x}\)]],
":"
}], "Text"],
Cell[BoxData[
\(TraditionalForm\`\(NestList(FRStep(f, #)&, start, 20); \)\)],
"Input"],
Cell[BoxData[
\(TraditionalForm\`\(ListPlot(%, PlotJoined \[Rule] True); \)\)],
"Input"]
}, Open ]]
}
]