Find rational approximations to the components of a real numeric object using a standard continued fraction method.

fractions(x, cycles = 10, max.denominator = 2000, ...)

Arguments

x

Any object of mode numeric. Missing values are now allowed.

cycles

The maximum number of steps to be used in the continued fraction approximation process.

max.denominator

An early termination criterion. If any partial denominator exceeds max.denominator the continued fraction stops at that point.

...

arguments passed to or from other methods.

Value

An object of class "fractions". A structure with .Data component the same as the input numeric x, but with the rational approximations held as a character vector attribute, "fracs". Arithmetic operations on "fractions" objects are possible.

Details

Each component is first expanded in a continued fraction of the form

x = floor(x) + 1/(p1 + 1/(p2 + ...)))

where p1, p2, ... are positive integers, terminating either at cycles terms or when a pj > max.denominator. The continued fraction is then re-arranged to retrieve the numerator and denominator as integers.

The numerators and denominators are then combined into a character vector that becomes the "fracs" attribute and used in printed representations.

Arithmetic operations on "fractions" objects have full floating point accuracy, but the character representation printed out may not.

References

Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. Fourth Edition. Springer.

See also

Examples

X <- matrix(runif(25), 5, 5) zapsmall(solve(X, X/5)) # print near-zeroes as zero
#> [,1] [,2] [,3] [,4] [,5] #> [1,] 0.2 0.0 0.0 0.0 0.0 #> [2,] 0.0 0.2 0.0 0.0 0.0 #> [3,] 0.0 0.0 0.2 0.0 0.0 #> [4,] 0.0 0.0 0.0 0.2 0.0 #> [5,] 0.0 0.0 0.0 0.0 0.2
fractions(solve(X, X/5))
#> [,1] [,2] [,3] [,4] [,5] #> [1,] 1/5 0 0 0 0 #> [2,] 0 1/5 0 0 0 #> [3,] 0 0 1/5 0 0 #> [4,] 0 0 0 1/5 0 #> [5,] 0 0 0 0 1/5
fractions(solve(X, X/5)) + 1
#> [,1] [,2] [,3] [,4] [,5] #> [1,] 6/5 1 1 1 1 #> [2,] 1 6/5 1 1 1 #> [3,] 1 1 6/5 1 1 #> [4,] 1 1 1 6/5 1 #> [5,] 1 1 1 1 6/5