JCW
Posts:
9
Registered:
3/20/11


NonlinearModelFit Problem
Posted:
Jan 16, 2013 1:38 AM


I hope I'm doing something obviously stupid, but I can't figure it out. I'm trying to fit a list of points [x, z, y] (in a cartesian coordinate system) that very closely approximate a shallow sphereical cap. The cap was generated by cutting an approximate sphere with a plane approximately parallel to the xz plane so that the cap is apprximately symmetrical around the yaxis. Thus the cap can be expressed conveniently as y[x,z], but only less accurately as y[r], where r = Sqrt[x^2 + z^2], because the original sphere's center was not exactly on the yaxis. I have very good guesses for the center location and the radius of curvature; I want more accurate values for these parameters from the fit.
The following expression incorporating all of the degrees of freedom will not converge but wanders off toward very large values of all parameters:
nlm = NonlinearModelFit[distortedNodeLocations, Sqrt[fitRadiusOfCurvature^2  (x  fitxOffset)^2  (z  fitzOffset)^2] + fityOffset + radiusOfCurvature + originalOffset, {{fitRadiusOfCurvature, radiusOfCurvature}, {fitxOffset, 0.}, {fityOffset, 0.}, {fitzOffset, 0.}}, {x, z}, AccuracyGoal > 8, PrecisionGoal > 12, MaxIterations > 1000]
(originalOffset is just a constant that forces the spherical cap to cut the yaxis where I wnat.) In trying to diagnose the problem, I eventually converted the data l1st to the form, [r, y] (r as defined above) and successfully fitted it with a simple twoparameter model (neglecting fitxOffset and fitzOffset):
nlm = NonlinearModelFit[radialFitData, Sqrt[fitRadiusOfCurvature^2  r^2] + fityOffset + radiusOfCurvature + originalOffset, {{fitRadiusOfCurvature, radiusOfCurvature}, {fityOffset, 0.}}, r, AccuracyGoal > 15]
The above model converges very well, yields reasonable values for fitRadiusOfCurvature and fityOffset, and gives a very low RMS residual. BUT when I try to fit what should be an essentially identical model to the original data list, the convergence fails as describe above for the full model:
nlm = NonlinearModelFit[distortedNodeLocations, Sqrt[fitRadiusOfCurvature^2  x^2  z^2] + fityOffset + radiusOfCurvature + originalOffset, {{fitRadiusOfCurvature, radiusOfCurvature}, {fityOffset, 0.}}, {x, z}, AccuracyGoal > 8, PrecisionGoal > 12, MaxIterations > 1000]
Even more puzzling, if I constrain the two parameters closely to the guesses in the above fit, the constrained RMS residual is very much larger that that obtained when fitting the [r, y] data.
I haven't tried using FindFit yet, as the help files imply that it uses the same fitting engine. Any suggestions would be greatly appreciated.  jclarkw

