MATLAB: Substract fitted values from original data

curve fittingCurve Fitting ToolboxevalMATLAB

I want to substract fit values from original data. Here is my code. What is wrong? Why Z and fitresult values are not equal? (see plot)
[xData, yData] = prepareCurveData(xdata,zz);
ft = fittype( 'sin4' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Normalize = 'on';
[fitresult, ~] = fit(xData, yData, ft, opts );
x = xData;
y = yData;
varnames = coeffnames(fitresult)
varvalues = coeffvalues(fitresult)
for i = 1:length(varnames)
Z = a1*sin(b1*x+c1) +a2*sin(b2*x+c2) +a3*sin(b3*x+c3) + a4*sin(b4*x+c4);
hold on
legend('data','fit function','fit exact values')
z_INT = Z_int-Z;

Best Answer

  • First, eval is evil; avoid it as much as possible: . Also, in your case, there is no need, you can directly evaluate fitresult
    y_predictions = fitresult(xData)
    For the issue in your question. This seems to be a bug in the implementation of fit() function (unless I am overlooking something). For some reason, the fitresult does not report the coefficient value correctly. The issue resolves if you don't pass the opts structure to fit()
    [fitresult, ~] = fit(xData, yData, ft);
    You may consider filing a bug report: