Hi,
I am trying to fit complex data to a complex function.
Here's a snippet:
data = Import["
http://apps.getcloudigniter.com/data/data.csv"];
fitData =
Table[{data[[i, 1]], data[[i, 2]] + I*data[[i, 3]]}, {i, 1,
Dimensions[data][[1]]}];
fitEqn[x_] := (aR + I aI) + ( bR + I bI)*(Abs[x - 79800.3]/
1585.02) - (
par1 (x - par1))/((cR + I cI)*((x - par1)^2 -
I par2/2 (x - par1) - 435093.75^2));
fit = NonlinearModelFit[fitData,
fitEqn[x] , {aR, aI, bR, bI, cR, cI, par1, par2}, x,
WorkingPrecision -> 100, MaxIterations -> 10000]
This gives me an error:
"The function value {....} is not a list of real numbers..."
On the other hand, FindFit gives me the same error but it works quite well by setting NormFunction -> (Norm[Abs[#^2]] &):
(* This works *)
fit = FindFit[fitData,
fitEqn[x] , {aR, aI, bR, bI, cR, cI, par1, par2}, x,
NormFunction -> (Norm[Abs[#^2]] &), WorkingPrecision -> 100,
MaxIterations -> 10000]
And I get a fairly nice fit:
Show[ListPlot[
Table[{data[[i]][[1]], data[[i]][[2]]}, {i, 1,
Dimensions[data][[1]]}], PlotStyle -> Red],
Plot [Re[fitEqn[x] /. fit], {x, data[[Dimensions[data][[1]]]][[1]],
data[[1, 1]]}, PlotStyle -> Blue]]
Show[ListPlot[Table[{data[[i]][[1]],data[[i]][[3]]},{i,1,Dimensions[\
data][[1]]}],PlotStyle->Red],Plot \
[Im[fitEqn[x]/.fit],{x,data[[Dimensions[data][[1]]]][[1]],data[[1,1]]}\
,PlotStyle->Blue]]
However, I can't do the same modification to NonlinearModelFit(which I prefer to use since I need the additional information on fitting, e.g. ANOVA). Any tips on making it work?
Thanks,
Maria