我将代码更改为使用居中和缩放,如频繁出现的警告消息中所建议的,使用以下形式:
[p,~, mu] = polyfit(tScan(observationRange),aScan(observationRange),npoly);
tPoly = linspace (tScan(observationRange(1)),tScan(observationRange(end)), 100);
aPoly = polyval(p,tPoly,[],mu);
但在同一个代码中,我之前用找到了多项式的根
threshold = roots([p(1:npoly) p(end)-thresholdLimit]);
它不再像我以前使用居中和缩放时那样返回相同的根。我之前得到的根源是合理的价值观。
多项式是二次多项式,所以它不应该那么复杂。
Matlab根函数不使用定心和缩放参数。
就我的多项式系数而言,定心和缩放到底发生了什么?定中心和缩放如何影响根的计算?我怀疑它们已经被居中和缩放,但我不确定如何将它们转换为有用的值。
对于重新居中的&重新缩放拟合[p,~,mu]=polyfit(x,y,n)
,函数首先计算重新缩放和重新缩放的x_bis = (x-mu(1))/mu(2)
(其中mu(1) = mean(x)
和mu(2) = std(x)
(。然后计算拟合多项式系数。因此,多项式系数将是重新定中心和重新定标的x_bis
的系数,这与原始信号x
不同。
(在此链接上-https://fr.mathworks.com/help/matlab/ref/polyfit.html-有重新缩放的详细信息&CCD_ 7的重新定中心(。
因此,如果我是对的,使用threshold=roots([p(1:npoly) p(end)-thresholdLimit]) * mu(2) + mu(1)
计算根应该会给你正确的解决方案!