Borrar filtros
Borrar filtros

Trying to find best fit for cosine curve

51 visualizaciones (últimos 30 días)
Matthew
Matthew el 21 de Abr. de 2016
Comentada: Ali Alamri el 6 de Jun. de 2021
Hello,
I have 4 data points that I have plotted and are supposed to yield a cosine wave. How do I go about finding the best fit for this cosine wave? I understand 4 points is not a lot but am trying to get the best fit I can.
data = [1 4.2101; 2 -33.0595; 3 -5.6488; 4 76.2462]
Thank you for your help!

Respuesta aceptada

Star Strider
Star Strider el 21 de Abr. de 2016
This works:
data = [1 4.2101; 2 -33.0595; 3 -5.6488; 4 76.2462];
x = data(:,1);
y = data(:,2);
yu = max(y);
yl = min(y);
yr = (yu-yl); % Range of ‘y’
yz = y-yu+(yr/2);
zx = x(yz(:) .* circshift(yz(:),[1 0]) <= 0); % Find zero-crossings
per = 2*mean(diff(zx)); % Estimate period
ym = mean(y); % Estimate offset
fit = @(b,x) b(1).*(sin(2*pi*x./b(2) + 2*pi/b(3))) + b(4); % Function to fit
fcn = @(b) sum((fit(b,x) - y).^2); % Least-Squares cost function
s = fminsearch(fcn, [yr; per; -1; ym]) % Minimise Least-Squares
xp = linspace(min(x),max(x));
figure(1)
plot(x,y,'b', xp,fit(s,xp), 'r')
grid
  11 comentarios
Star Strider
Star Strider el 24 de Feb. de 2018
Since the sine and cosine are related by a phase difference of pi/2, the phase term here will allow the function to fit both. This is basic trigonometry.
Ali Alamri
Ali Alamri el 6 de Jun. de 2021
How can I constrain this fit to 2pi?

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Linear and Nonlinear Regression 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!

Translated by