4
$\begingroup$

From my user point view this looks like bug. But I am not an expert.

f[x_?NumericQ]:=Piecewise[{{1,x==1},{0,True}}];
Plot[f[x],{x,0,1}]

Does not show 1 at x=1

Mathematica graphics

If I just type

 Plot[Piecewise[{{1, x == 1}, {0, True}}], {x, 0, 1}]
 Plot[Piecewise[{{1, x == 1}, {0, 0 <= x < 1}}], {x, 0, 1.5}]
 Plot[Piecewise[{{1, x == 1}, {0, True}}], {x, 0, 1.5}]

All give same result. x==1 does not show.

Clearly the sampling of the function "missed" the point x=1. The question is, should it?

Here is the same thing in Maple. Maple piecewise is just opposite of Mathematica. Instead of value,condition it uses condition,value and does not use {} to group them (which can be confusing first time using it)

f:=x->piecewise(x = 1, 1, true,0);
plot(f(x),x=0..1)

Mathematica graphics

How to make Plot Behave as Maple in this example? Did I do something wrong in my Mathematica code? Can Mathemartica's plot result be considered correct?

Mathematica 12.0 on windows 10.

$\endgroup$
5
$\begingroup$

You can use ParametricPlot to show the jumps at the boundaries of the domain without having to extend the domain.

If jumps occur only at the boundaries using ParametricPlot solves the issue:

ClearAll[f1, f2]
f1[x_?NumericQ] := Piecewise[{{.8, x == 0}, {1, x == 1}, {1/2, True}}]
ParametricPlot[{x, f1[x]}, {x, 0, 1}, 
 PlotRange -> {{-.5, 1}, {0, 1}}, AxesOrigin -> {-.5, 0}]

enter image description here

If there are jumps in the interior of the domain we need Ulrich's method using PlotPoints to force ParametricPlot to sample the specified points:

f2[x_?NumericQ] := 
 Piecewise[{{.8, x == 0}, {1, x == 1}, {.2, x == .8}, {1/2, True}}]
ParametricPlot[{x, f2[x]}, {x, 0, 1}, 
 PlotRange -> {{-.5, 1}, {0, 1}}, AxesOrigin -> {-.5, 0}]

same picture as above

With ParametricPlot, you don't have to include the boundaries in the list of jumps, that is, you can use PlotPoints -> {Automatic, {.8}} instead of PlotPoints -> {Automatic, {0,.8,1}}:

ParametricPlot[{x, f2[x]}, {x, 0, 1}, 
 PlotPoints -> {Automatic, {.8}}, 
 PlotRange -> {{-.5, 1}, {0, 1}}, AxesOrigin -> {-.5, 0}]

enter image description here

$\endgroup$
5
$\begingroup$

Try

Plot[f[x], {x, 0, 1.0001}, PlotPoints -> {Automatic, { 1}}]

enter image description here

Don't know why this workaround only works for extended plotrange.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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