![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/174138/image.png)
Trying to find best fit for cosine curve
51 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Matthew
am 21 Apr. 2016
Kommentiert: Ali Alamri
am 6 Jun. 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 Kommentare
Akzeptierte Antwort
Star Strider
am 21 Apr. 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 Kommentare
Star Strider
am 24 Feb. 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.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Linear and Nonlinear Regression finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!