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

 Documentation /  Mathematica /  Das Mathematica Buch /  Eine praktische Einführung in Mathematica /  Algebraische Berechnungen /

Kontrolle der Anzeige großer AusdrückeGebrauch von Symbolen zur Etikettierung von Objekten

1.4.9 Die Grenzen von Mathematica

Mit einem einzigen Mathematica-Befehl können Sie leicht eine Berechnung verlangen, deren Durchführung viel zu kompliziert für jeden Computer ist. Sie können zum Beispiel nach Expand[(1+x)^(10^100)] fragen. Das Ergebnis dieser Berechnung hätte Terme—mehr als die Gesamtanzahl von Teilchen im Universum.

Sie sollten keine Schwierigkeiten haben, Expand[(1+x)^100] auf jedem Computer zu berechnen, auf dem Mathematica laufen kann. Aber sobald Sie den Exponenten von (1+x) vergrößern, werden die erhaltenen Ergebnisse möglicherweise zu groß werden, als daß der Speicher des Computers sie aufnehmen kann. An welchem Punkt dies genau geschieht, hängt nicht nur von der Gesamtgröße Ihres Computerspeichers ab, sondern häufig auch von solchen Details, welche anderen Aufgaben Ihr Computer gerade erfüllt, wenn Sie Ihre Berechnung durchzuführen versuchen.

Wenn Ihr Computer im Begriff ist, mitten in einer Berechnung den Speicherplatz zu erschöpfen, haben die meisten Versionen von Mathematica keine andere Wahl, als sofort abzubrechen. Infolgedessen ist es sehr wichtig, Ihre Berechnungen so zu planen, daß sie niemals mehr Speicher benötigen, als Ihrem Computer zur Verfügung steht.

Auch wenn das Ergebnis einer algebraischen Berechnung verhältnismäßig einfach ist, können die Zwischenergebnisse, die Sie im Verlauf der Berechnung erzeugen, sehr kompliziert sein. Deshalb können Zwischenteile der Berechnung, auch wenn das Endergebnis klein ist, zu groß werden, so daß Ihr Computer sie nicht mehr bearbeiten kann. Wenn dies geschieht, können Sie gewöhnlich Ihre Berechnung in Teile zerlegen und jeden Teil mit Erfolg für sich allein berechnen. Mathematicas interne Speicherverwaltung sorgt dafür, daß der zur Speicherung auftretender Zwischenausdrücke benutzte Speicherplatz sofort nach Beendigung eines Teiles einer Berechnung für neue Ausdrücke verfügbar ist.

Speicherplatz ist der verbreitetste Einschränkungsgrund in Mathematica-Berechnungen. Aber auch die Zeit kann ein Einschränkungsgrund sein. Sie werden gewöhnlich bereit sein, eine Sekunde oder sogar eine Minute auf das Ergebnis einer Berechnung zu warten. Sie werden jedoch weniger häufig darauf vorbereitet sein, eine Stunde oder einen Tag zu warten, und Sie werden wohl niemals in der Lage sein, ein Jahr zu warten.

Eine Klasse von Berechnungen, bei der die Zeit oft der Einschränkungsgrund ist, sind jene Berechnungen, die im Grunde das Durchsuchen oder Testen einer großen Anzahl von Möglichkeiten enthalten. Ganzzahlige Faktorisierung ist ein klassisches Beispiel dafür. In gewisser Weise scheint das Problem der Faktorzerlegung einer ganzen Zahl immer auf etwas Ähnliches wie das Testen einer großen Anzahl von möglichen Faktoren hinauszulaufen. Soweit zur Zeit bekannt ist, kann die Anzahl der Testfälle fast exponentiell mit der Anzahl der Ziffern der zu faktorisierenden Zahl wachsen. Deshalb kann die zum Faktorisieren von ganzen Zahlen benötigte Zeit rapide mit der Größe der Zahl ansteigen, die Sie zu faktorisieren versuchen. In der Praxis werden Sie feststellen, daß FactorInteger[k] Ihnen beinahe sofort ein Ergebnis liefert, wenn k weniger als ungefähr 25 Stellen hat. Hat k jedoch 50 Stellen, so wird FactorInteger[k] häufig eine unannehmbar lange Zeit benötigen.

Im Gebiet der Berechnungstheorie wird üblicherweise unterschieden zwischen Algorithmen, die von „polynomialer Zeit" sind, und solchen, die es nicht sind. Ein polynomialer Algorithmus kann immer in einer Zeit durchgeführt werden, die nur wie ein Polynom mit der Länge des Inputs wächst. Nichtpolynomiale Algorithmen können Zeiten benötigen, die exponentiell mit der Länge ihres Inputs anwachsen.

Der interne Code von Mathematica benutzt in der Regel polynomiale Algorithmen, wann immer dies möglich ist. Es gibt jedoch einige Probleme, für die keine polynomialen Algorithmen bekannt sind. In solchen Fällen hat Mathematica keine andere Wahl, als nichtpolynomiale Algorithmen zu verwenden, welche Zeiten benötigen können, die exponentiell mit der Länge ihres Inputs steigen. Ganzzahlige Faktorisierung ist ein solcher Fall. Andere Fälle sind die Faktorisierung von Polynomen und die Lösung von Gleichungen, wenn die Anzahl der enthaltenen Variablen groß wird.

Auch wenn die für eine Berechnung benötigte Zeit nicht exponentiell wächst, kommt immer ein Punkt, an dem die Berechnung zu groß oder zu zeitaufwendig wird, um sie auf Ihrem Computersystem durchzuführen. Während Sie mit Mathematica arbeiten, sollten Sie etwas Gefühl für die Grenzen der Berechnungsarten entwickeln, die Sie in Ihrem speziellen Anwendungsgebiet durchführen können.

Einige Operationen, die in der Regel einige Sekunden auf einer Workstation in 1997 benötigen

Kontrolle der Anzeige großer AusdrückeGebrauch von Symbolen zur Etikettierung von Objekten