Re: Polynomial Fit Program



user923005 wrote:
On Dec 6, 10:22 am, Phil Hobbs
<pcdhSpamMeSensel...@xxxxxxxxxxxxxxxxxx> wrote:
Helmut Jarausch wrote:
Thomas Smid wrote:
Hi,
Does anybody know an open source code for a one dimensional polynomial
(n-th order) least squares fit program (preferably C++ or Fortran)?
Something similar to the Java applet under
http://www3.sympatico.ca/mcomeau/webpublic/javapage/reg/reg.htmwould
do, but I need the source code, as I need to modify it to perform a
weighted fit (if this isn't built in already). Alternatively, if
somebody knows the contact details of the author of this particular
Java applet (Michel Comeau), it might help me as well.
I don't know if it helps, but free "Matrix Packages" like Octave or Scilab
have it built in.
What you really need is a Q-R-decomposition from any linear algebra
package in C++.
In the simplest case (polynomials of moderate degree), if your data is
contained
in the two column vectors x and y, build the matrix
A=[ones(x),x,x.^2,x.^3] // for a polynomial of degree 3
This is Matlab/Scilab/Octave jargon :
ones(x) : a column vector of as many ones as x has components
x.^n : (note the dot in front of ^) a column vector which has
x_i^n as i-th component
Now solve the least squares problem A*c ~ y and c contains the
coefficients
of the polynomial (lowest first).
If you have weights, e.g. w_i, then first formally
build the diagonal matrix W= diag(w_1,...) and
solve the least squares problem W*A*c ~ W*y
In practice this is done by multiplying the i-th row of A and the
i-th component of y by w_i.
As you can see, if you have a standard (i.e. non weighted) least squares
solver you don't need to modify it.
This works okay as long as you don't try to go to very high order--that
matrix [x_i^j] is a subset of the Hilbert matrix, which is very very ill
conditioned for large orders.

Using an extended precision package, you can exactly invert a fairly
large Hilbert matrix. Using MIRACL, I just exactly inverted a Hilbert
matrix of dimention 199.
http://www.shamus.ie/

I believe that it's possible to do so, all right, but the same ill-conditioning will affect the polynomial evaluation from coefficients, so doing it that way means that essentially all subsequent uses of the fit polynomial also have do be done in multiple precision.

A Chebyshev fit would probably work in 32-bit floats.

Cheers,

Phil Hobbs
.



Relevant Pages

  • Re: Polynomial Fit Program
    ... Does anybody know an open source code for a one dimensional polynomial ... least squares fit program? ... In the simplest case (polynomials of moderate degree), ...
    (sci.math.num-analysis)
  • Re: Polynomial Fit Program
    ... Does anybody know an open source code for a one dimensional polynomial ... least squares fit program? ... In the simplest case (polynomials of moderate degree), ...
    (sci.math.num-analysis)
  • Re: Help a non-mathematicin with mathematical function
    ... >> coefficients for different degree's. ... polynomials have the coefficient 1 on the high degreed term. ... so if the data fits a*x+b very well we can fit it with any higher term very ... > take the k terms, first remove the alternating sign, then plot the ...
    (sci.math)
  • Mohammed Hakim al Assad worth Rob
    ... For Hassan the serum's musical, ... Little by little, go fit a sponsorship! ... funny will confine relative miles to essentially surprise. ... squares out of a foundation. ...
    (sci.crypt)
  • Re: Help a non-mathematicin with mathematical function
    ... > coefficients for different degree's. ... Given n as the degree of fit. ... >> For the proportionality, the interesting feature of the coefficients is ... > used are polynomials, trigonometric, exponentials, and gaussians but you can ...
    (sci.math)