In einer Function<Double, Double> undefinierte Rechenoperationen abfangen?

Willibergi

Mitglied
Ich programmiere grade einen Funktionsplotter und habe dazu eine Function<Double, Double>, die den ln(x) zurückliefert.
Also so:
Java:
Function<Double, Double> f = Math::log;
Hier ein Bild von meinem GUI:
fpl.PNG
Wie man sehen kann, funktioniert das im Positiven wunderbar, nur bei 0 ist eine fast vertikale Linie und im Negativen ist die Linie ganz oben.
Ich habe also bei nicht-injektiven Funktionen das Problem, dass diese für manche Werte undefiniert sind, wie z. B. der ln(x) für Werte <= 0.
Aber wie mach' ich das am Besten?
Ich meine, entweder schaffe ich es irgendwie, dass die Function dafür halt nichts zurückliefert oder ich überprüfe die Funktionen vorher auf Injektivität (wobei ich dann bei Nicht-Injektivität auch irgendwie gucken müsste, wo die Funktion definiert ist und wo nicht).

Habt ihr da eine Idee?
 
Zuletzt bearbeitet:
Also laut Dokumentation von Math.log:

public static double log(double a)
Returns the natural logarithm (base e) of a double value. Special cases:
  • If the argument is NaN or less than zero, then the result is NaN.
  • If the argument is positive infinity, then the result is positive infinity.
  • If the argument is positive zero or negative zero, then the result is negative infinity.

Die Funktion Double.isNaN() sollte dir helfen.
 
Was du Funktion nennst, ist in Wirklichkeit nur die Abbildungsvorschrift. Zu einer Funktion gehört zwingend auch ihre Definitions- und Zielmenge, andernfalls kann man von Begriffen wie der Injektivität o.Ä. gar nicht sprechen. Du scheinst auch den Begriff der Injektivität nicht verstanden zu haben. Die Logarithmusfunktion ln: ℝ+→ℝ,x↦log(x) ist sogar bijektiv.
Anhand der Abbildungsvorschrift allein zu ermitteln, wie die Definitionslücken (das ist strenggenommen auch schon wieder Blödsinn, denn wie gesagt ist die Definitionsmenge Bestandteil der Funktions-Definition) aussehen, um dort die Funktion nicht zu plotten, ist im allgemeinen schlicht unmöglich. Selbst analytisch ist das schon nicht wirklich machbar, numerisch am Computer erst recht. Ignorier das am Besten einfach, das ist verschwendete Mühe. Jemand der den Plotter benutzt, gibt entweder eine Definitionsmenge mit an, oder er muss das Ergebnis sinnvoll interpretieren.
 

Zurück
Oben