fit function does not work correctly
Ältere Kommentare anzeigen
I wanted to test a custom fit with a simple function ( cos(3.5t) ) and so I made the following code. But when I plot, the resultant fit doesn't follow the function at all.
t = [0:0.01:6]';
%Test with a cosinus function
y = cos(t*3.5);
%Create the fit type
fitmodel = @(a, x) cos(a.*x);
%Fit the curve
fitted = fit(t, y, fitmodel, 'TolX', 1E-15);
%Plot the curve and the fit
figure
plot(t, y, 'b.')
hold on
plot(t, fitted(t), 'r-')
hold off
1 Kommentar
Mathieu NOE
am 11 Okt. 2021
hi
look at the warning
Warning: Start point not provided, choosing random start point.
some fitting functions are (very) sensitive to initial conditions . you should be able to give a better start point
Akzeptierte Antwort
Weitere Antworten (2)
If the StartPoint is good enough, you can get the correct fitting.
t = [0:0.01:6]';
%Test with a cosinus function
y = cos(t*3.5);
%Create the fit type
fitmodel = @(a, x) cos(a.*x);
%Fit the curve
fitted = fit(t, y, fitmodel, 'TolX', 1E-15, 'StartPoint', 3);
%Plot the curve and the fit
figure
plot(t, y, 'b.')
hold on
plot(t, fitted(t), 'r-')
hold off
You shouldn't use a custom model when one is unnecessary. It is an important advantage to use one of the built-in models when possible, because the fitting algorithm can do smarter things, including the automatic generation of a StartPoint. Here, you can use 'sin1' or 'fourier1' with appropriate bounds:
t = [0:0.01:6]';
%Test with a cosinus function
y = cos(t*3.5);
opts=fitoptions('sin1','Lower',[1 -inf, pi/2],'Upper',[1 +inf pi/2]);
%Fit the curve
fitted = fit(t, y, 'sin1',opts);
%Plot the curve and the fit
figure
plot(t, y, 'b.')
hold on
plot(t, fitted(t), 'r-')
hold off
Kategorien
Mehr zu Multivariate Models finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


