Polyfit with scaling
Ben Abbott
bpabbott at mac.com
Sun Feb 3 18:20:20 CST 2008
I invested some time looking at the stability of polyfit under
different conditions. The four cases I considered were
(1) Using the present algorithm (which uses the backslash).
(2) Using the present algorithm, with normalized inputs.
(3) Using QR for the solution.
(4) Using QR for the solution, with normalized inputs.
The normalization used is
x = (x-mean(x)) / abs(std(x));
y = (y-mean(y)) / abs(std(y));
The short script I used permits the order of the polynomial and the
length of the input vectors to be varied independently.
xoffset = 1000;
pshift = ones (1, N+1);
p = polyshift (pshift, -xoffset);
x = xoffset + linspace(-5,5,M);
y = polyval (pshift, x-xoffset);
[pfit, s] = polyfit (x, y, N);
yfit = polyval (pfit, x);
I ran several cases and compared the norm of the residues, as well as
the norm of the difference of the original and fitted polynomial
coefficients.
norm of (yfit-y)
Present Algorithm Solution using QR
N M unnorm norm unnorm norm
1 2 1.1369e-13 0.0000e+00 1.1369e-13 1.2561e-15
1 3 1.1369e-13 1.2561e-15 1.1369e-13 1.2610e-15
2 3 2.6031e-10 0.0000e+00 1.3824e-09 8.7504e-15
2 4 6.6134e-08 1.1409e-14 3.4041e-10 1.1580e-14
2 5 6.9249e-08 8.2486e-15 5.4604e-10 1.1572e-14
3 4 4.9642e+01 1.8310e-15 1.3767e-06 6.3815e-14
3 5 5.9235e+01 1.4262e-13 1.0926e-06 6.4272e-14
3 6 6.4335e+01 1.8519e-14 2.6008e-06 3.5718e-14
3 7 6.7974e+01 1.0843e-13 1.3334e-06 6.1238e-14
4 5 1.2522e+02 3.5527e-15 2.0280e-03 2.2775e-13
4 6 1.5735e+02 2.2581e-12 1.9224e-03 3.3016e-13
4 7 1.7629e+02 9.1410e-13 1.5611e-03 1.6262e-13
4 8 1.8952e+02 3.8459e-13 3.6440e-03 4.6810e-13
4 9 1.9985e+02 1.7892e-13 1.6603e-03 1.7505e-13
norm of (pfit-p)
Present Algorithm Solution using QR
N M unnorm norm unnorm norm
1 2 6.7075e-12 0.0000e+00 2.8422e-12 0.0000e+00
1 3 1.6939e-11 0.0000e+00 1.7167e-11 0.0000e+00
2 3 2.8582e-06 2.3283e-10 1.2274e-05 4.6566e-10
2 4 3.3198e-06 4.6566e-10 3.3194e-06 4.6566e-10
2 5 4.9461e-06 4.6566e-10 4.9466e-06 4.6566e-10
3 4 9.9901e+08 4.7684e-07 2.0040e+00 1.1921e-07
3 5 9.9901e+08 4.7684e-07 2.9059e+00 2.3842e-07
3 6 9.9901e+08 2.3842e-07 1.2420e+01 4.7684e-07
3 7 9.9901e+08 7.1526e-07 7.3990e+00 4.7684e-07
4 5 9.9901e+11 3.6621e-04 2.7385e+06 3.6621e-04
4 6 9.9901e+11 5.9815e-03 9.0039e+05 8.5450e-04
4 7 9.9901e+11 3.0518e-03 1.6692e+06 8.5450e-04
4 8 9.9901e+11 2.4414e-04 4.4956e+05 1.2207e-03
4 9 9.9901e+11 1.2207e-03 3.2162e+06 4.8828e-04
With no normalization, the QR algorithm performs better than the
current implementation, Although, when using normalized variables that
benefit is nearly absent.
I tried other polynomials as well. All I tried gave similar
comparative results (including poles of multiplicity).
Give these results and the need to remain compatible with past
expectations, and with Matlab, I'm inclined to make both QR and
normalization optional.
In the event, the optional approach is to be used, I'm prepared to
incorporate it in other core functions, such as residue.m.
Thoughts?
Ben
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://www.cae.wisc.edu/pipermail/octave-maintainers/attachments/20080203/2e61385b/attachment.html
More information about the Octave-maintainers
mailing list