pracma (version 1.9.9)

rationalfit: Rational Function Approximation

Description

Fitting a rational function to data points.

Usage

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.

Value

List with components p1 and p2 for the polynomials in numerator and denominator of the 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

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.

See Also

ratinterp

Examples

Run this code
## 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)

Run the code above in your browser using DataLab