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

MathGroup Archive 1993

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

Search the Archive

Rational approximations

  • To: mathgroup at yoda.physics.unc.edu
  • Subject: Rational approximations
  • From: cfw2 at po.cwru.edu (Charles F. Wells)
  • Date: Wed, 6 Jan 93 17:29:56 -0500

The following code defines a command Approximate[r,k] that
calculates the rational number that best approximates the real
number r, under the constraint that the numerator and denominator
of the rational number in lowest terms each has no more than 
k digits (base 10).  

In[1] := RelativelyPrime[{a_,b_}] := GCD[a,b] == 1;
In[2] := RelativelyPrime[a_,b_] := RelativelyPrime[{a,b}]

In[3] := Approximate[r_, digits_Integer?Positive] :=
  Module[{pairlist, lgth, bound = 10^digits-1, start, a, b, error}, 
    start = {1,1,1-r // N // Abs};
    pairlist = Select[
      Flatten[Table[{a,b},{a,1,bound},{b,1,bound}],1], 
         RelativelyPrime];
    lgth = Length[pairlist];
    Do[(a = pairlist[[k]][[1]]; b = pairlist[[k]][[2]];
        error = r- (a/b) // N // Abs;
        If[
          error < start[[3]], 
          start = {a,b,error}
          ]
          ),
      {k,1,lgth}]; 
    {start[[1]]/start[[2]], start[[3]]}
         ]
     
In[4] := Approximate[Pi,2]

          22
Out[4] = {--, 0.00126449}
          7
 

 
In[5] := Approximate[E,2]

          87
Out[5] = {--, 0.000468172}
          32
 

In[6] := Approximate[Sqrt[2],2] // Timing

                        99
Out[6] = {39.6 Second, {--, 0.0000721519}}
                        70

(This was on a 486-33 Gateway machine).  I have two questions:

(1) Is there a more functional way to define Approximate?

(2) I wrote this message using EditPro, a Windows editor I just 
bought so that I could cut and paste between Mathematica and text 
files.  The cutting and pasting worked very well, except that
I was unable to copy the "In[n]" and "Out[n]" part of the 
notebook to put them into this message, so I had to type them by 
hand.  Is there a way to get that part of the notebook to copy too?


Charles Wells
Department of Mathematics
Case Western Reserve University
10900 Euclid Avenue
Cleveland, OH 44106-7058
216-368-2893







  • Prev by Date: Cartesian Product the cute way
  • Next by Date: Re:Use of AlgebraicRules
  • Previous by thread: Cartesian Product the cute way
  • Next by thread: Re:Use of AlgebraicRules