| Title: | Continued Fractions |
| Version: | 1.1-12 |
| Author: | Robin K. S. Hankin |
| Description: | Various utilities for evaluating continued fractions. |
| Maintainer: | Robin K. S. Hankin <hankin.robin@gmail.com> |
| License: | GPL-2 |
| Packaged: | 2018-05-17 02:38:11 UTC; rhankin |
| URL: | https://github.com/RobinHankin/contfrac.git |
| NeedsCompilation: | yes |
| Repository: | CRAN |
| Date/Publication: | 2018-05-17 04:13:09 UTC |
Continued fraction convergents
Description
Returns continued fraction convergent using the modified Lenz's
algorithm; function CF() deals with continued fractions and
GCF() deals with generalized continued fractions.
Usage
CF(a, finite = FALSE, tol=0)
GCF(a,b, b0=0, finite = FALSE, tol=0)
Arguments
a, b |
In function |
finite |
Boolean, with default |
b0 |
In function |
tol |
tolerance, with default |
Details
Function CF() treats the first element of its argument as the
integer part of the convergent.
Function CF() is a wrapper for GCF(); it includes
special dispensation for infinite values (in which case the value of
the appropriate finite CF is returned).
The implementation is in C; the real and complex cases are treated separately in the interests of efficiency.
The algorithm terminates when the convergence criterion is achieved
irrespective of the value of finite.
Author(s)
Robin K. S. Hankin
References
W. H. Press, B. P. Flannery, S. A. Teukolsky, and W. T. Vetterling 1992. Numerical recipes 3rd edition: the art of scientific computing. Cambridge University Press; section 5.2 “Evaluation of continued fractions”
W. J. Lenz 1976. Generating Bessel functions in Mie scattering calculations using continued fractions. Applied Optics, 15(3):668-671
See Also
Examples
phi <- (sqrt(5)+1)/2
phi_cf <- CF(rep(1,100)) # phi = [1;1,1,1,1,1,...]
phi - phi_cf # should be small
# The tan function:
"tan_cf" <- function(z,n=20){
GCF(c(z, rep(-z^2,n-1)), seq(from=1,by=2, len=n))
}
z <- 1+1i
tan(z) - tan_cf(z) # should be small
# approximate real numbers with continued fraction:
as_cf(pi)
as_cf(exp(1),25) # OK up to element 21 (which should be 14)
# Some convergents of pi:
jj <- convergents(c(3,7,15,1,292))
jj$A / jj$B - pi
# An identity of Euler's:
jj <- GCF(a=seq(from=2,by=2,len=30), b=seq(from=3,by=2,len=30), b0=1)
jj - 1/(exp(0.5)-1) # should be small
Approximates a real number in continued fraction form
Description
Approximates a real number in continued fraction form using a standard simple algorithm
Usage
as_cf(x, n = 10)
Arguments
x |
real number to be approximated in continued fraction form |
n |
Number of partial denominators to evaluate; see Notes |
Note
Has difficulties with rational values as expected
Author(s)
Robin K. S. Hankin
See Also
Examples
phi <- (sqrt(5)+1)/2
as_cf(phi,50) # loses it after about 38 iterations ... not bad ...
as_cf(pi) # looks about right
as_cf(exp(1),20)
f <- function(x){CF(as_cf(x,30),TRUE) - x}
x <- runif(40)
plot(sapply(x,f))
Partial convergents of continued fractions
Description
Partial convergents of continued fractions or generalized continued fractions
Usage
convergents(a)
gconvergents(a,b, b0 = 0)
Arguments
a, b |
In function |
b0 |
The floor of the fraction |
Details
Function convergents() returns partial convergents of the continued fraction
a_0+
\frac{1}{a_1+
\frac{1}{a_2+
\frac{1}{a_3+
\frac{1}{a_4+
\frac{1}{a_5+\ddots
}}}}}
where a = a_0,a_1,a_2,\ldots (note the
off-by-one issue).
Function gconvergents() returns partial convergents of the continued fraction
b_0+
\frac{a_1}{b_1+
\frac{a_2}{b_2+
\frac{a_3}{b_3+
\frac{a_4}{b_4+
\frac{a_5}{b_5+\ddots
}}}}}
where a = a_1,a_2,\ldots
Value
Returns a list of two elements, A for the numerators and
B for the denominators
Note
This classical algorithm generates very large partial numerators and denominators.
To evaluate limits, use functions CF() or GCF().
Author(s)
Robin K. S. Hankin
References
W. H. Press, B. P. Flannery, S. A. Teukolsky, and W. T. Vetterling 1992. Numerical recipes 3rd edition: the art of scientific computing. Cambridge University Press; section 5.2 “Evaluation of continued fractions”
See Also
Examples
# Successive approximations to pi:
jj <- convergents(c(3,7,15,1,292))
jj$A/jj$B - pi # should get smaller
convergents(rep(1,10))