# How do I plot a Dirichlet function?

How to plot this function in Mathematica?

• Look at Rationalize – Sumit Dec 19 '17 at 14:41
• I think this is impossible. The Dirichlet function is discontinuous at each point of $\mathbb R$. – user64494 Dec 19 '17 at 18:14
• @MariuszIwaniuk Or, simpler, Plot[{0, 1}, {x, -1, 2}, PlotStyle -> Black, PlotRange -> {Automatic, {-1/2, 3/2}}]. Anyway, you can't really plot Dirichlet function... – anderstood Jan 18 '18 at 16:15
• A more interesting question would be to plot Thomae's function. – Rahul Jan 19 '18 at 9:05
• @Rahul . You can download MMA notebook in Thomae's function click here: mathworld.wolfram.com/notebooks/NumberTheory/… – Mariusz Iwaniuk Jan 19 '18 at 16:47

dirichlet[x_] := If[IntegerQ[Numerator[Rationalize[x]]], 1, 0]

dirichlet[1.24898]
dirichlet[Pi]


1

0

• How about dirichlet[N[Sqrt[Pi/Exp[1]], 10]]? – user64494 Dec 19 '17 at 18:10
• @user64494 gives me 0 in MMA11.1 - is that wrong? – Sumit Dec 20 '17 at 7:16
• Where is the plot? :) – Kuba Jan 19 '18 at 8:14
• @Sumit: Up to the definition, it should result 1. – user64494 Jan 19 '18 at 8:19
• @Kuba, I don't have a rational answer for that. – Sumit Jan 19 '18 at 9:00

Of course you can't really plot this function, since it is discontinuous everywhere. But you can fake it:

d[x_] := Piecewise[{{1, Abs[Rationalize[x, 0.01] - x] > 0.004}, {0, True}}];
DiscretePlot[d[x], {x, 0, 1, 0.001}]


By playing with the second argument of the Rationalize and the value in the inequality, you can change the detailed appearnence of the function.

Faked by ListLinePlot and improved code borrowed from bill s

d[x_] := Piecewise[{{1, Abs[Rationalize[x, 0.0003] - x] > 0.0002}, {0,True}}];
ListLinePlot[Table[{x, d[x]}, {x, -1/2, 1, 0.0001}],
MeshStyle -> PointSize[Small], Mesh -> {Range[-1/2, 1, 0.0001]},
MeshFunctions -> {#1 &}, MeshShading -> {White, White},
PlotRange -> {Automatic, {-1/2, 3/2}},
PlotLegends -> {"Dirichlet function"}]