为什么这个多项式方程条件不好?

Why is this polynomial equation badly conditioned?

我有 1x1024 矩阵。所以我想估计一个多项式方程。

X= (0:1023)'
Y= acquired data.  A 1024 element vector

然后我在 MATLAB 中尝试这个:

polyfit(x,y,5)

但是 MATLAB 给出了一个异常结果并带有警告。

Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the ...

我不明白我做错了什么?

更新

我得到了一堆这样的数字。

Y=

-0.0000000150
 ...
0.00001
...
0
...
0.17

X=0~255

polyfit(X,Y,4)

我得到了一个多项式,但它与原始曲线不匹配。 原始曲线和polyfit的曲线有匹配的选项吗?

此警告是因为您提供给 polyfit 的具有所需多项式次数的数据不合适。具体来说,您的数据中的可变性不足,因此您无法成功获得良好的拟合。因此,MATLAB 会向您发出警告,因为数据无法与您想要的次数多项式正确拟合。

解决这个问题的方法是要么获得更多点,以便获得所需的多项式次数,要么减少所需的多项式次数。

尝试小于 5...4、3 或者 2 的值:

coeff = polyfit(x, y, 4);
%// or
%coeff = polyfit(x, y, 3);
%coeff = polyfit(x, y, 2);

尝试每个度数,直到您不再收到警告。但是,没有实际数据,我只能推测出了什么问题,这是我最好的猜测。

问题可以归因于 polyfitx 向量构建的系数矩阵的类型:Vandermonde matrix.

什么时候

  • x向量的元素在大小上变化太大,
  • 拟合多项式的次数太高,

你得到一个病态矩阵,相关的线性系统无法可靠求解。

在应用 polyfit 之前,先尝试居中并缩放 x 矢量,如 polyfit 帮助页面底部的建议:

Since the columns in the Vandermonde matrix are powers of the vector x, the condition number of V is often large for high-order fits, resulting in a singular coefficient matrix. In those cases centering and scaling can improve the numerical properties of the system to produce a more reliable fit.

(我的重点)