Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Impedance Equation fit to Complex Data

  • To: mathgroup at smc.vnet.net
  • Subject: [mg86581] Re: Impedance Equation fit to Complex Data
  • From: Martin Johansson <martin.n.johansson_LookMa_NoSpam_ at ericsson.com>
  • Date: Thu, 13 Mar 2008 20:56:00 -0500 (EST)
  • References: <fr7opm$39a$1@smc.vnet.net>

A temporary (?) workaround could be to use an explicitly real-valued 
'NormFunction' (the one below is just to show the principle):

Z := (G - I*H)/omega^((2*ArcTan[H/G])/Pi) + R;
Data = {{1., 2.658637 - 8.389573*I}, {1.5, 1.784396 - 6.214955*I},
       {2.5, 1.656569 - 3.97147*I}, {3.5, 1.633799 - 2.878841*I},
       {5.5, 1.357069 - 1.776964*I}, {6.5, 1.259121 - 1.848249*I},
       {8.5, 1.105417 - 1.344566*I}, {9.5, 1.119456 - 1.148945*I},
       {11.5, 1.082122 - 1.064767*I}, {14.5, 1.015714 - 0.8684088*I},
       {15.5, 1.055329 - 0.664562*I}, {18.5, 0.8675349 - 0.5107938*I},
       {20.5, 0.8968949 - 0.4148388*I}};

pars = FindFit[Data, Z, {R, G, H}, omega, NormFunction -> 
(Norm[Abs[#1^2]] & )]

p1 = ListPlot[{Re[Data], ({#1[[1]], Im[#1[[2]]]} & ) /@ Data},
        PlotMarkers -> Automatic];
p2 = Plot[{Re[Z], Im[Z]} /. pars, {omega, 0, 22}];
Show[p1, p2]

BR, Martin

AgustusBenjamin at gmail.com wrote:
> Dear Group,
> 
>    I'm trying to fit an equation to data using FindFit.  When I type
> in the equation and data and then FindFit, I get this:
> 
> Z := [Omega]^(-(2 ArcTan[H/G])/[Pi]) (G - i H) + R
> 
> Data := {{1.`, 2.658637`- 8.389573` i}, {1.5`,
>    1.784396`- 6.214955` i}, {2.5`,
>    1.656569`- 3.97147` i}, {3.5`,
>    1.633799`- 2.878841` i}, {5.5`,
>    1.357069`- 1.776964` i}, {6.5`,
>    1.259121`- 1.848249` i}, {8.5`,
>    1.105417`- 1.344566` i}, {9.5`,
>    1.119456`- 1.148945` i}, {11.5`,
>    1.082122`- 1.064767` i}, {14.5`,
>    1.015714`- 0.8684088` i}, {15.5`,
>    1.055329`- 0.664562` i}, {18.5`,
>    0.8675349`- 0.5107938` i}, {20.5`,
>    0.8968949`- 0.4148388` i}}
> 
> FindFit[Data, Z, {R, G, H}, \[Omega]]
> 
> FindFit::nrlnum: The function value {-0.658637+7.38957 \
> \[ImaginaryI],0.0321006+5.39846 \[ImaginaryI],-0.0241135+3.33901 \
> \[ImaginaryI],<<5>>,0.212762+0.769883 \[ImaginaryI],0.246899+0.605796
> \
> \[ImaginaryI],<<3>>} is not a list of real numbers with dimensions \
> {13} at {R,G,H} = {1.,1.,1.}. >>
> 
> Why?!?!?  Why can't FindFit handle this?  What's wrong with it not
> being a list of real numbers?  I'm pulling my hair out.  I've looked
> at others' suggestions for similar problems and they don't work for
> this problem.  Am I out of my mind?  Does anyone have a suggeston?
> 
> Regards,
> 
> Benji
> 


  • Prev by Date: Re: how to remove a warning message?
  • Next by Date: Re: Re: Question on Sum[] function
  • Previous by thread: Re: Impedance Equation fit to Complex Data
  • Next by thread: Re: Impedance Equation fit to Complex Data