Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

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

Search the Archive

Re: Continued Fractions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg75104] Re: Continued Fractions
  • From: "Christopher J. Henrich" <chenrich at monmouth.com>
  • Date: Mon, 16 Apr 2007 20:24:46 -0400 (EDT)
  • References: <evvbni$b5u$1@smc.vnet.net>

In article <evvbni$b5u$1 at smc.vnet.net>, Wu Weidong
<ghcgwgwg at singnet.com.sg> wrote:

> Hi,
> I'm working on a function which takes 2 integer values as input, a and b an=
> d outputs a list of integers corresponding to the continued fraction repres=
> entation of the rational number a/b.
> 
> My function is as follows:
> 
> build[a_Integer,b_Integer, l_List] :== Module[{r==1,q,temp},
>  While[r!==0,
>   If[a>==b,
>    q==Quotient[a,b];
>    l==Append[l,q];
>    r == a-b*q;
>    a == r,
> 
>    temp == a;
>    a == b;
>    b == temp;
>   ];
>  ];
>  l
> ];
> 
> Essentially, if the fraction given is less than 1, the first number in the =
> list is 0. The function then proceeds to find the quotient of the numerator=
>  and denominator (and add that to the list) and the remainder. If the remai=
> nder is less than one, it takes the reciprocal and splits it into a whole-n=
> umber part plus another fraction which will be less than 1 and repeat. It s=
> tops when the remainder is 0.
> 
> When I tried to run the program, I get the following error messages:
> 
> Set::shape: Lists {} and {2} are not the same shape.
> 
> Set::setraw: Cannot assign to raw object 45.
> 
> Set::shape: Lists {} and {2} are not the same shape.
> 
> Set::setraw: Cannot assign to raw object 45.
> 
> Set::shape: Lists {} and {2} are not the same shape.
> 
> General::stop: Further output of Set::shape
>      will be suppressed during this calculation.
> 
> Set::setraw: Cannot assign to raw object 45.
> 
> General::stop: Further output of Set::setraw
>      will be suppressed during this calculation.
> 
> 
> However, if I just run the While part of the function with a==45, b==16, l=
> =={}, r==1 (so I can enter the while loop), I can find the right result (2,=
> 1,4,3), so I believe my algorithm should be correct. The errors only appear=
>  when I put the while loop under the Module structure.
> 
> What is wrong with my program?
> 
First, in transcribing your code you doubled many equals signs, making
it syntactically incorrect. 

But the real problem is that Mathematica passes arguments by vale. If
you try to evaluate build[45,17], then when the Mathematica interpreter
sees the statement "a = r", it tries to execute "45 = 1", aassuming
that r has the value 1 at this point. Thus the error message about "taw
object 45."

If you want to code in this style, you need to define local variables
within the Module expression, and initialize them with the values of
"a" and "b".

-- 
Chris Henrich
http://www.mathinteract.com
God just doesn't fit inside a single religion.


  • Prev by Date: Re: differentiate a function of a function
  • Next by Date: Re: LegendreP Evaluation Mystery
  • Previous by thread: Re: Continued Fractions
  • Next by thread: Re: Continued Fractions