Funktionsgraphen-Plotter
Mit diesem Java-Applet können Funktionsgraphen gezeichnet und
Wertetabellen erstellt werden.
In das Textfenster muß dazu der gewünschte Funktionsterm mit x als Variable
eingegeben werden. Der Darstellungsbereich kann frei gewählt werden.
Zur Syntax siehe unten. Dort finden sich auch eine
Aufstellung der unterstützten Funktionen und Erläuterungen zur
Nullstellenapproximation
und zur Erzeugung von Kurvenscharen.
Zoomen und Verschieben mit der Maus
Der Ausschnitt kann bei gedrückter Maustaste verschoben sowie durch Klicken
herangezoomt und herausgezoomt werden. Zum Heranzoomen (Vergrößern, d.h. kleinerer Wertebereich
ist sichtbar)
muß beim Klicken die Umschalttaste gedrückt sein, zum Herauszoomen (Verkleinern,
d.h. größerer Wertebereich ist sichtbar) beim Klicken die Strg-Taste bzw. Cntr-Taste.
Beim Zoomen und Ziehen wird nur jeweils der letzte Plot automatisch neugezeichnet;
alte Graphen und Kurvenscharen werden restauriert beim Neuzeichnen nach Klick auf
eine der Schaltflächen [Graph zeichnen!] oder [Anwenden!]. Bei letzterer wird der
Bereich auf die Angaben in den Eingabefeldern zurückgesetzt, die beim Ziehen und Zoomen
nicht automatisch angeglichen werden.
Klicken Sie hier, um die Eingabefelder für den Darstellungsbereich an das aktuelle
Plotfenster anzupassen und das Fenster gegebenenfalls mit allen Graphen, die vor dem
Verschieben/Zoomen sichtbar waren, wiederherzustellen.
Die Funktionsterme können weitgehend nach den normalen Schreibgewohnheiten angegeben
werden. Die vereinfachte Multiplikationsschreibweise (ohne Punkt, z.B.: 2x+1 oder
(x-2)(4+2x)) wird verstanden. Als Multiplikationszeichen wird ansonsten
der Stern * verwendet (Bsp.: (x-2)*(4+2*x)).
Potenzen, wie x², werden mit dem Zeichen ^ geschrieben
(auf der Tastatur links neben der 1), z.B.: x^2.
Wichtiger Hinweis: Bei einigen Netscape-Versionen stürzt der Browser aus
mir unklaren Gründen (offenbar im Zusammenhang mit der Tastenanschlagüberwachung im Eingabefeld)
nach Betätigen der ^-Taste ab. Daher kann ersatzweise anstelle von
x^2 auch x'2 oder nur x2 eingegeben werden.
Das Zeichen ^ wird dann intern ergänzt.
Das Divisionszeichen ist / .
Es steht außerdem mit dem Prozentzeichen % ein Operator zur Verfügung,
der den Rest bei einer Division ausgibt: 35%11 ergibt beispielsweise 2.
Java unterstützt diese Modulodivision
auch für Kommazahlen.
Es werden sowohl Dezimalkommas, pardon:
-kommata, (3,1415926)
als auch -punkte (1.618)
verstanden; die Standardeingabeweise ist jedoch, wie im Deutschen und allgemein auf meinen Seiten
üblich, das Komma. (Auch wenn's eine Menge programmiertechnische Arbeit macht...)
(Sonderbar übrigens, daß das Dezimalkomma nicht auch im Rahmen der Anglisierung ("Reform")
der Rechtschreibung "modernisiert" bzw. den heutigen "Lesegewohnheiten"
angepassssssssst wurde!)
Der Plotter beachtet die normalen Rechenregeln ("Punkt- vor Strichrechnung" und dergleichen)
und versteht auch verschachtelte Klammerung.
Argumente von Funktionen müssen stets in runden Klammern geschrieben werden,
z.B.: sqr(sin(x)+2).
Diese Version unterstützt folgende Funktionen:
(Auf einen Funktionsnamen klicken, um den zugehörigen Graphen zu sehen!)
- sqr oder sqrt: Quadratwurzel
- log: natürlicher Logarithmus
- exp: Exponentialfunktion
- abs: Absolutwert (Betragsfunktion)
- int: auf Ganzzahl abschneiden
- sin: Sinus*
- asin: Arkussinus*
- cos: Kosinus*
- acos: Arkuskosinus*
- tan: Tangens*
- atan oder atn: Arkustangens*
- cot: Kotangens*
- acot oder atn: Arkuskotangens*
- sec: Sekans*
- asec: Arkussekans*
- csc: Kosekans*
- acsc: Arkuskosekans*
|
*) Die trigonometrischen Funktionen verwenden nicht das Gradsystem, sondern das
Bogenmaßsystem, wobei 360°=2π ist.
Alle trigonometrischen Funkionen und Umkehrfunktionen
gibt es selbstverständlich J auch in der hyperbolischen
Version mit nachgestelltem h im Namen:
sinh(), asinh(),
cosh(), acosh(),
tanh(), atanh(),
coth(), acoth(),
sech(), asech(),
csch() und acsch()
|
An Konstanten sind pi (π = 3,14159265358979...),
phi (=0,618...), Phi (=1,618...),
d.h. die Verhältniszahlen des Goldenen Schnitts, und e_ (mit Unterstrich!),
die Eulersche Zahl e = 2,7182818... , implementiert.
Für e_^x, also ex,
steht natürlich auch die übliche Schreibweise der Exponentialfunktion
exp(x) zur Verfügung.
Kurvenscharen
Kurvenscharen können erzeugt werden, indem in den Funktionsterm das Zeichen @ eingebunden
wird. Dieses steht für einen Parameter, der eine Folge von Zahlen durchläuft.
Start-, Endwert und Schrittweite werden nach Betätigen der Schaltfläche in drei Eingabefenstern angegeben.
Beispiel: f(x):= (10/sqr(2*pi))*exp(-x^2/@)
(Gaußsche Normalverteilung - der Parameter regelt die Breite der Streuung),
Startwert: 1, Endwert: 5, Schrittweite: 1
Beispiel ansehen
Es werden Graphen für diese Terme gezeichnet:
(10/sqr(2*pi))*exp(-x^2/1)
(10/sqr(2*pi))*exp(-x^2/2)
(10/sqr(2*pi))*exp(-x^2/3)
(10/sqr(2*pi))*exp(-x^2/4)
(10/sqr(2*pi))*exp(-x^2/5)
Nullstellenbestimmung
Die Nullstellen werden (numerisch) ausgehend vom aktuell dargestellten Bereich gesucht.
Nacheinander werden drei Algorithmen angewendet:
- Das Newton-Verfahren, das ausgehend von einhundert gleichmäßig über den aktuellen
Darstellungsbereich verteilten Startwerten Nullstellen mittels der
Zahlenfolge xn+1 = xn – f(x)/f´(x) sucht.
Die erste Ableitung f´(x) wird durch (f(x+d)-f(x))/d
angenähert (das ist die Ableitung des Interpolationspolynoms
2. Grades durch die Stützstellen f(x-d), f(x) und f(x+d)
an der Stelle f(x)), bzw. mit
(f(x-2d) + 8·(f(x+d) - f(x-d)) - f(x+2d))/(12d), was die Ableitung des
Interpolationspolynoms 4. Grades für die fünf Stützstellen
f(x-2d), f(x-d), f(x), f(x+d)
und f(x+2d) an der Stelle f(x) ist.
d ist dabei sehr klein, d.h. d < 10-8
Es wird stets überprüft, ob f(x) nahe genug bei 0 liegt.
Bei Funktionen, die sich stark asymptotisch zur x-Achse verhalten, wie etwa
f(x):=exp(-x^2), versagt dieser Test allerdings, da alle Grenzen, so klein
sie auch gewählt werden, in jedem Fall rasch unterschritten werden, ohne daß eine
Nullstelle vorliegt.
Der Test, ob f(x)/f´(x) das Vorzeichen wechselt, liefert jedoch einen
guten Hinweis auf Konvergenz und eine echte Nullstelle.
Bei asymptotischen Verläufen wechselt weder f(x)
noch f´(x) das Vorzeichen, bei Achsendurchgängen nur f(x)
und bei Extremalwerten nur f´(x). Nur in den letzten beiden Fällen
wechselt der Quotient aus f(x) und f´(x) das Vorzeichen.
Manchmal konvergiert die Newton-Folge auch bei Funktionen mit regulären
Nullstellen nicht oder nicht zuverlässig, wie bei f(x):=sin(1/x^2).
- Zusätzlich zum Newton-Verfahren wird daher noch nach x-Achsen-Durchgängen gesucht.
Dieses Verfahren versagt seinerseits bei Nullstellen,
die gleichzeitig Minumum oder Maximum sind (z.B. bei f(x):=x^2 und x=0),
wo die Funktion also nicht links und rechts der Nullstelle verschiedene Vorzeichen
annimmt.
- Das dritte Verfahren sucht nach Minima der Funktion (f(x))2. Da Quadrate
nicht negativ werden, besitzt diese Funktion an allen Nullstellen von f(x) Minima.
Dies geschieht durch einen iterativen Prozeß: Ausgehend von Werten x0
wird die Kurve stückweise durch Parabeln approximiert, die jeweils durch drei Punkte
y1=(f(x-d))2, y2=(f(x))2 und y2=(f(x+d))2
gehen, deren x-Werte den Abstand d zueinander besitzen. Den x-Wert des Extremums einer solchen Parabel liefert
x-d·½(y3-y1)/(y1-2y2+y3).
Durch die Folge xi+1=xi-d·½(y3-y1)/(y1-2y2+y3)
werden Minima von (f(x))2 und damit Nullstellen von f(x) approximiert.
Die Kombination der drei Verfahren liefert meist gute und vollständige Ergebnisse.
Der Darstellungsbereich sollte so gewählt werden, daß benachbarte Nullstellen
mehr als 5% des Bereichs auseinanderliegen.
Extremwertsuche
Die Suche nach Extremwerten verläuft entsprechend dem dritten Algorithmus der Nullstellensuche:
Bei geeigneten Startwerten x0 und Abständen d konvergiert die Folge
xi+1=xi-½·d·(f(xi+d)-f(xi-d))/(f(xi-d)-2·f(xi)+f(xi+d))
gegen ein lokales Maximum oder Minimum der Funktion f(x).
Als Startwerte werden hier einhundert x-Werte im gleichen Abstand über den momentan dargestellten
Bereich verwendet. Die Resultate liegen jedoch nicht nur im Darstellungsbereich, denn die
o.g. Folge ist ja nicht auf diesen Bereich eingeschränkt.
Es werden für jeden Startwert je 8 Iterationen mit d=0,1; d=0,01; d=0,001 usw. bis d=0,0000001 durchgeführt.
© Arndt Brünner, 3. 7. 2002
Version: 22. 4. 2005
Matheseiten-Übersicht
3D-Plotter
Rechner
Rechner für große Zahlen
Gästebuch
zurück