help-octave
[Top][All Lists]

## Re: HELP please, Can't fit data properly

 From: Doug Stewart Subject: Re: HELP please, Can't fit data properly Date: Wed, 3 Oct 2018 19:11:40 -0400

On Wed, Oct 3, 2018 at 6:19 PM Przemek Klosowski <address@hidden> wrote:
On 10/03/2018 05:15 PM, Doug Stewart wrote:

On Wed, Oct 3, 2018 at 4:25 PM James Sherman Jr. <address@hidden> wrote:
On Wed, Oct 3, 2018 at 4:07 PM T.G.ALG <address@hidden> wrote:
Hi, I'm trying to fit some data to a function of degree 4 or 5, but when I
plot it, it doesn't fit:

DATA:
C30 =

0.063330   0.057200   0.052870   0.047380   0.044860   0.039710
0.037070   0.036030   0.034990
t =

1.0000    1.5000    2.0000    3.0000    5.0000    7.0000   10.0000
13.0000   18.0000

FIT:
p=polyfit(t,C30,4)

0.0000027990  -0.0001193780   0.0018221783  -0.0125401220   0.0727802050

The problem is that when I plot(t,C30) and plot(p) I get totally different
curves, am I missing somethiing???

Yes, I believe it is safe to say that you are missing something.  Look at vector that is returned from polyfit that you print out:
p=
0.0000027990  -0.0001193780   0.0018221783  -0.0125401220   0.0727802050

these are the coefficients of the polynomial (see help polyfit for more explanation).  And the "curve" from plotting that vector is just the coefficients wrt their index.  The function you're probably looking for is polyval (help polyval for info) so that you can evaluate the fitted curve at the values of x that you want.

Hope this helps,
James Sherman Jr.

Polyfit can do that

[P, S] = polyfit (X, Y, N)

S.yf  should have the fitted Y values for your x values.

True, but it does not show how bad the fit is. These datapoints aren't likely to fit a polynomial model, and to see it it helps to see the actual fitted polynomial with more resolution than the 9 points provided:

C30 = [ 0.063330   0.057200   0.052870   0.047380   0.044860   0.039710  0.037070   0.036030   0.034990]
t      = [ 1.0000      1.5000       2.0000       3.0000      5.0000       7.0000    10.0000     13.0000     18.0000]

plot(t,C30,'o',x=1:.1:20,polyval(polyfit(t,C30,4),x))

which shows nicely the deficiency of the fourth-order polynomial, by creating artifacts where the data has none.

You are correct. And this is very important to see what the curve looks like between the given data points.
Thanks :-)
--
DAS