DMUG-Archiv 2000

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Plot[] - Sprünge nicht als Line darstellen?

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


Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html