FindFit on only real parameters

*To*: mathgroup at smc.vnet.net*Subject*: [mg121170] FindFit on only real parameters*From*: matyigtm <matyigtm at gmail.com>*Date*: Fri, 2 Sep 2011 03:28:53 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com

Hello, Suppose I have data with complex values on which I want to fit a (nonlinear) curve with _only_ real parameters. How do I find these parameters? For example (for demonstration a linear problem is presented) x={0,1,2} f={0+I 0,1+I 2,2+I 1} model:=(a+I b)+c X + d I X^2 FindFit[{x,f}//Transpose,model,{a,b,c,d},X] returns complex valued "a","b","c" and "d" parameters. How should I do to obtain only real valued parameters. I've tried to force the equation to run only with real values. The results were errors each time: model := (Re[a] + I Re[b]) + Re[c] X + Re[d] I X^2 or model := (a Conjugate[a] + I b Conjugate[b]) + c Conjugate[c] X + d Conjugate[d] I X^2 Finally I have written a custom ("brute force") function which takes too much computation time to give results: findFitReal[data_, expr_, pars_, vars_] := Module[{v}, v = Table[ expr, {vars, (data\[Transpose])[[1]]}] - (data\[Transpose])[[ 2]]; NMinimize[ (v.v\[Conjugate]) // Re, pars]] I cannot change to algorithm of the nonlinear fitting found on mathworld.wolfram.com/NonlinearLeastSquaresFitting.html to give only real value for the parameters. Any hints appreciated, Matyas