# NAME

Math::Interpolate - Interpolate the value Y from X using a list of (X, Y) pairs

# SYNOPSIS

`````` use Math::Interpolate qw(derivatives constant_interpolate
linear_interpolate robust_interpolate);
my @x = (1..5);
my @y = (5, 10, 13, -4.5, 3);
my @dy = derivatives(\@x, \@y);
my (\$l_y, \$l_dy) = linear_interpolate(3.4, \@x, \@y);
my (\$r_y, \$r_dy) = robust_interpolate(3.4, \@x, \@y);
(\$r_y, \$r_dy) = robust_interpolate(3.4, \@x, \@y, [-2, 3, 4, -1, 4]);``````

# SUBROUTINES

derivatives x_sequence y_sequence

Given a reference to an array of x values in x_sequence and a reference to an array of y values in y_sequence, return an array of reasonable derivatives. The x_sequence values are presumed to be sorted in increasing numerical order.

If there is an error in the input, such as x_sequence and y_sequence containing a different number of elements, then the subroutine returns an empty list in list context, an undefined value in scalar context, or nothing in a void context.

constant_interpolate x x_sequence y_sequence

Given a reference to an array of x values in x_sequence and a reference to an array of y values in y_sequence, return the y value associated with the first x value less than or equal to x. In other words, if x_sequence->[i] <= x < x_sequence->[i+1]

then return y_sequence->[i]

If x is less than x_sequence->, then return y_sequence->. If x is greater than x_sequence-[-1], then return y_sequence->[-1].

If there is an error in the input, such as x_sequence and y_sequence containing a different number of elements, then the subroutine returns an empty list in list context, an undefined value in scalar context, or nothing in a void context.

linear_interpolate x x_sequence y_sequence

Given a reference to an array of x values in x_sequence and a reference to an array of y values in y_sequence, calculate the interpolated value y that corresponds to the value x. The returned value y lies on the straight line between the two points surrounding x. If <x> lies outside of the range of values spanned by x_sequence then a linear extrapolation will be done.

In an array context, linear_interpolate will return an array containing the y value and and slope between the two nearest surrounding points.

If there is an error in the input, such as x_sequence and y_sequence containing a different number of elements, then the subroutine returns an empty list in list context, an undefined value in scalar context, or nothing in a void context.

robust_interpolate value x_sequence y_sequence [dy_sequence]

Given a reference to an array of x values in x_sequence and a reference to an array of y values in y_sequence, calculate the interpolated value y that corresponds to the value x. The interpolated curve generated by robust_interpolate is smooth and even the derivatives of the curve are smooth with only a few exceptions.

The returned value y lies on the curve between the two points surrounding x. If <x> lies outside of the range of values spanned by x_sequence then a linear extrapolation will be done.

In an array context, linear_interpolate will return an array containing the y value and and slope between the two nearest surrounding points.

If there is an error in the input, such as x_sequence and y_sequence containing a different number of elements, then the subroutine returns an empty list in list context, an undefined value in scalar context, or nothing in a void context.

# AUTHOR

Blair Zajac <blair@orcaware.com>.

Copyright (C) 1998-2005 Blair Zajac. All rights reserved. This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 354:

=back doesn't take any parameters, but you said =back 4