Polyfit with scaling

Ben Abbott bpabbott at mac.com
Fri Feb 1 08:15:58 CST 2008


On Jan 31, 2008, at 9:26 PM, Ben Abbott wrote:

> On Jan 31, 2008, at 3:08 PM, Thomas Weber wrote:
>
>> On 31/01/08 07:47 -0500, Ben Abbott wrote:
>>> It doesn't appear that the example has much comparative value.
>>
>> Honestly, I don't care what we change. However, what shouldn't  
>> happen is
>> that things just stay the same. If we have a better implementation in
>> wpolyfit, we should take that for polyfit. Having a better algorithm
>> lying around and not using is just a waste (actually, it's even  
>> worse:
>> we not even have a better algorithm, but it's also already  
>> implemented).
>>
>> 	Thomas
>
> ? hmmm ... I agree we  should use the better algorithm.
>
> In any event, I've modified polyfit.m to optionally use the method  
> employed by wpolyfit. To do this; I wrote two new scripts. One to  
> offset a polynomial's dependent variable (polyshift), and one to  
> scale a polynomial's dependent variable (polyscale).
>
> Below I compared the present version of polyfit to the one attached  
> to this email.
>
> octave:1> x = 1:4;
> octave:2> y = polyval ([1, 1, 1], x);
> octave:3> polyfit (x, y, 2)
> ans =   1.00000   1.00000   1.00000
> octave:4> polyfit (x, y, 2, 1)
> ans =   1.00000   1.00000   1.00000
> octave:5> polyfit (x, y, 3)
> ans =   0   1   1   1
> octave:6> polyfit (x, y, 3, 1)
> ans =   5.2633e-16   1.0000e+00   1.0000e+00   1.0000e+00
> octave:7> polyfit (x, y, 4)
> ans =  -0.0020445   0.0204453   0.9284416   1.1022263   0.9509314
> octave:8> p = polyfit (x, y, 4, 1)
> p =    -5.0886    50.8856  -177.0996   255.4281  -121.1255
> octave:9> polyval (p, x)
> ans =    3.0000    7.0000   13.0000   21.0000
> octave:10> polyval ([1, 1, 1], x)
> ans =    3    7   13   21
>
> Comparing to Matlab ...
>
> >> x = 1:4;
> >> y = polyval([1, 1, 1], x);
> >> polyfit(x, y, 2)
> ans =    1.0000    1.0000    1.0000
> >> polyfit(x, y, 3)
> ans =    0.0000    1.0000    1.0000    1.0000
> >> polyfit(x, y, 4)
> Warning: Polynomial is not unique; degree >= number of data points.
> > In polyfit at 72
> ans =    0.0200   -0.2000    1.7000    0    1.4800
>
> The offset and scaling appears to significantly modify the result  
> when the order of the fit exceeds to order of the original polynomial.
>
> I am not an expert in such matters. How might we quantitatively  
> determine which algorithm is best?
>
> I've attached the modified polyfit.m as well as the two new scripts  
> it relies upon.
>
> Perhaps it is worth the effort for others to compare their results  
> with mine, and to compare Matlab's results on a computer other than  
> an Intel/ppc based Mac (each gave the same result).
>
> Ben

I should mention that nothing has been done to ensure that the second  
output respects the normalization of the dependent variable.

I'll look into what needs to be done there, if it is possible ... or  
more to the point, if I'm up to the task ;-)

If anyone has experience or background in how the job might be done,  
please feel free to contribute or to point me in the right direction!

Ben

-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://www.cae.wisc.edu/pipermail/octave-maintainers/attachments/20080201/be0ba332/attachment.html 


More information about the Octave-maintainers mailing list