2
$\begingroup$

How to plot this function in Mathematica?

Dirichlet function

$\endgroup$
6
  • 1
    $\begingroup$ Look at Rationalize $\endgroup$
    – Sumit
    Commented Dec 19, 2017 at 14:41
  • 2
    $\begingroup$ I think this is impossible. The Dirichlet function is discontinuous at each point of $\mathbb R$. $\endgroup$
    – user64494
    Commented Dec 19, 2017 at 18:14
  • 3
    $\begingroup$ @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... $\endgroup$
    – anderstood
    Commented Jan 18, 2018 at 16:15
  • 1
    $\begingroup$ A more interesting question would be to plot Thomae's function. $\endgroup$
    – user484
    Commented Jan 19, 2018 at 9:05
  • 1
    $\begingroup$ @Rahul . You can download MMA notebook in Thomae's function click here: mathworld.wolfram.com/notebooks/NumberTheory/… $\endgroup$ Commented Jan 19, 2018 at 16:47

3 Answers 3

4
$\begingroup$
dirichlet[x_] := If[IntegerQ[Numerator[Rationalize[x]]], 1, 0]

dirichlet[1.24898]
dirichlet[Pi]

1

0

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

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

enter image description here

$\endgroup$
2
$\begingroup$

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

enter image description here

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

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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