Hartmut Wolf schrieb:
>
> Lars Denkewitz schrieb:
>
> Ich hätte gerne gewußt, ob es in Mathematica 3.0 möglich ist, stückweise
> stetige Funktionen so zu zeichnen, daß bei auftretenden Sprüngen die
> beiden betreffenden Funktionswerte nicht verbunden werden. Wenn die
> Funktionen als einzeln definierte Funktionen vorliegen, ist dies ja
> durch Zusammensetzen (Show[]) leicht möglich. Wenn ich aber z.B. die
> UnitStep[]-Funktion mit Plot[] zeichne, wird der charakteristische
> Sprung als Linie dargestellt, was ja so nicht stimmt. Kann man das
> irgendwie verhindern?
>
> Lieber Lars,
>
> hier ein (älterer) Vorschlag.
>
> In[1]:= Unprotect[Plot]
>
> In[2]:=
> Plot[f_, {var_Symbol, min_, singularit\[ADoubleDot]ten__, max_},
> opts___] :=
> Module[{ranges = (Prepend[#1, var] & ) /@
> Partition[{min, singularit\[ADoubleDot]ten, max}, 2, 1], g},
> g = (Plot[f, #1, DisplayFunction -> Identity, opts] & ) /@ ranges;
> Show[g, DisplayFunction -> $DisplayFunction]]
>
> In[3]:= Protect[Plot]
>
> In[4]:= Plot[1/((1 - x)*(2 - x)), {x, 0, 1, 2, 3},
> PlotRange -> {All, {-50, 50}}]
>
> In[7]:= Plot[UnitStep[x - 1]*UnitStep[2 - x], {x, 0, 1, 2, 3},
> PlotStyle -> {Thickness[0.02]}]
Gerade beim Lesen in meinem "Sent"-Ordner sehe ich noch eine Feinheit:
wenn man schon Plot unprotected, dann bitte richtig!
In[22]:= Unprotect[Plot]
In[23]:=
Plot[f_, {var_Symbol, min_, singularit\[ADoubleDot]ten__, max_},
opts___] :=
Module[{ranges = (Prepend[#1, var] & ) /@
Partition[{min, singularit\[ADoubleDot]ten, max}, 2, 1], g, df},
g = (Plot[f, #1, DisplayFunction -> Identity, opts] & ) /@ ranges;
df = DisplayFunction /. Flatten[{opts}] /.
Options[Plot, DisplayFunction];
Show[g, DisplayFunction -> df]]
In[24]:= Protect[Plot]
Damit kann man Plot eine andere Display-Funktion mitgeben, ohne daß
Teufel komm raus nach $DisplayFunction gedruckt wird:
In[31]:=
Plot[ UnitStep[x - 1]UnitStep[2 - x], {x, 0, 1, 2, 3},
PlotStyle -> {Thickness[0.02], Hue[0., 1., 0.7]},
DisplayFunction -> ((Print["Hallo!"]; $DisplayFunction[#]) &)]
>From In[31]:=
"Hallo!"
>From In[31]:=
GraphicsData["PostScript", "\<\
%!
%%Creator: Mathematica
.... hier der PostScript Code ....
% End of Graphics
MathPictureEnd
\
\>"]
Out[31]= Graphics[]
Das "Hallo!" ist also angekommen (und zwar nur einmal).
Gruß, Hartmut