Re: Using FindRoot
- To: mathgroup at smc.vnet.net
- Subject: [mg83466] Re: Using FindRoot
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 21 Nov 2007 02:49:15 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <fhu7qo$7dv$1@smc.vnet.net>
tdude wrote: > I am trying to find the root of the following equation > FindRoot[.15*[Pi]*(R^2)==(2*R^2*ArcCos[45.9/(2*R)])-(.5*45.9*Sqrt[4*R^2-45.9^2]),{R,.1}, MaxIterations->100000] > > When I try this with two other systems, both give me an answer of 30.8773686. > > However, with Mathematica, the answer I get appears to be a complex root, along with this message: > FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits of working precision to meet these tolerances. > {R -> 20.1137- 4.87774*10^-14 \[ImaginaryI]} > > Why would the answer be a complex root when using Mathematica, yet real when using the other two packages? (Note that you have a syntax error in your expression: [Pi] should be either "\[Pi]" or "Pi" -- without the double quotes.) So you have a real function of a real variable, say, f(x) = (2*R^2*ArcCos[45.9/(2*R)]) - (.5*45.9*Sqrt[4*R^2 - 45.9^2]) -.15*Pi*(R^2) which is defined on D = (-inf, -22.95] U [22.95, inf), since 4*R^2 - 45.9^2 is negative for -22.95 < R < 22.95 and so the square root is not defined on this interval when dealing with real numbers only. You are looking for x in D such that f(x) = 0. Now, contrary to the other CAS you tried, Mathematica has no problem working with complex number; indeed, by default, Mathematica assume that this is the complex field which is used. Consequently, if you are interested in real values and roots only, you must give a starting point for Newton's Method which lies on the interval of definition and is located on the same side of the root. Thus 0.1 is not an option in this case. If you are unsure where to start, piloting the function helps to decide. expr = -.15* Pi*(R^2) + (2*R^2*ArcCos[45.9/(2*R)]) - (.5*45.9* Sqrt[4*R^2 - 45.9^2]); Plot[expr, {R, 0, 40}] Now, we see that we can choose, say, 25 as starting point and we get the correct real answer. In[3]:= FindRoot[expr, {R, 25}] expr /. % // Chop Out[3]= {R -> 30.8774} Out[4]= 0 Regards, -- Jean-Marc