MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to do Continued fraction of polynomials

  • To: mathgroup at smc.vnet.net
  • Subject: [mg53111] Re: [mg53052] How to do Continued fraction of polynomials
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Thu, 23 Dec 2004 08:00:01 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

On 23 Dec 2004, at 04:33, Milind Gupta wrote:

>>>
>>> How can we do a continued fraction expansion in Mathematica.
>>>
>>>    Suppose we have
>>>              x^3 + 2x
>>>              ------------
>>>               x^2 + 1
>>>
>>> and we want:
>>>
>>>      x  +       1
>>>              -------------
>>>               x   +    1
>>>                         ----
>>>                           x
>>>
>>>      Can we get this by using some function or some technique in
>>> Mathematica??
>
>>
>> I am not quite sure whether the program below gives quite what you wan
>> tbut I am pretty sure that if it doesn't it can be adapted.
>>
>> F[f_, g_] :=
>>       If[PolynomialReduce[f, g][[1, 1]] =!= 0, PolynomialReduce[f, 
>> g][[
>>          1, 1]] + F[PolynomialReduce[f,
>>       g][[2]], g], Module[{u = g, v = f, p, ls}, ls = Flatten[Last[
>>        Reap[While[u =!= 0, p = PolynomialReduce[u, v]; u = v; v =
>> p[[2]]; Sow[
>>      p[[1]]]]]]]; 1/Fold[Function[{x, y}, y + 1/x], Infinity,
>> Reverse[ls]]]]
>>
>> In your case it gives the answer you wanted:
>>
>> F[x^3 + 2*x, x^2 + 1]
>>
>> x + 1/(1/x + x)
>>
>> Together[%]
>>
>> (2*x + x^3)/(1 + x^2)
>>
>> here is another case
>>
>> F[x^3 + 2*x^2 + x + 2,
>>    x^4 + x^3 + 3*x - 1]
>>
>> 1/(-1 + x +
>>     1/(x + 2/(1 + 2*x + x^2)))
>>
>> Together[%]
>>
>> (2 + x + 2*x^2 + x^3)/
>>    (-1 + 3*x + x^3 + x^4)
>>
>> It's best to look at it in "TraditionalForm". Unless you use Hold or
>> HoldForm in the program it is difficult to insure that Matheamtica 
>> will
>> not sometimes convert it to a slightly different form. One can change
>> the program just to give a list of terms of the continued fraction but
>> I shall leave it at this.
>>
>> P.S. You need at least Matheamtica 5.0 to use Sow and Reap. If you 
>> have
>> an earlier version of Mathematica you need to change the program
>> slightly.
>>
>>
>
> When I input this:
>
> expr =    1. + 2. x + 2. x^2 +  2. x^3
>             -----------------------------------------
>                1. + 2. x + 2. x^2
>
>    and then I do F[Numerator[expr], Denominator[expr]] I get error
> like Recursion Limit exceeded and stuff.  But when I make expr as:
>
>
> expr =    1 + 2 x + 2 x^2 +  2 x^3
>             -----------------------------------------
>                1 + 2 x + 2 x^2
>
> This works now perfectly. expr is  the result from my previous steps.
> Is there any way I can make the coefficients of expr as integers
> automatically to use with F ???
>
> Milind
>

Yes, use Rationalize.


Rationalize[(1. + 2.*x + 2.*x^2 + 2.*x^3)/
    (1. + 2.*x + 2.*x^2)]


(1 + 2*x + 2*x^2 + 2*x^3)/(1 + 2*x + 2*x^2)


You should remeber that in Mathematica numbers like 0.1 are not the 
same as 1/10. They are not decimals but "approximate numbers" and they 
have their own arithmetic that sometimes gives strange results. You 
should avoid them in symbolic algebra because they will prevent various 
simplifications, like cancellation of common factors.

Andrzej KOzlowski


  • Prev by Date: Re: Mathematica is destroying my sanity....
  • Next by Date: Re: Re: finite domains
  • Previous by thread: Re: How to do Continued fraction of polynomials
  • Next by thread: Sequential evaluation of lists