________________________________________________________________________________
Inhalt....: Berechnung von Nullstellen und Schnittpunkten mit der y-Achse
Kategorie.: Grundkurs
Mathematik: Analysis
MuPAD.....: 3.1.0
Datum.....: 2005-04-04
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: solve, numeric::solve, delete, DIGITS, Simplify, AllRealRoots
Funktionen: NoWarning
________________________________________________________________________________
Berechnung von Nullstellen und Schnittpunkten
mit der y-Achse
Dieses Arbeitsblatt ist Bestandteil des MuPAD Grundkurses.
In einer jeden klassischen Funktionsdiskussion müssen die Schnittpunkte der
zu untersuchenden Funktion mit den Koordinatenachsen bestimmt werden. Da
insbesondere die Berechnung von Nullstellen komplizierterer Funktionen oft
auf schwer zu lösende Gleichungen führt, ist es sinnvoll, gerade in diesem
Bereich ein Computeralgebra System zur Hilfe zu nehmen. Wir werden im
folgenden zwei Möglichkeiten kennenlernen, wie man die Nullstellen einer
Funktion bestimmen kann: Die erste Möglichkeit ist die exakte Berechnung
von Nullstellen mit Hilfe der MuPAD Funktion "solve" (sofern möglich), die
zweite Möglichkeit die näherungsweise (d.h. numerische) Berechnung von
Nullstellen mit Hilfe der Funktion "numeric::solve", falls keine exakte Lösung
gefunden werden kann.
Exakte Berechnung von Nullstellen
Haben wir eine Funktion f in einer Variablen, sagen wir in x, gegeben und
möchten wir ihre exakten Nullstellen mit MuPAD berechnen, so verwenden
wir die MuPAD Funktion "solve". Diese Funktion erhält stets zwei Argumente:
Das erste Argument ist eine Gleichung der Form "Funktion = 0", das zweite
Argument die Funktionsvariable (in unserem Fall also x).
Haben wir den Funktionsterm zuvor an die Variable f zugewiesen (so wie wir
es im Abschnitt über die Definition von Funktionen in MuPAD gelernt haben)
und ist die Funktionsvariable der Funktion f durch x gegeben, so berechnet
also ein Aufruf der Form "solve(f(x) = 0, x)" die Nullstellen der Funktion f.
Wir betrachten einige Beispiele:
f:= x -> (x^2 + 2*x + 1) / (x - 2)
![]()
Diese gebrochen-rationale Funktion ist uns bereits in den letzten beiden Ab-
schnitten begegnet. Ihre Nullstellen erhalten wir also wie folgt:
solve(f(x) = 0, x)
![]()
Wir betrachten noch einige weitere Beispiele:
g:= x -> x * exp(x)
![]()
solve(g(x) = 0, x)
![]()
h:= x -> x^3 - 6*x^2 + 11*x - 6
![]()
L:= solve(h(x) = 0, x)
![]()
Hinweis: Auf die Elemente einer Lösungsmenge L können Sie mit der Syntax
L[i] auf das i-te Element der Lösung zugreifen. Beispiel:
L[1];
h(L[1])
![]()
![]()
Zur Übung könnte man an dieser Stelle die Ergebnisse kontrollieren, indem man
die berechneten Werte in den entsprechenden Funktionsterm einsetzt und die
entsprechenden y-Koordinaten, die ja alle Null sein sollten, berechnet. Wir ver-
zichten an dieser Stelle darauf und verweisen auf den Abschnitt über die Berech-
nung von Funktionswerten.
Die Funktionen, deren Nullstellen wir bisher bestimmt haben, waren alle recht
einfache Funktionen und hatten nur eine endliche Anzahl von Nullstellen. Dass wir
mit MuPAD auch die Nullstellen periodischer Funktionen wie z.B. der Funktion
sin(2 * x) berechnen können, zeigt das folgende Beispiel:
k:= x -> sin(2 * x)
![]()
solve(k(x) = 0, x)
![]()
Die Menge der Nullstellen der Funktion sin(2 * x) ist nicht endlich: Sie lassen sich
jedoch in Abhängigkeit von 1/2 * PI parametrisieren. Genau dies hat MuPAD getan.
Alle ganzzahligen Vielfachen von 1/2 * PI sind Nullstellen der Funktion sin(2 * x).
Als letztes Beispiel betrachten wir eine Funktion, bei der wir, wie wir sehen werden,
die Nullstellen nicht mit Hilfe von "solve" bestimmen können:
l:= x -> -2^x + 25*x^3 + 1
![]()
solve(l(x) = 0, x)
![]()
Hier hat "solve" die Nullstellen nicht berechnen können und teilt uns dies mit, indem
als Rückgabewert genau das erscheint, was wir eingegeben hatten. Vom mathema-
tischen Standpunkt aus gesehen ist dieses Ergebnis keinesfalls verwunderlich -
Exponentialgleichungen sind gerade dann, wenn sie zusätzlich noch polynomielle
Terme (wie hier 25*x^3) enthalten, in der Regel exakt überhaupt nicht lösbar. Zur
Lösung der Gleichung sind Näherungsverfahren nötig (z.B. das Newtonverfahren,
Bisektion oder ähnliches). Natürlich wollen wir diese Näherungsverfahren nicht
explizit per Hand ausführen, sondern wir wünschen uns eine MuPAD Funktion,
die dies für uns erledigt. Diese gesuchte Funktion ist "numeric::solve".
Näherungsweise Berechnung von Nullstellen
Wann immer wir die Nullstellen einer Funktion nicht exakt mit "solve" bestimmen
können, verwenden wir die Funktion "numeric::solve". Ihre Handhabung ist ganz
analog zu der Handhabung der Funktion "solve". Im Gegensatz zu "solve", liefert
"numeric::solve" stets Näherungswerte und keine genauen Ergebnisse. So ist es
also ratsam, bei einer gegebenen Funktion zunächst zu versuchen, die Nullstellen
mit "solve" exakt zu berechnen. Führt dieser Ansatz nicht zum Ziel, so greift man auf
"numeric::solve" zurück. Es wäre ungünstig, eine Funktion sofort mit "numeric::solve"
auf Nullstellen zu untersuchen, denn auch wenn MuPAD in der Lage ist, die Nullstellen
exakt anzugeben, so liefert "numeric::solve" dennoch nur Näherungswerte für die Null-
stellen.
Standardmäßig wird in MuPAD mit 10 signifikanten Stellen gerechnet, was ungefähr
der Genauigkeit eines besseren, nicht programmierbaren, Taschenrechners entspricht.
Die Genauigkeit kann jedoch beliebig erhöht werden. Dazu werden wir unten auch ein
Beispiel betrachten.
Zuerst wollen wir aber jetzt die Nullstellen der Funktion l bestimmen, die wir oben
nicht berechnen konnten. Wir verwenden dazu die Funktion numeric::solve mit der
Zusatzoption "AllRealRoots". Diese Zusatzoption bewirkt, dass MuPAD versucht,
alle reellen Nullstellen numerisch zu berechnen. Bei extrem komplizierten Funktionen
kann es passieren, dass der numerische Lösungsalgorithmus nicht wirklich alle
Nullstellen der Funktion findet (z.B. bei Funktionen, die unendlich viele Nullstellen
haben). Aus diesem Grund gibt MuPAD bei Verwendung der Option AllRealRoots
stets eine Warnung aus, die besagt, dass u.U. nicht alle Lösungen gefunden werden.
Die internen Verfahren zur Berechung der Nullstellen sind aber so gut, dass sie
in allen Schulbeispielen problemlos verwendet werden können. Man braucht sich
also an der Warnung nicht zu stören:
numeric::solve(l(x) = 0, x, AllRealRoots)
Warning: problem in isolating search intervals. Some roots may be lost [numeric::allRealRoots]
![]()
Zur Unterdrückung der Warnung kann man die Option verwenden:
numeric::solve(l(x) = 0, x, AllRealRoots, NoWarning)
![]()
Wollen wir die Genauigkeit des Ergebnisses beeinflussen, so müssen wir den Wert
der Variablen "DIGITS" verändern. Diese Variable speichert die Anzahl der signifi-
kanten Stellen, mit denen in MuPAD gerechnet wird und ist standardmäßig mit dem
Wert 10 belegt. Wir erhöhen ihren Wert auf 20 und berechnen die Nullstellen der
Funktion l erneut:
DIGITS:= 20:
numeric::solve(l(x) = 0, x, AllRealRoots, NoWarning)
![]()
Wie wir sehen, ist das Ergebnis viel genauer. Man kann den Wert der Variablen
"DIGITS" nahezu beliebig erhöhen - die Rechengenauigkeit von MuPAD ist ledig-
lich durch Zeit, Prozessorleistung und Speicherplatz beschränkt. Um "DIGITS"
wieder auf seinen ursprünglichen Wert zurückzusetzen führen wir einfach die fol-
gende Befehlszeile in MuPAD aus:
delete DIGITS:
Weitere Anregungen, Beispiele und Erklärungen finden sich im "Handwerkskasten"
in den Notebooks "Definition von Funktionen" und "Berechnung von Nullstellen".
Da die MuPAD Funktionen "solve" und "numeric::solve" nicht nur zur Berechnung
von Nullstellen, sondern vielmehr ganz allgemein zum Lösen von Gleichungen ver-
wendet werden können, verweisen wir zusätzlich auf die Notebooks zur Berechnung
von Schnittpunkten zweier Funktionen ("Schnittpunktberechnung") und zur Lösung
von Gleichungssystemen ("Lösen von Gleichungssystemen"). Dort wird der Umgang
mit "solve" bzw. "numeric::solve" in der für den "Handwerkskasten" üblichen ausführ-
lichen Weise erläutert und anhand von Beispielen erklärt.
Bestimmung des Schnittpunktes einer Funktion mit
der y-Achse
Die Berechnung des Schnittpunktes einer Funktion mit der y-Koordinatenachse ist
denkbar einfach - wir müssen nur, sofern die betrachtete Funktion an der Stelle x = 0
definiert ist, den Wert 0 für x in den Funktionsterm einsetzen. Wie wir Funktionswerte
berechnen, haben wir bereits im vorherigen Abschnitt gelernt. Die y-Koordinaten der
Schnittpunkte mit der y-Achse der Funktionen f bis l, deren Nullstellen wir oben
bestimmt haben, lassen sich daher wie folgt berechnen:
f(0)
![]()
g(0)
![]()
h(0)
![]()
k(0)
![]()
l(0)
![]()
Sind Ergebnisse nicht soweit vereinfacht, wie man es gerne hätte, so lässt sich in
der Regel durch zusätzliche Anwendung der Funktion "simplify" auf das entsprechende
Ergebnis die gewünschte Vereinfachung erreichen.
Beispiel:
1 - sin(x)^2 - cos(x)^2
![]()
Dieser Ausdruck ist Null, was man durch Anwendung der Funktion Simplify leicht
verifizieren kann:
Simplify(1 - sin(x)^2 - cos(x)^2)
![]()
________________________________________________________________________________
Übungen:
1. Berechnen Sie die Nullstellen (wenn möglich exakt mit Hilfe von "solve", sonst näherungsweise
__mittels "numeric::solve") und die y-Koordinaten ihrer Schnittpunkte mit der y-Achse.




_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie in der Buchreihe Mathematik 1 x anders. In dieser Reihe
wird eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD gelöst. Die
Bücher können unter www.schule.mupad.de/literatur kostenfrei kopiert werden.
_______________________________________________________________________________