Resonance curve fitting with Mathematica

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 9K views
greedo
I have to fit a resonance curve to my data points, where the equation for the curve and the data points are:

Code:
model = a/Sqrt[4 k w^2 + (v^2 - w^2)^2]

data = {{242, 7/10}, {244.3`, 1}, {245.33`, 3/2}, {245.54`, 
   2}, {248.63`, 4}, {249.6`, 5}, {250.48`, 34/5}, {250.91`, 
   8}, {251.18`, 9}, {251.35`, 10}, {252.76`, 20}, {253.25`, 
   40}, {253.5`, 55}, {253.6`, 70}, {253.7`, 75}, {253.9`, 
   77}, {254.16`, 66}, {254.5`, 47}, {254.86`, 33}, {255.82`, 
   15}, {257, 5}};

I need to find the parameters that give the best fit for the data. This is the command I think is the closest to the solution:
Code:
fit = FindFit[
  data, {model, {0 <= k}}, {{a, 30}, {k, 0.007}, {v, 253}}, w}

but i get the error:
Code:
FindFit::eit: The algorithm does not converge to the tolerance of 4.806217383937354`*^-6 in 500 iterations. The best estimated solution, with feasibility residual, KKT residual or complementary residual of {...} is returned

I have tried playing with starting values, conditionals, NonlinearModelFit and others but none of them work. Could someone please help?
 
on Phys.org
greedo said:
I have to fit a resonance curve to my data points, where the equation for the curve and the data points are:

Code:
model = a/Sqrt[4 k w^2 + (v^2 - w^2)^2]

data = {{242, 7/10}, {244.3`, 1}, {245.33`, 3/2}, {245.54`, 
   2}, {248.63`, 4}, {249.6`, 5}, {250.48`, 34/5}, {250.91`, 
   8}, {251.18`, 9}, {251.35`, 10}, {252.76`, 20}, {253.25`, 
   40}, {253.5`, 55}, {253.6`, 70}, {253.7`, 75}, {253.9`, 
   77}, {254.16`, 66}, {254.5`, 47}, {254.86`, 33}, {255.82`, 
   15}, {257, 5}};

I need to find the parameters that give the best fit for the data. This is the command I think is the closest to the solution:
Code:
fit = FindFit[
  data, {model, {0 <= k}}, {{a, 30}, {k, 0.007}, {v, 253}}, w}

but i get the error:
Code:
FindFit::eit: The algorithm does not converge to the tolerance of 4.806217383937354`*^-6 in 500 iterations. The best estimated solution, with feasibility residual, KKT residual or complementary residual of {...} is returned

I have tried playing with starting values, conditionals, NonlinearModelFit and others but none of them work. Could someone please help?
That error just means that your initial guess is too far off. I got it to work without error for an initial guess of a=10000 and k=1 and v=253.
 
hi, my suggestion is first you take the initial values for the fit from the experimental data. It is easy just plot and see...and take the initial value and include it in fit routine. origin software can do this job ..or you can use gnuplot..but in gnuplot you get only the fitted curve instead of the individual components..anyways you get the accurate output.
good luck..