Evaluate continued fraction

6

1

Mathematica has the ContinuedFraction[] function to give the continued fraction expansion of a rational (or approximation of a real) number. I'm interested in the inverse: is there an efficient way to give an array as a continued fraction expansion and have Mathematica calculate the number it represents?

Cocopuffs

Posted 2012-06-23T17:39:18.453

Reputation: 163

13

There's FromContinuedFraction

– Heike – 2012-06-23T17:43:03.363

1

Every Mathematica function ref page has a "See also" section and a "More about" section. Looking there on the ContinuedFraction ref page would have given you links to FromContinuedFraction and the overview page "Continued Fractions & Rational Approximations". The tutorial, also mentioned on the same page, contains a discussion of FromContinuedFraction as well.

– Sjoerd C. de Vries – 2012-06-24T15:53:12.410

Answers

16

As Heike mentions in the comments, FromContinuedFraction[] does what you want:

FromContinuedFraction[{2, 2, 1, 7, 1, 2, 2, 16}]
6784/2891

If FromContinuedFraction[] had not been built-in, however, something like this could be done:

(* backward recursion *)
Fold[#2 + 1/#1 &, Infinity, Reverse[{2, 2, 1, 7, 1, 2, 2, 16}]]
6784/2891

or even

(* forward recursion, matrix multiplication form *)
Divide @@ Last[Fold[{{0, 1}, {1, #2}}.#1 &, {{0, 1}, {1, 0}}, {2, 2, 1, 7, 1, 2, 2, 16}]]

or equivalently

Divide @@ First[Fold[{{#2, 1}, {1, 0}}.#1 &, IdentityMatrix[2], {2, 2, 1, 7, 1, 2, 2, 16}]]

Still another alternative is

(* Lentz-Thompson-Barnett recursion *)
1/(Times @@ Flatten[Rest[FoldList[{#2 + 1/#1[[1]], 1/(#2 + #1[[2]])} &, {1, 0},
                                  {2, 2, 1, 7, 1, 2, 2, 16}]]] - 1)

J. M.'s ennui

Posted 2012-06-23T17:39:18.453

Reputation: 115 520