Re: FinFit question
- To: mathgroup at smc.vnet.net
- Subject: [mg54853] Re: FinFit question
- From: Kevin <kmccann at umbc.edu>
- Date: Fri, 4 Mar 2005 05:07:48 -0500 (EST)
- Organization: University of Maryland, Baltimore County
- References: <d060ku$koc$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
I suspect the cause of your problem is that the parameter search in NonlinearFit has been changed in 5.0, and now allows Ro to be sampled in the negative range, which results in a complex result. Here is what I did: f[B_, Ro_, x_] := B/Log[x/Ro] lsFit[B_, Ro_] := Plus @@ Apply[ (Re[f[B, Ro, #1] - #2])^2 & , points, 1] sol = FindMinimum[lsFit[B, Ro], {B, 1000}, {Ro, .01}][[2]] I get: B = 4021.058892362411 Ro = 0.009479542538875833 with residual: 0.000958775 My first try did not have the Re[] in the lsFit definition; however, I found that I ran into the same complex problem that you had in the search. So, I modified the function to accomodate, and then checked to ensure that the final result was a real function over the range of points. This flexibility is why I always roll my own LSQ fit. Cheers, Kevin Zsolt Reg=E1ly wrote: > Hi > > I have used Mathematica 4.2 to solve this problem > > points = {{23400, 273.2}, {6800, 298.2}, {2400, 323.2}}; > T[R_] = NonlinearFit[points, B/Log[R/Ro], {R}, {B, Ro}]; > > wihich gives the result as > > 4021.05/Log[105.49 R] > > > That is a good result, but when I try to do the same in Mathematica 5.0 > I get error messaeges and an other solutions, which is surely bad > > 1556.90/Log[-0.014 R] > > Why doesn't work FindFit for this function in Mathematica 5.0 > > Regards, > Zsolt Regaly (zs.regaly at astro.elte.hu) >