________________________________________________________________________________
Inhalt....: Berechnung von Nullstellen
Kategorie.: Handwerkskasten
Mathematik: Analysis
MuPAD.....: 3.1.0
Datum.....: 2002-02-06
Autoren...: Kai Gehrs <acrowley@mupad.de>
Funktionen: solve, numeric::solve, normal, assume, Type::Real, ->
________________________________________________________________________________
Elementare MuPAD-Funktionen:
Berechnung von Nullstellen
Die Berechnung von Nullstellen spielt u.a. im Rahmen von Funktionsdiskussionen eine wichtige
Rolle. Wir wollen lernen, wie wir mit MuPAD Nullstellen von Funktionen bestimmen können.
Generell bietet MuPAD im wesentlichen zwei Möglichkeiten, die
Nullstellen einer Funktion zu berechnen.
(1) exakte Nullstellenbestimmung mit Hilfe der Funktion solve
(2) numerische Bestimmung von Nullstellen mittels numeric::solve
Die Funktion solve wollen wir als erstes kennenlernen. Wir definieren
uns einige Funktionen, deren Nullstellen wir bestimmen möchten:
f_1:= x -> x^2 - 5*x + 5;
f_2:= x -> x^4 - 5*x^2 + 4;
f_3:= x -> x^2 - 1;
f_4:= x -> x^2 + 1;
f_5:= x -> x^4 - 11*x^3 + 41*x^2 - 61*x + 30
![]()
![]()
![]()
![]()
![]()
Da wir ausschließlich reelle Zahlen betrachten, teilen wir MuPAD mit,
dass x stets eine reelle Zahl ist:
assume(x, Type::Real):
Die Berechnung der Nullstellen ist spielerisch leicht. Die Funktion solve
erhält stets zwei Argumente:
1. Argument: Die Funktion, deren Nullstellen
wir berechnen möchten, gleich 0 gesetzt
2. Argument: Die Funktionsvariable, nach der
die Gleichung aufgelöst werden soll
d.h. also ein Aufruf der Form solve( Funktion = 0, Funktionsvariable ).
Als Rückgabewert liefert uns die Funktion solve eine Menge der
Nullstellen. Will man nachträglich mit den berechneten Nullstellen
weiterrechnen, so ist es sinnvoll, den Rückgabewert der Funktion
an eine Variable zuzuweisen.
Dies wollen wir im folgenden an unseren Beispielfunktionen erproben.
Nullstellen_f_1:= solve(f_1(x) = 0, x)
![]()
Auf die Elemente dieser Menge greifen wir mit dem Indexoperator [ ]
zu:
x_1:= Nullstellen_f_1[1];
x_2:= Nullstellen_f_1[2]
![]()
![]()
Wir machen die Probe. Hier ist die Anwendung der Funktion normal
erforderlich, die Ausdrücke mit Wurzeln vereinfacht.
normal(f_1(x_1));
normal(f_1(x_2))
![]()
![]()
Auf dieselbe Weise können wir die Nullstellen der anderen Beispielfunktionen
berechnen:
solve(f_2(x) = 0, x);
solve(f_3(x) = 0, x);
solve(f_4(x) = 0, x);
solve(f_5(x) = 0, x)
![]()
![]()
![]()
![]()
Wie wir sehen, besitzt die Funktion f_4 keine reellen Nullstellen.
Mit Hilfe von solve können auch die Nullstellen komplizierterer
Funktionen bestimmt werden:
solve(sin(x) * cos(x) = 0, x)
![]()
Die Nullstellenmenge ist nicht endlich - sie wird von MuPAD automatisch
in Abhängigkeit eines Parameters dargestellt, der alle ganzen Zahlen
durchläuft.
Probleme können sich dann ergeben, wenn wir versuchen, die Nullstellen
einer Funktion zu berechnen, für die es keine exakte, geschlossene
Lösungsformel gibt.
Polynomial Gleichungen vom Grad 5 oder größer können u.U. nicht exakt
gelöst werden. Wir betrachten dazu einmal die Funktion
f_6:= x -> x^5 - 2*x^2 + x + 2
![]()
Hier liefert solve ein auf den ersten Blick obskures Ergebnis
solve(f_6(x) = 0, x)
![]()
Der Ausdruck RootOf(...) zeigt an, dass dieses Polynom nicht weiter
in Faktoren aufgespalten werden konnte.
Hier können wir die Nullstellen nicht exakt berechnen - wir müssen daher
auf numerische Verfahren zurückgreifen.
Einen Ausweg liefert die uns die Funktion numeric::solve.
Die Funktion numeric::solve erhält stets zwei Argumente:
1. Argument: Die Funktion, deren Nullstellen wir
wir berechnen möchten, gleich 0 gesetzt
2. Argument: Die Funktionsvariable, nach der
die Gleichung aufgelöst werden soll
d.h. also ein Aufruf ist immer von der Form
numeric::solve( Funktion = 0, Funktionsvariable ).
Als Rückgabewert liefert uns die Funktion numeric::solve eine Menge
der Nullstellen.
Die Aufrufsyntax ist also exakt die gleiche, wie wenn wir die Funktion
solve verwenden.
numeric::solve(f_6(x)=0, x) intersect R_
![]()
Dabei sind wir hier jedoch dazu gezwungen, mittels des Befehls intersect R_,
die reellen Nullstellen aus der Lösungsmenge zu selektieren. Wollen
wir auch die komplexen Nullstellen erhalten, so kann dieser Teil der
obigen Befehlszeile entfallen.
________________________________________________________________________________
Aufgaben:
1. Berechnen Sie die Nullstellen der folgenden Funktionen mit Hilfe der Funktion solve:
(a) f:= 4*x^2 - 2*x
(b) g:= 6*x^3 - 3*x
(c) h:= cos(x) * tan(x)
2. Berechnen Sie die reellen Nullstellen der folgenden Funktionen mit Hilfe der Funktion numeric::solve:
(a) f:= 3*exp(x)^2 - 1
(b) g:= x^7 + x - 2
(c) h:= x^4 - x - 14
Welche der Nullstellen lassen sich auch mit Hilfe von solve finden?
_______________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de
_______________________________________________________________________________