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 /  Die Prinzipien von Mathematica /  Funktionaloperationen /

Funktionsnamen als AusdrückeAnwendung von Funktionen auf Listen und andere Ausdrücke

2.2.2 Wiederholte Anwendung von Funktionen

Viele Programme, die man selber schreibt, enthalten Operationen, die mehrmals iteriert werden müssen. Nest und NestList sind mächtige Konstrukte für diesen Zweck.

Funktionen eines Argumentes wiederholt anwenden

Nest[f, x, n] nimmt den „Namen" f einer Funktion und wendet die Funktion n-mal auf x an.

In[1]:= Nest[f, x, 4]

Out[1]=

Dies erzeugt eine Liste aufeinanderfolgender Verschachtelungen.

In[2]:= NestList[f, x, 4]

Out[2]=

Hier ist eine einfache Funktion.

In[3]:= recip[x_] := 1/(1 + x)

Die Funktion läßt sich durch Anwendung von Nest iterieren.

In[4]:= Nest[recip, x, 3]

Out[4]=

Mit Nest und NestList ist die Anzahl der Anwendungen der Funktionen konstant. Sehr häufig wird man Funktionen so lange anwenden wollen, bis sich das Ergebnis nicht mehr ändert. Dies kann mit FixedPoint und FixedPointList erreicht werden.

Funktionen anwenden, bis sich das Ergebnis nicht mehr ändert

Hier ist eine Funktion, die einen Schritt des Newtonschen Näherungsverfahrens zur Berechnung von ausführt.

In[5]:= newton3[x_] := N[ 1/2 ( x + 3/x ) ]

Hier sind fünf aufeinanderfolgende Iterationen der Funktion für den Startwert .

In[6]:= NestList[newton3, 1.0, 5]

Out[6]=

Mit der Funktion FixedPoint kann die Funktion newton3 automatisch so lange angewendet werden, bis sich das Ergebnis nicht mehr ändert.

In[7]:= FixedPoint[newton3, 1.0]

Out[7]=

Hier ist die Folge der Ergebnisse.

In[8]:= FixedPointList[newton3, 1.0]

Out[8]=

Funktionen wiederholt anwenden, bis ein Test versagt

Hier ist eine Funktion, die eine Zahl durch 2 dividiert.

In[9]:= teile2[n_] := n/2

So wird teile2 wiederholt so lange angewendet, bis das Ergebnis keine gerade Zahl mehr ist.

In[10]:= NestWhileList[teile2, 123456, EvenQ]

Out[10]=

Hier wird newton3 wiederholt angewendet; gestoppt wird, wenn zwei aufeinanderfolgende Ergebnisse nicht mehr als ungleich angesehen werden, so wie bei FixedPointList.

In[11]:= NestWhileList[newton3, 1.0, Unequal, 2]

Out[11]=

Dies geht so lange, bis das erstemal ein Ergebnis wieder erscheint, das bereits vorher erhalten worden war.

In[12]:= NestWhileList[Mod[5 #, 7]&, 1, Unequal, All]

Out[12]=

Operationen wie Nest nehmen eine Funktion f eines Argumentes und wenden sie wiederholt an. Bei jedem Schritt verwenden sie das Ergebnis des vorigen Schrittes als das neue Argument von f.

Es ist wichtig, diesen Begriff für Funktionen zweier Argumente zu verallgemeinern. Man kann wiederum die Funktion wiederholt anwenden, aber jetzt ergibt jedes neue Ergebnis nur eines der benötigten neuen Argumente. Ein passender Lösungsansatz besteht darin, bei jedem Schritt das andere Argument den aufeinanderfolgenden Elementen einer Liste zu entnehmen.

Möglichkeiten der wiederholten Anwendung von Funktionen zweier Argumente

Dieses Beispiel zeigt, was FoldList leistet.

In[13]:= FoldList[f, x, {a, b, c}]

Out[13]=

Fold liefert das letzte Element der von FoldList erzeugten Liste.

In[14]:= Fold[f, x, {a, b, c}]

Out[14]=

Dies gibt eine Liste kumulierter Summen.

In[15]:= FoldList[Plus, 0, {a, b, c}]

Out[15]=

Mittels Fold und FoldList können in Mathematica viele elegante und effiziente Programme geschrieben werden. In manchen Fällen mag es hilfreich sein, sich Fold und FoldList wie folgt vorzustellen: Sie erzeugen eine einfache Verschachtelung einer Familie von Funktionen, die durch ihr zweites Argument indiziert ist.

Dies definiert eine Funktion nextdigit.

In[16]:= nextdigit[a_, b_] := 10 a + b

Hier ist eine recht elegante Definition einer Funktion, die jene Zahl ausgibt, die einer Liste von Ziffern zur Basis 10 entspricht.

In[17]:= tonumber[digits_] := Fold[nextdigit, 0, digits]

Hier ist ein Beispiel für die Anwendung von tonumber.

In[18]:= tonumber[{1, 3, 7, 2, 9, 1}]

Out[18]=

Funktionsnamen als AusdrückeAnwendung von Funktionen auf Listen und andere Ausdrücke