Resonance curve fitting with Mathematica

Click For Summary
SUMMARY

This discussion focuses on fitting a resonance curve to data points using Mathematica's FindFit function. The model used is defined as model = a/Sqrt[4 k w^2 + (v^2 - w^2)^2] with initial parameters {a, 30}, {k, 0.007}, {v, 253}. The user encountered convergence errors, specifically FindFit::eit, indicating that the initial guesses were not suitable. A successful approach involved using initial values of a=10000 and k=1, along with plotting the data to derive better starting points for fitting.

PREREQUISITES
  • Understanding of resonance curves and their mathematical representation.
  • Familiarity with Mathematica, specifically the FindFit function.
  • Basic knowledge of nonlinear fitting techniques.
  • Ability to interpret error messages related to fitting algorithms.
NEXT STEPS
  • Explore advanced features of Mathematica's FindFit, including parameter constraints.
  • Learn how to visualize data and fitted curves using Mathematica plotting functions.
  • Investigate alternative fitting tools such as OriginLab and Gnuplot for resonance curve fitting.
  • Study methods for selecting initial parameter values based on experimental data.
USEFUL FOR

Researchers and data analysts involved in curve fitting, particularly in fields such as physics or engineering, will benefit from this discussion. It is especially relevant for those using Mathematica for data analysis and modeling.

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?
 
Physics news 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..
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
5K
  • · Replies 1 ·
Replies
1
Views
2K