This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)

 Documentation /  Mathematica /  Das Mathematica Buch /  Höhere Mathematik in Mathematica /  Numerische Operationen mit Funktionen /

Die Ungewißheiten numerischer MathematikNumerische Evaluierung von Summen und Produkten

3.9.3 Numerische Integration

Numerische Integrationsfunktionen

Dies ermittelt eine numerische Annäherung an das Integral .

In[1]:= NIntegrate[Exp[-x^3], {x, 0, Infinity}]

Out[1]=

Hier ist der numerische Wert des Doppelintegrals .

In[2]:= NIntegrate[x^2 + y^2, {x, -1, 1}, {y, -1, 1}]

Out[2]=

Eine wichtige Eigenschaft von NIntegrate ist die Fähigkeit, mit Funktionen umgehen zu können, die an bekannten Stellen „explodieren". NIntegrate achtet automatisch auf derartige Probleme an den Endpunkten des Integrationsgebietes.

Die Funktion explodiert bei , aber NIntegrate kann dennoch den korrekten Wert des Integrals ermitteln.

In[3]:= NIntegrate[1/Sqrt[x], {x, 0, 1}]

Out[3]=

Mathematica kann das Integral von exakt ermitteln.

In[4]:= Integrate[1/Sqrt[x], {x, 0, 1}]

Out[4]=

NIntegrate bemerkt, daß die Singularität in bei nicht integrierbar ist.

In[5]:= NIntegrate[1/x, {x, 0, 1}]

Out[5]=

NIntegrate sucht nicht automatisch nach Singularitäten, außer an den Endpunkten eines Integrationsgebietes. Wenn andere Singularitäten vorhanden sind, wird NIntegrate möglicherweise nicht die richtige Antwort für das Integral liefern. Trotzdem wird NIntegrate bei der Befolgung der adaptiven Verfahren häufig das Vorhandensein von potentiell singulärem Verhalten entdecken und deswegen warnen.

NIntegrate berücksichtigt die Singularität von in der Mitte des Integrationsgebietes nicht. Es gibt jedoch eine Warnung vor einem möglichen Problem aus. In diesem Fall liegt das Endergebnis numerisch sehr nahe bei der korrekten Antwort.

In[6]:= NIntegrate[1/Sqrt[Abs[x]], {x, -1, 2}]

Out[6]=

Wenn Sie wissen, daß Ihr Integrand Singularitäten an bestimmten Punkten hat, dann können Sie NIntegrate explizit anweisen, diese zu bearbeiten. NIntegrate[ausdr, x, xmin, , , ... , xmax] integriert ausdr von xmin bis xmax und sucht nach möglichen Singularitäten an jedem Zwischenpunkt .

Dies liefert wiederum das Integral , nun wird jedoch explizit die Singularität bei bearbeitet.

In[7]:= NIntegrate[1/Sqrt[Abs[x]], {x, -1, 0, 2}]

Out[7]=

Sie können auch die Liste der Zwischenpunkte in NIntegrate verwenden, um einen Integrationsweg in der komplexen Ebene zu spezifizieren. Es wird angenommen, daß der Weg aus einer Folge von Geradensegmenten besteht, die bei xmin beginnen, durch jeden der verlaufen und bei xmax enden.

Dies integriert längs eines geschlossenen Weges in der komplexen Ebene, der bei beginnt, durch die Punkte , 1 und geht und schließlich wieder in endet.

In[8]:= NIntegrate[1/x, {x, -1, -I, 1, I, -1}]

Out[8]=

Das Integral ergibt , wie nach dem Satz von Cauchy zu erwarten ist.

In[9]:= N[ 2 Pi I ]

Out[9]=

Es gibt eine Vielzahl von Möglichkeiten, wie Sie die Operation von NIntegrate kontrollieren können. Zuerst einmal wollen Sie eventuell die Genauigkeit der Antworten spezifizieren, die Sie zu erreichen versuchen. Wenn Sie Integrate verwenden und dann N anwenden, um numerische Ergebnisse zu erhalten, dann spezifiziert das zweite Argument, das Sie an N übergeben, die Präzision, die in den internen Berechnungen für die numerische Integration verwendet werden soll. Sie können diese Präzision auch mit der Option WorkingPrecision -> n für NIntegrate spezifizieren.

