Why is this polynomial equation badly conditioned?

bural picture bural · Aug 24, 2015 · Viewed 7.6k times · Source

I have 1x1024 matrix. So I'd like to estimate a polynomial equation.

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

Then I try this in MATLAB:

polyfit(x,y,5)

But MATLAB makes an abnormal result with warning.

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

I don't understand what am I doing wrong?

Update

I got a bunch of numbers like this.

Y=

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

X= 0~255

polyfit(X,Y,4)

I got a polynomial but it does not match to original curve. Is there any options to match between original curve and polyfit's curve?

Answer

jub0bs picture jub0bs · Aug 24, 2015

The problem can be attributed to the type of coefficient matrix that polyfit builds from the x vector: a Vandermonde matrix.

When

  • the elements of the x vector vary too much in magnitude, and
  • the degree of the fitting polynomial is too high,

you get an ill-conditioned matrix, and the associated linear system cannot be solved reliably.

Try to centre and scale your x vector first, before applying polyfit, as advised at the bottom of the polyfit help page:

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.

(my emphasis)