Damped Oscillation Equation Fitting
30 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I am attempting to fit Data Tables in Excel to a Sin curve in order to determine its Omega for a physics experiment, where I need the equation to be in the form
x' = Ae^-bt sin(ωt' + φ)
Unfortunately I have no idea about Matlab but when I plot them as Column vectors, it is the same as I would recieve in excel and nowhere close to a sin curve. Any and all help is appreciated, as I have been through the previous questions that are similar and they pick up from a sin curve, unable to find instructions to that step, I am posting this here. Attached is the different trials I wish to do this for.
2 comentarios
Star Strider
el 6 de Nov. de 2023
Your data may be undersampled and could show aliasing. If you can, repeat the experiment with a much faster sampling frequency (100 times the current sampling frequency would work), then do the analysis.
Respuestas (2)
Sam Chak
el 29 de Oct. de 2023
Hi @Haardhik
You can probably estimate the value of omega (angular frequency) by counting the number of zero-crossing events. If you want to fit the damped sinusoidal equation to the data, you can try this:
Tab = readtable('No Mass (final).xlsx')
%% Trial 1
t = Tab.Time_s_(1:end-2); % Time
y = Tab.Position_m_(1:end-2); % Position
[~, count] = zerocrossrate(y, Method="comparison"); % count zero-crossing
T = t(end)/(count/2); % Period of a sine wave
omega = 2*pi/T % Estimate the angular frequency
% Curve-Fitting
fo = fitoptions('Method','NonlinearLeastSquares',...
'Lower',[ 0, 0, omega-5],...
'Upper',[0.03, 1, omega+5],...
'StartPoint',[max(y) 0.5, omega]);
ft = fittype('a*exp(-b*x)*cos(c*x)', 'options',fo);
[curve, gof] = fit(t, y, ft) % check if omega ≈ c
% Making plots
plot(t, y, '.'), hold on
plot(curve), grid on
xlabel('Time'), ylabel('Position'), title('Trial 1')
legend('Data', 'Fitted Sine')
7 comentarios
Sam Chak
el 6 de Nov. de 2023
The reason I asked for the initial velocity is to verify the values of a, b, c, and d found by Alex. Additionally, your data is undersampled because there are fewer than 2 data points per cycle (period). Please follow @Star Strider's advice to obtain more data.
% Using Alex Sha's finding
a = 0.023540378407752; % amplitude
b = 0.247177601901692; % decay rate constant
c = 69.1369475428933; % omega
d = 1.32644349058437; % phi
% period
T = 2*pi/c
% number of points per second
numPts = 110/5 % 110 data points over 5 sec
% How many point in a period?
T*numPts % less than two points
% Proposed fitting model
f = @(t) a*exp(-b*t).*sin(c*t + d);
t = linspace(0, 5, 19811); % minimum 19810 points over 5 sec to have 360 points per period
plot(t, f(t)), xlabel('t'), title('f(t) = a*exp(-b*t).*sin(c*t + d)')
% Velocity by formula (df/dt)
df = a*c*exp(-b*t).*cos(c*t + d) - a*b*exp(-b*t).*sin(c*t + d);
plot(t, df), xlabel('t'), title('df/dt')
% initial velocity based on df formula
df0 = df(1)
% initial velocity computed directly from {a, b, c, d}
df0 = a*c*cos(d) - a*b*sin(d)
% Test if initial velocity is -0.939057777778
True_df0 = -0.939057777778;
ToF = logical(abs(df0 - True_df0) < 1e-4) % True (1) / False (0)
Alex Sha
el 29 de Oct. de 2023
if taking fitting function as: x=a*exp(-b*t)*sin(w*t+phi)
for trial-1
Sum Squared Error (SSE): 9.1948847955911E-5
Root of Mean Square Error (RMSE): 0.000914274913678052
Correlation Coef. (R): 0.999583948620075
R-Square: 0.999168070338902
Parameter Best Estimate
--------- -------------
a 0.023540378407752
b 0.247177601901692
w 69.1369475428933
phi 1.32644349058437
for trial-2
Sum Squared Error (SSE): 0.000115663498814737
Root of Mean Square Error (RMSE): 0.0010162233075687
Correlation Coef. (R): 0.999720103291284
R-Square: 0.999440284924735
Parameter Best Estimate
--------- -------------
a 0.0200937306323941
b 0.236486196043985
w 69.1712756320905
phi 0.896068977752904
for trial-3
Sum Squared Error (SSE): 9.64366701017117E-5
Root of Mean Square Error (RMSE): 0.000936320992461801
Correlation Coef. (R): 0.999614594177523
R-Square: 0.999229336892693
Parameter Best Estimate
--------- -------------
a 0.0158395749665591
b 0.215537219553407
w 69.1871168416771
phi 7.30505431226722
Note: phi is not unique
4 comentarios
Ver también
Categorías
Más información sobre Get Started with Curve Fitting Toolbox en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!