Problem using polyfit in a loop
显示 更早的评论
Hello
I am having problem using polyfit in a for loop.
A is a null matrix. Polynomial fitting of order 10 has to be subtracted from the raw data z((I(:,j)+100/dt:end),j) and the residual has to be zero padded. t(I(:,j)+100/dt:end) is the time axis. But the loop shows matrix dimensions do not agree. Please find the code below.
for j = 1 : 1 : L
z1(:,j) = A(:,j) + (padarray(z((I(:,j)+100/dt:end),j)-polyval(polyfit(t(I(:,j)+100/dt:end),z((I(:,j)+100/dt:end),j),10),t(I(:,j+100/dt:end)),j)),N-length(z((I(:,j)+100/dt:end),j),0,'post');
end
2 个评论
dpb
2021-6-4
You don't have to try to write everything in one line...factor your code first so you can read it and debug...once have done that, use the debugger to step through and see where your logic error is.
shaina dhamija
2021-6-7
回答(1 个)
Steven Lord
2021-6-4
0 个投票
If you're trying to remove a polynomial trend from your data, see the detrend function. As of release R2019a you can specify a degree >1 of the polynomial trend to remove.
2 个评论
shaina dhamija
2021-6-7
dpb
2021-6-7
High-order polynomials are notroiously ill-behaved and prone to numeric issues...depending upon what range of values are for x, x.^10 can become extremely large. Consider using some other form than such a high-order polynomial or at least use the option in polyfit|polyval to standarize the inputs that will help on the numerics...
类别
在 帮助中心 和 File Exchange 中查找有关 Polynomials 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!