5
$\begingroup$

Roth's theorem. For all algebraic irrational $\alpha$ $$\displaystyle \left \lvert \alpha - \frac{p}{q} \right \rvert < \frac{1}{q^{2 + \epsilon}}$$ with $\epsilon>0$, has finitely many solutions.

How to find all solution for $\alpha=\sqrt{2}$ and $\epsilon=1$

I tried:

FindInstance[{Abs[Sqrt[2] - p/q] < 1/q^3, GCD[p, q] == 1}, {p,q}, Integers]

but there is an error message

enter image description here

$\endgroup$
5
$\begingroup$

FindInstance does not handle GCD so well so leave it out and try:

FindInstance[{Abs[Sqrt[2] - p/q] < 1/q^3}, {p, q}, Integers, 5]


(*{{p -> 1, q -> 1}, {p -> 2, q -> 1}, {p -> 3, q -> 2}}*)

3 answers are better than none. You can always do some post processing cleanup to weed out bad solutions but in this case there are none.

$\endgroup$
  • $\begingroup$ Hi;To the downvoter, what did I do wrong? I can try to fix it $\endgroup$ – bobbym Mar 11 '17 at 19:29
5
$\begingroup$

Consider the convergents and semiconvergents of your irrational number.

I have some bulky code to calculate semi-convergents.

SemiConvergents[v_, {1}] := Join[{0}, Convergents[v, 1]]
SemiConvergents[v_, 1] := Join[{0}, Convergents[v, 1]]

SemiConvergents[v_, {n_?OddQ}] :=
   Block[{a = Last[ContinuedFraction[v, n]], 
      c = Take[Convergents[v, n - 1], -2]},
      (Numerator[c[[1]]] + Range[0, a]*Numerator[c[[2]]])/
      (Denominator[c[[1]]] + Range[0, a]*Denominator[c[[2]]])
]

SemiConvergents[v_, {2}] := 
   Block[{a = ContinuedFraction[v, 2]}, Join[{Infinity}, a[[1]] + 1/Range[a[[2]]]]]
SemiConvergents[v_, 2] := 
   Block[{a = ContinuedFraction[v, 2]}, Join[{Infinity}, a[[1]] + 1/Range[a[[2]]]]]

SemiConvergents[v_, {n_?EvenQ}] :=
   Block[{a = Last[ContinuedFraction[v, n]], 
      c = Take[Convergents[v, n - 1], -2]},
      (Numerator[c[[1]]] + Range[0, a]*Numerator[c[[2]]])/
      (Denominator[c[[1]]] + Range[0, a]*Denominator[c[[2]]])
]

I use the following to calculate rational approximations to irrational a, subject to exponent 2+eps.

RothAttempt[a_, eps_] :=
   Block[{r, kmax = 10},
      r = DeleteDuplicates[
             Flatten[Table[SemiConvergents[a, {k}], {k, 1, kmax}]]];
      Pick[r, Thread[Abs[a - r] < 1/Denominator[r]^(2 + eps)]]
]

I do not know how to chose kmax such that all solutions are found...

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.