rationalfit: Rational Function Approximation In pracma: Practical Numerical Math Functions

Description

Fitting a rational function to data points.

Usage

 1 rationalfit(x, y, d1 = 5, d2 = 5)

Arguments

 x numeric vector; points on the x-axis; needs to be sorted; at least three points required. y numeric vector; values of the assumed underlying function; x and y must be of the same length. d1, d2 maximal degrees of numerator (d1) and denominator (d1) of the requested rational function.

Details

A rational fit is a rational function of two polynomials p1 and p2 (of user specified degrees d1 and d2) such that p1(x)/p2(x) approximates y in a least squares sense.

d1 and d2 must be large enough to get a good fit and usually d1=d2 gives good results

Value

List with components p1 and p2 for the polynomials in numerator and denominator of the rational function.

Note

This implementation will later be replaced by a 'barycentric rational interpolation'.

Author(s)

Copyright (c) 2006 by Paul Godfrey for a Matlab version available from the MatlabCentral under BSD license. R re-implementation by Hans W Borchers.

References

Press, W. H., S. A. Teukolsky, W. T Vetterling, and B. P. Flannery (2007). Numerical Recipes: The Art of Numerical Computing. Third Edition, Cambridge University Press, New York.

Examples

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ## Not run: x <- linspace(0, 15, 151); y <- sin(x)/x rA <- rationalfit(x, y, 10, 10); p1 <- rA\$p1; p2 <- rA\$p2 ys <- polyval(p1,x) / polyval(p2,x) plot(x, y, type="l", col="blue", ylim=c(-0.5, 1.0)) points(x, Re(ys), col="red") # max(abs(y-ys), na.rm=TRUE) < 1e-6 grid() # Rational approximation of the Zeta function x <- seq(-5, 5, by = 1/16) y <- zeta(x) rA <- rationalfit(x, y, 10, 10); p1 <- rA\$p1; p2 <- rA\$p2 ys <- polyval(p1,x) / polyval(p2,x) plot(x, y, type="l", col="blue", ylim=c(-5, 5)) points(x, Re(ys), col="red") grid() # Rational approximation to the Gamma function x <- seq(-5, 5, by = 1/32); y <- gamma(x) rA <- rationalfit(x, y, 10, 10); p1 <- rA\$p1; p2 <- rA\$p2 ys <- polyval(p1,x) / polyval(p2,x) plot(x, y, type="l", col = "blue") points(x, Re(ys), col="red") grid() ## End(Not run)

Example output   Warning message:
In gamma(x) : NaNs produced

pracma documentation built on Dec. 11, 2021, 9:57 a.m.