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 /  Die Prinzipien von Mathematica /  Transformationsregeln und Definitionen /

InhaltSätze von Transformationsregeln manipulieren

2.4.1 Anwenden von Transformationsregeln

Anwenden von Transformationsregeln

Der Ersetzungsoperator /. (Kurzform von ReplaceAll, ausgesprochen als „Slash-Punkt") wendet Regeln auf Ausdrücke an.

In[1]:= x + y /. x -> 3

Out[1]=

Sie können eine Liste von anzuwendenden Regeln angeben. Jede Regel wird einmal auf jedem Teil des Ausdrucks ausprobiert.

In[2]:= x + y /. {x -> a, y -> b}

Out[2]=

Anwenden von Listen mit Transformationsregeln

Wenn Sie eine Liste von Regellisten angeben, erhalten Sie eine Liste mit Ergebnissen.

In[3]:= x + y /. {{x -> 1, y -> 2}, {x -> 4, y -> 2}}

Out[3]=

Funktionen wie Solve und NSolve liefern Listen, deren Elemente Regellisten sind und die jeweils eine Lösung repräsentieren.

In[4]:= Solve[x^3 - 5x^2 +2x + 8 == 0, x]

Out[4]=

Wenn Sie diese Regeln anwenden, erhalten Sie eine Liste mit Ergebnissen, eines für jede Lösung.

In[5]:= x^2 + 6 /. %

Out[5]=

Wenn Sie ausdr /. regeln verwenden, wird jede Regel der Reihe nach auf jedem Teil von ausdr probiert. Sobald eine Regel anwendbar ist, wird die geeignete Transformation vollzogen und der sich ergebende Teil zurückgegeben.

Die Regel für x^3 wird zuerst probiert; wenn Sie nicht anwendbar ist, wird die Regel für x^n_ benutzt.

In[6]:= {x^2, x^3, x^4} /. {x^3 -> u, x^n_ -> p[n]}

Out[6]=

Ein Ergebnis wird zurückgegeben, sobald die Regel angewendet worden ist, so daß das innere Exemplar von h nicht ersetzt wird.

In[7]:= h[x + h[y]] /. h[u_] -> u^2

Out[7]=

Die Ersetzung ausdr /. regeln probiert jede Regel genau einmal auf jedem Teil von ausdr aus.

Da jede Regel nur einmal ausprobiert wird, führt dies dazu, daß x und y vertauscht werden.

In[8]:= {x^2, y^3} /. {x -> y, y -> x}

Out[8]=

Sie können mit dieser Schreibweise einen Satz von Regeln anwenden, gefolgt von einem anderen.

In[9]:= x^2 /. x -> (1 + y) /. y -> b

Out[9]=

Möglicherweise müssen Sie manchmal Regeln so oft anwenden, bis der von Ihnen bearbeitete Ausdruck sich nicht mehr verändert. Dies können Sie durch Anwendung der wiederholten Ersetzungsoperation ausdr //. regeln (oder ReplaceRepeated[ausdr, regeln]) erreichen.

Einzelne und wiederholte Anwendung von Regeln

Mit dem Operator /. für einzelne Ersetzung wird jede Regel nur einmal auf jedem Teil des Ausdrucks ausprobiert.

In[10]:= x^2 + y^6 /. {x -> 2 + a, a -> 3}

Out[10]=

Mit dem Operator für wiederholte Ersetzung //. werden die Regeln so lange ausprobiert, bis sich der Ausdruck nicht weiter verändert.

In[11]:= x^2 + y^6 //. {x -> 2 + a, a -> 3}

Out[11]=

Hier wird die Regel einmal angewendet.

In[12]:= log[a b c d] /. log[x_ y_] -> log[x] + log[y]

Out[12]=

Mit dem Operator für wiederholte Ersetzung wird die Regel wiederholt angewendet, bis sich das Ergebnis nicht mehr verändert.

In[13]:= log[a b c d] //. log[x_ y_] -> log[x] + log[y]

Out[13]=

Wenn Sie //. (ausgesprochen als „Slash-Slash-Punkt") benutzen, durchläuft Mathematica Ihren Ausdruck wiederholt und probiert jede der gegebenen Regeln. Es fährt damit fort, bis es bei zwei aufeinanderfolgenden Durchgängen dasselbe Ergebnis erhält.

Wenn Sie Regeln angeben, die zirkulär sind, kann //. ewig weiterfahren. Tatsächlich wird die maximale Anzahl der Durchgänge, die //. auf einem bestimmten Ausdruck durchführt, durch die Einstellung der Option MaxIterations festgelegt. Wenn Sie ohne Beschränkung so oft wie möglich fortfahren wollen, können Sie ReplaceRepeated[ausdr, regeln, MaxIterations -> Infinity] verwenden. Sie können Mathematica immer durch einen expliziten Interrupt stoppen.

Durch Festlegung der Option MaxIterations können Sie ReplaceRepeated explizit mitteilen, wie oft die von Ihnen gegebenen Regeln probiert werden sollen.

In[14]:= ReplaceRepeated[x, x -> x + 1, MaxIterations -> 1000]

Out[14]=

Die Ersetzungsoperatoren /. und //. haben die gemeinsame Eigenschaft, daß sie jede Regel auf jedem Unterteil Ihres Ausdrucks probieren. Replace[ausdr, regeln] hingegen probiert die Regeln nur auf ausdr als Ganzes und nicht auf irgendeinem seiner Unterteile aus.

Sie können Replace zusammen mit Funktionen wie Map und MapAt verwenden, um genau zu kontrollieren, auf welche Teile eines Ausdrucks eine Ersetzung angewendet werden soll. Denken Sie daran, daß sich mit der Funktion ReplacePart[ausdr, neu, pos] ein Teil eines Ausdrucks durch ein bestimmtes Objekt ersetzen läßt.

Der Operator /. wendet Regeln auf alle Unterteile eines Ausdrucks an.

In[15]:= x^2 /. x -> a

Out[15]=

Ohne eine Stufenspezifikation wendet Replace Regeln nur auf den gesamten Ausdruck an.

In[16]:= Replace[x^2, x^2 -> b]

Out[16]=

Hier wird keine Ersetzung vorgenommen.

In[17]:= Replace[x^2, x -> a]

Out[17]=

Dies wendet Regeln bis hinunter zur Stufe 2 an, und ersetzt so x.

In[18]:= Replace[x^2, x -> a, 2]

Out[18]=

Anwenden von Regeln auf gesamte Ausdrücke

Replace liefert das Ergebnis, das sich nach Anwendung der ersten anwendbaren Regel ergibt.

In[19]:= Replace[f[u], {f[x_] -> x^2, f[x_] -> x^3}]

Out[19]=

ReplaceList liefert eine Liste der Ergebnisse von jeder anwendbaren Regel.

In[20]:= ReplaceList[f[u], {f[x_] -> x^2, f[x_] -> x^3}]

Out[20]=

Wenn eine einzige Regel auf mehrere Weisen angewendet werden kann, liefert ReplaceList eine Liste aller Ergebnisse.

In[21]:= ReplaceList[a + b + c, x_ + y_ -> g[x, y]]

Out[21]=

Dies liefert eine Liste aller Möglichkeiten, die ursprüngliche Liste in zwei Teile aufzuteilen.

In[22]:= ReplaceList[{a, b, c, d}, {x__, y__} -> g[{x}, {y}]]

Out[22]=

Dies ermittelt alle Unterlisten, die vom selben Element flankiert werden.

In[23]:= ReplaceList[{a, b, c, a, d, b, d},
{___, x_, y__, x_, ___} -> g[x, {y}]]

Out[23]=

Regeln auf eine oder auf alle möglichen Weisen anwenden

InhaltSätze von Transformationsregeln manipulieren