# How do I plot a Dirichlet function?

How to plot this function in Mathematica?

• Look at Rationalize Dec 19, 2017 at 14:41
• I think this is impossible. The Dirichlet function is discontinuous at each point of $\mathbb R$. Dec 19, 2017 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... Jan 18, 2018 at 16:15
• A more interesting question would be to plot Thomae's function.
– user484
Jan 19, 2018 at 9:05
• @Rahul . You can download MMA notebook in Thomae's function click here: mathworld.wolfram.com/notebooks/NumberTheory/… Jan 19, 2018 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]]? Dec 19, 2017 at 18:10
• @user64494 gives me 0 in MMA11.1 - is that wrong? Dec 20, 2017 at 7:16
• Where is the plot? :)
– Kuba
Jan 19, 2018 at 8:14
• @Sumit: Up to the definition, it should result 1. Jan 19, 2018 at 8:19
• @Kuba, I don't have a rational answer for that. Jan 19, 2018 at 9:00

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"}]


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 appearance of the function.