Sie sollten jedoch wissen, daß die Option WorkingPrecision nur die Präzision für interne Berechnungen von NIntegrate spezifiziert. Die Antwort, die NIntegrate gibt, wird fast immer eine geringere Präzision haben. Sie können trotzdem mit NIntegrate versuchen, eine Antwort mit einer bestimmten Präzision oder Genauigkeit zu erhalten, indem Sie die Optionen PrecisionGoal oder AccuracyGoal festlegen. Die Voreinstellung PrecisionGoal -> Automatic versucht, Antworten mit einer Präzision gleich WorkingPrecision minus 10 Stellen zu erhalten. Im allgemeinen fährt NIntegrate fort, bis es eines der beiden durch PrecisionGoal oder AccuracyGoal spezifizierten Ziele erreicht.

Dies evaluiert mit 40-stelliger Präzision in internen Berechnungen. Die angestrebte Präzision wird in diesem Fall automatisch auf 30 Stellen gesetzt.

In[10]:= NIntegrate[1/x, {x, 1, 2}, WorkingPrecision->40]

Out[10]=

Die Differenz zum exakten Ergebnis ist konsistent mit 0.

In[11]:= % - N[Log[2], 40]

Out[11]=

Das Ergebnis war tatsächlich auf ungefähr 33 Stellen korrekt.

In[12]:= Accuracy[%]

Out[12]=

Optionen für NIntegrate

Wenn NIntegrate ein numerisches Integral zu evaluieren versucht, berechnet es den Integranden für eine Punktfolge. Wenn es herausfindet, daß sich der Integrand in einem bestimmten Bereich sehr schnell ändert, dann werden in diesem Gebiet rekursiv mehr Stützstellen gewählt. Die Parameter MinRecursion und MaxRecursion spezifizieren die minimale und maximale Anzahl der Stufen der rekursiven Unterteilung, die zu verwenden sind. Durch Erhöhung des Wertes von MinRecursion wird garantiert, daß NIntegrate eine größere Anzahl Stützstellen verwendet. MaxRecursion begrenzt die Anzahl der Stützstellen, die NIntegrate jemals zu verwenden versucht. Durch Erhöhung von MinRecursion oder MaxRecursion wird NIntegrate langsamer arbeiten. SingularityDepth spezifiziert, wie viele Stufen rekursiver Unterteilungen NIntegrate versuchen soll, ehe es zu dem Schluß kommt, daß der Integrand an einem der Endpunkte „explodiert", und einen Variablenwechsel ausführt.

Mit den Voreinstellungen für alle Optionen wird NIntegrate die Spitze in nahe verpassen und für das Integral die falsche Antwort liefern.

In[13]:= NIntegrate[Exp[-x^2], {x, -1000, 1000}]

Out[13]=

Mit der Option MinRecursion->3 hat NIntegrate genügend Stützstellen, so daß es die Spitze um bemerkt. Mit der Voreinstellung von MaxRecursion kann NIntegrate jedoch nicht genügend Stützstellen verwenden, um eine akkurate Antwort erwarten zu können.

In[14]:= NIntegrate[Exp[-x^2], {x, -1000, 1000},
MinRecursion->3]

Out[14]=

Mit dieser Einstellung von MaxRecursion kann NIntegrate eine akkurate Antwort für das Integral liefern.

In[15]:= NIntegrate[Exp[-x^2], {x, -1000, 1000},
MinRecursion->3, MaxRecursion->10]

Out[15]=

Ein anderer Ansatz zur Lösung des Problems besteht darin, daß NIntegrate das Integrationsgebiet in mehrere Teile aufteilt, wobei ein kleines Teil explizit die Umgebung der Spitze abdeckt.

In[16]:= NIntegrate[Exp[-x^2], {x, -1000, -10, 10, 1000}]

Out[16]=

Bei Integralen in vielen Dimensionen kann es sehr lange dauern, bis NIntegrate eine präzise Antwort gefunden hat. Durch Setzen der Option MaxPoints können Sie NIntegrate anweisen, nur einen groben Schätzwert mitzuteilen, für den der Integrand nur eine bestimmte Anzahl mal ausgewertet wird.

Dies liefert einen Schätzwert für das Volumen der Einheitskugel in drei Dimensionen.

In[17]:= NIntegrate[If[x^2 + y^2 + z^2 < 1, 1, 0], {x, -1, 1},
{y, -1, 1}, {z, -1, 1}, MaxPoints->10000]

Out[17]=

Hier ist das präzise Ergebnis.

In[18]:= N[4/3 Pi]

Out[18]=

Die Ungewißheiten numerischer MathematikNumerische Evaluierung von Summen und Produkten