# Plot a function involving lowest terms

Hi,

How do I use sage to plot the following function?

$$f(x)= \left[ \begin {array} {cc} 0, & x \text{ irrational, } 0 \lt x \lt 1 \\ \frac{1}{q},& x = \frac{p}{q} \text{ in lowest term, } 0 < x < 1.\end{array} \right.$$

I actually wrote a function that would generate the following sequence: $$\frac{1}{n}, \dots , \frac{n-1}{n}$$ for a given $n$.

Then I created a list of lists that contains the above sequence for each n. After flattening that list, I call the set function on it to remove duplicates. Then I use that to creat a list (x,y) tuple to plot the function using scatter plot.

I was wondering if there is a simpler way of doing this.

edit retag close merge delete

Sort by » oldest newest most voted

sage: npoints = 10000
sage: f = lambda x: 1/(RR(x).nearby_rational(max_error=1/npoints).denominator())
sage: plot(f, (x,0,1), plot_points=npoints)


(the picture with npoints = 100 look quite urbanized)

To understand what the .nearby_rational() method does on elements of RR, you can do:

sage: a = 0.1
sage: a.nearby_rational?


From a matematical point of view, you might be interested by the "SternBrocot tree" and "Farey sequences".

more

@tmonteil Thank you for your reply. I have reworded my question make my end objective clear.