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