Re: Using FindRoot on an equation involving Log terms
- To: mathgroup at smc.vnet.net
- Subject: [mg115743] Re: Using FindRoot on an equation involving Log terms
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Wed, 19 Jan 2011 05:30:53 -0500 (EST)
expr = 110.52499999999998 + (300. - 135.52499999999998/(1 - x)) (1 - x) - 300. x - 135.52499999999998 Log[1 - x] + 135.52499999999998 Log[x]; Use the form of FindRoot that avoids use of derivatives FindRoot[expr, {x, 0.5, 0.9}] {x -> 0.849823} Alternatively, expr2 = Rationalize[expr] // FullSimplify 275 - 600*x - (5421/20)*ArcTanh[1 - 2*x] Reduce[expr2 == 0, x, Reals] // N // ToRules {x -> 0.849823} Bob Hanlon ---- Andrew DeYoung <adeyoung at andrew.cmu.edu> wrote: ============= Hi, I am trying to find the root of a certain expression in Mathematica version 7: expr = 110.52499999999998 + (300. - 135.52499999999998/(1 - x)) (1 - x) - 300. x - 135.52499999999998 Log[1 - x] + 135.52499999999998 Log[x] It appears to plot fine, for example using Plot[expr, {x, 0, 1}]. The plot shows that there should be a root at about x=0.85. However, when I try to find this root, using for example the following: FindRoot[expr, {x, 0.5}] I get an error 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." and it prints a seemingly incorrect (according to the qualitative form of the plot) result: {x -> 0.344678}. Only if I use for example FindRoot[expr, {x, 0.7}] do I get the seemingly "correct" root: {x -> 0.849823}. Can you help me see why the FindRoot is getting stuck at {x -> 0.344678} when I use starting values far away from 0.7 or 0.8? I will ultimately want to find the roots of many similar functions, which may have more than one "actual" root, so it would be helpful if I could see why FindRoot[expr, {x, 0.5}] does not give {x -> 0.849823}. (also when I tried NSolve[expr==0,x], Mathematica will not solve it.) Thank you, Andrew DeYoung Carnegie Mellon University