Math::Approx

# METHODS

## new (constructor)

``    Math::Approx->new(\&poly, \$degree, %data);``

If the first argument to the constructor is a CODE reference, this is used as the function to iterate over the data. Such a function must take two arguments: The degree and the x value.

For interpolation with plain polynomials poly can be defined as:

``````        sub poly {
my(\$n,\$x) = @_;
return \$x ** \$n;
}``````

If the first argument in the constructor is a FALSE value instead of a CODE reference, then the above plain polynomial poly is used as the iterator function.

The second argument is the maximum degree which should be used for interpolation. Degrees start with 0.

The rest of the arguments are treated as pairs of x and y samples which should be approximated.

The constructor returns a Math::Approx reference.

## approx

``        \$approximation->approx(17);``

The method returns the approximated y value for the x value given as argument.

## fit

``        \$approximation->fit;``

Returns the medim square error for the data points.

## plot

``        \$approximation->plot("tmp/app");``

Prints all data pairs and the corresponding approximation pairs into the filename given as argument. The output is suitable for usage with gnuplot(1).

## print

``        \$approximation->print;``

Prints information about the approximation on STDOUT

# EXAMPLE

``````        use Math::Approx;

sub poly {
my(\$n,\$x) = @_;
return \$x ** \$n;
}

for (1..20) {
\$x{\$_} = sin(\$_/10)*cos(\$_/30)+0.3*rand;
}

\$a = new Math::Approx (\&poly, 5, %x);
\$a->print;
\$a->plot("math-approx-demo.out");
print "Fit: ", \$a->fit, "\n";``````