C.3. Die Graphenoptimierung

Sehr viel Wert wurde auf die korrekte Darstellung der Graphen von unstetigen Funktionen und von Funktionen mit Extrema gelegt.

Funktionsweise

Die Graphenoptimierung ist ein Kompromiss zwischen Schnelligkeit und Genauigkeit des Graphen-Zeichnens.

Das Zeichnen eines Graphen geschieht in FunkyPlot 1.1 in zwei Phasen:

  1. Phase: Naives Aufstellen einer Wertetabelle.

    Hier wird für jeden Bildpunkt/jedes Pixel der entsprechende y-Wert/Funktionswert berechnet, und alle derart gewonnenen Punkte mit einer Linie verbunden.

  2. Phase: Optimierung der Wertetabelle.

    1. Lokale Maxima und Minima

      Es wird versucht, lokale Maxima und Minima zu ermitteln und dann ggf. einzelne y-Werte in Richtung auf die Maxima/Minima zu verschieben.

      Die Funktion y=2sin(40x) ohne (links) und mit (rechts) Graphenoptimierung.

    2. Sprungstellen

      Hier wird die ohne Optimierung falsch dargestellte senkrechte Verbindungslinie entfernt.

      Die Funktion y=int(x) ohne (links) und mit (rechts) Graphenoptimierung.

    3. Polstellen

      Auch hier entsteht ohne Optimierung ein senkrechter Strich, der bei eingeschalteter Optimierung entfernt wird. Außerdem versucht FunkyPlot 1.1, die Graphenäste links und rechts der Polstelle bis unendlich zu zeichnen.

      Die Funktion y=1/(x-1) ohne (links) und mit (rechts) Graphenoptimierung.

Bei ausgeschalteter Graphenoptimierung wird die 2. Phase einfach weggelassen und nur die 1. Phase durchgeführt.

C.3.1. Das Bestreben, den Graphen durch die Extrempunkte zu zeichnen

Das Problem war hier, dass bei einer naiven Aufstellung einer Wertetabelle (z.B. mit Stützstellen festen Abstandes) die "Höhen" und "Tiefen" der Extrempunkte nicht vollständig erreicht werden. Deutlich wird das in folgender Abbildung:

Hier sieht man sehr schön, dass die Maxima unterschiedliche Höhen haben, obwohl diese doch gleich sein müßten. Die Ursache dafür ist einfach, dass das Raster der Stützstellen die Stelle des Extrempunktes nicht exakt getroffen hat, sondern zwei Stützstellen links und rechts des Extrempunktes. Da diese tiefer bzw. höher liegen, entsteht der Eindruck unterschiedlich hoher Extrempunkte.

FunkyPlot 1.1 wirkt diesem Problem folgendermaßen entgegen: Es durchsucht die naive Wertetabelle nach allen Tripeln von Funktionswerten, bei denen der mittlere höher bzw. tiefer als seine Nachbarn liegt. Dieser Funktionswert ist ein Kandidat für einen Extrempunkt, und in einer eigenen Iteration wird nun versucht, den Funktionswert weiter in Richtung des Extremums zu verbessern. Der Vorteil dieser Vorgehensweise ist, dass die "teuere" Iteration zur Verbesserung eines Extremwertes nur dann benutzt wird, wenn es sich um einen Extrempunkt-Kandidaten handelt.

Das Ergebnis ist folgendes:

Alle Extrempunkte liegen nun auf gleicher Höhe. Selbstverständlich werden so auch nicht immer alle Extrempunkte erkannt und verbessert, mit den "üblichen" Funktionen werden aber passable Ergebnisse erzielt.

C.3.2. Das Bestreben, Sprungstellen des Graphen ohne senkrechte Verbindungslinie zu zeichnen

C.3.3. Das Bestreben, Polstellen des Graphen ohne senkrechte Verbindungslinie zu zeichnen