// Ln.java MM 2010 /** * Logarithmusfunktion f(x) = ln( x) zur Basis e, * D = ] 0, +unendlich[, W = R. */ public class Ln extends DifferenzierbareFunktion { /* ------------------------------------------------- */ // service-Methode /** * Berechnen des Funktionswertes. * @param arg Argument * @return f( arg) */ public double wert( double arg) { // Trivialfall if( arg == 0) return Double.NEGATIVE_INFINITY; if( arg == 1) return 0; // verbesserte Newtoniteration return newtonLn( arg); } /** * Berechnen einer ersten Ableitung f'(x) = 1 / x. * @param arg Argument * @return Wert der ersten Ableitung an der Stelle arg */ public double wertErsteAbleitung( double arg) { // Trivialfall if( arg == 0) return Double.POSITIVE_INFINITY; // Sonst return 1 / arg; } /* ------------------------------------------------- */ /** * Berechnen eines Funktionswertes mittels Newton * als Nullstelle der Funktion (e ^ x) - arg. * @param arg Argument * @return f( arg) */ private double newtonLn( double arg) { Exp e = new Exp(); double eps = 1e-15; int anzahl = 0; double x0 = arg; // Startwerte double y0 = e.wert( x0); do { x0 += arg / y0 - 1; y0 = e.wert( x0); anzahl++; } while(( Math.abs( y0 - arg) >= eps) && (anzahl < 100000)); return x0; } /* ------------------------------------------------- */ // toString-Methode /** * Darstellen der Funktion. * @return Funktion in linearer Schreibweise */ public String toString() { return "ln( x)"; } }