This is another gem from the book “Geometric Discrepancy: an Illustrated Guide” by Matousek.
A sequence is uniformly distributed over if for each interval ,
. How does a uniformly distributed sequence over the unit interval look like?
The definition of uniformly distributed sequence is a very natural generalization of the problem of approximating uniform distribution in 1-dimension with finitely many points: suppose we want to place points uniformly over , the most natural approach is to place the points equidistantly over the unit interval. For a sequence of infinitely many numbers, we would like them to sweep “uniformly” over the interval. Note that for a fixed , if we randomly pick numbers randomly and uniformly from , the percentage of points falling in the interval is .
Weyl’s criterion is the following: for each irrational number , the sequence , where is the fractional part of , denoted by ( is the fractional part of ), is uniformly distributed over .
The following is en example when the irrational number is set to .
The proof is surprisingly short:
First, one can show that for each function , where is the imaginary unit, , we have
: The nice thing is that equals to — the fractional operator disappears because is 1 for any integer . Therefore, we can compute easily, it is simply , which is nothing but a geometric sum , which is . Since is irrational, is never 1, hence the denominator is nonzero. The magnitude of is upper bounded by , as the magnitude of is 1. Therefore,
.
Since , we have
. In particular, this implies that for all trigonometric polynomials , where are real numbers, it holds that
. Using Weierstrass’ approximation theorem, one can show that the equation holds for all functions , where for and 0 otherwise, –this is precisely the requirement for being uniformly distributed over .
The Mathematica code to visualize :
pts = Table[
Map[Point[{#, 0}] &,
FractionalPart /@ N[Table[i Sqrt[5], {i, 1, j}]]] /. {x___,
y_} :> {{PointSize[Large], x}, {PointSize[Large], Red, y}} //
Graphics, {j, 1, 10}];
unitinterval =
Graphics[{Blue, Line[{{0, 0}, {1, 0}}]}, AspectRatio -> 1/4];
GraphicsGrid[Partition[Map[Show[unitinterval, #] &, pts], 2]]