As long as you're fitting normed data, how about fitting it to a normed model?
Your model:
fitModel = 1/(1/r + I c w);
and your data:
noisyData =
Table[{w, (fitModel + Random[Complex, {0, 0.1}] /. {r -> 2,
c -> 1})}, {w, 0.01, 3, 0.05}];
I fit it as you did to get the rule:
fitRule =
FindFit[noisyData, fitModel, {r, c}, w,
NormFunction -> (Norm[Abs[#1^2]] &)]
Now create a normed model:
fitModelconj = fitModel /. I -> -I;
normFitModel = Sqrt[Simplify[fitModelconj fitModel]]
and also norm the data:
normNoisyData = Map[Norm, noisyData, {2}];
Now fit the normed model to the normed data:
fittedModel =
NonlinearModelFit[normNoisyData, normFitModel, {r, c}, {w}];
Normal[fittedModel]
If you compare the output above to the normed model with the earlier fit, you see they don't quite agree, but almost:
normFitModel /. fitRule
Best regards,
David