Substract fitted values from original data
1 次查看(过去 30 天)
显示 更早的评论
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 );
warning('off','curvefit:fit:equationBadlyConditioned')
x = xData;
y = yData;
varnames = coeffnames(fitresult)
varvalues = coeffvalues(fitresult)
for i = 1:length(varnames)
eval([varnames{i},'=',num2str(varvalues(i)),';']);
end
Z = a1*sin(b1*x+c1) +a2*sin(b2*x+c2) +a3*sin(b3*x+c3) + a4*sin(b4*x+c4);
figure
plot(x,y)
hold on
plot(fitresult)
plot(x,Z)
legend('data','fit function','fit exact values')
%%
z_INT = Z_int-Z;
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/368329/image.png)
0 个评论
采纳的回答
Ameer Hamza
2020-9-29
编辑:Ameer Hamza
2020-9-29
First, eval is evil; avoid it as much as possible: https://www.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval . 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);
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Interpolation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!