![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/174138/image.png)
Trying to find best fit for cosine curve
51 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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!
0 comentarios
Respuesta aceptada
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
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/174138/image.png)
11 comentarios
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.
Más respuestas (0)
Ver también
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!