1

我有 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曲线之间是否有任何匹配选项?

4

2 回答 2

3

该问题可归因于从向量polyfit构建的系数矩阵的类型:范德蒙德矩阵x

什么时候

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

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

按照帮助页面底部的建议,在应用之前先尝试居中和缩放x矢量:polyfitpolyfit

由于 Vandermonde 矩阵中的列是向量 的幂,因此对于高阶拟合,x条件数通常很大,从而产生奇异系数矩阵。V在这些情况下,居中和缩放可以改善系统的数值特性以产生更可靠的拟合。

(我的重点)

于 2015-08-24T07:56:50.110 回答
2

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

解决这个问题的方法是要么获得更多的分数,这样你就可以获得你想要的多项式次数的所需拟合,或者减少你想要的多项式次数。

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

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

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

于 2015-08-24T01:36:00.253 回答