# Problem related to fitting a damped sine function

When I try to fit an exponential damped sine, it acts as if it cannot reach the amplitude at all. What do I change?

Getting data:

dane = ReadList[
"C:\\Users\\student\\Desktop\\hubvoy\\projekt-hubert-wojewoda\\\
dane2", Real];
dlugosc = Length[dane]/2;
czas = dane[[1 ;; dlugosc]];
napiecie = dane[[dlugosc + 1 ;; 2 dlugosc]];

dane2 = Transpose[{czas, napiecie}];


Fitting:

fit = NonlinearModelFit[dane2,
a *Exp[-b*x]*Sin[c*x + d], {a, b, c, d}, x, Method -> Automatic];

Show[{ListPlot[dane2, PlotRange -> All],
Plot[fit[x], {x, 0, 600}, PlotStyle -> Red,
PlotLabel -> "Automatyczne dopasowanie wielomianu",
AxesLabel -> {"x", "y"}]}]


Plot:

• Try Method -> "NMinimize"! Commented Feb 9 at 11:59
• @UlrichNeumann I've tried it before, nothing changes Commented Feb 11 at 7:51
• Just as @UlrichNeumann have mension, fit = NonlinearModelFit[dane2, a*Exp[-b*x]*Sin[c*x + d], {a, b, c, d}, x, Method -> "NMinimize"]; Show[{ListPlot[dane2, PlotRange -> All], Plot[fit[x], {x, 0, 600}, PlotStyle -> Red, PlotRange -> All, PlotLabel -> "Automatyczne dopasowanie wielomianu", AxesLabel -> {"x", "y"}]}] Commented Feb 12 at 4:42

NonlinearModelFit requires parameter estimates in most cases - just provide acceptable guesses for the values. I downloaded your file, added a .dat extension, so I could Import[ ] it:

dane2 = Transpose[ Import["dane2.dat"] ]

fit = NonlinearModelFit[dane2, a*Exp[-b*x]*Sin[c*x + d], {{a, 50}, {b, 0.01}, {c, 0.03}, {d, 0}}, x]

Show[ Plot[fit[x], {x, 0, 600}, PlotRange -> All], ListPlot[dane2]]


The usual methods of non-linear regression are iterative and require "guessed" or "estimated" values of the parameters to start the process. This is often a cause of difficulty when the "guessed" values are too far from the correct unknown values.

In some cases it is possible to fit the model function thanks to a different method which isn't iterative and doesn't require initial "guessed" values. The general principle is explained with several examples of application in : Regressions-et-equations-integrales

Instead of directly fitting the non-linear model equation one fit a linear integral equation to which the model equation is solution.

In case of model equation involving sine functions the accuracy of the period is critical. If the range of the data covers only a few periods the calculs is generally simple. If the number of periods is large a more accurate numerical calculs is necessary but more complicated.

The case of Damped Sine function is treated pp.54-70. For a rough approximate of the solution a simplified version is used below (called "Short way" in the referenced paper).

In the present experimental case the number of given points is 400 covering a large number of periods with among them many with very low signifiance. In order to use the simplified version only a few periods are sufficient. For example the first n=200 points are taken in account in the calculus below. Even with 100points the result would be quite the same.

In order to get even more accurate result the approximate values of the parameters obtained above could be used as very good initial values for performing non-linear regression thanks to any convenient available software.