Last chance! 50% off unlimited learning
Sale ends in
rationalfit(x, y, d1 = 5, d2 = 5)
x
and y
must be of the same length.d1
) and denominator
(d1
) of the requested rational function.p1
and p2
for the polynomials in
numerator and denominator of the rational function.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
ratinterp
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()
Run the code above in your browser using DataLab