Mathematica Resonance curve fitting with Mathematica

AI Thread Summary
The discussion revolves around fitting a resonance curve to a set of data points using the equation model = a/Sqrt[4 k w^2 + (v^2 - w^2)^2]. The user encounters convergence issues with the FindFit command, receiving an error indicating that the algorithm fails to meet the tolerance within the specified iterations. Suggestions for resolving the issue include adjusting initial parameter values, with one user successfully using a=10000, k=1, and v=253. It is recommended to derive initial values from the experimental data through plotting, and alternatives like Origin software or Gnuplot are mentioned for fitting, with Gnuplot noted for providing only the fitted curve rather than individual components.
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
Views
5K
Replies
1
Views
2K
Back
Top