R: Rational Function Approximation

rationalfit {pracma} | R Documentation

## 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.

### 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.

### See Also

`ratinterp`

### Examples

    ## 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)

[Package pracma version 2.0.4 Index]