/ x y \→ /x /

Werbung
Kapitel 14
Umformung und
Vereinfachung
mathematischer Ausdrücke
Obwohl der Titel dieses Kapitels eher abstrakt klingt, behandelt das Kapitel eines der wichtigsten Themen dieses Buches: das Umformen und Vereinfachen mathematischer Ausdrücke. In
der Mathematik gibt es oft viele verschiedene Möglichkeiten, ein und denselben Sachverhalt
auszudrücken. So können Sie x2 1, aber auch (x + 1)(x 1) schreiben, was weniger eine
Frage des Geschmacks als vielmehr der jeweiligen Anwendung ist, die Sie interessiert. Damit haben wir schon eines der grundlegenden Probleme des Vereinfachens“ angesprochen: Je
”
nach Zweck werden Sie beim Vereinfachen unterschiedliche, sich auch widersprechende Ziele
verfolgen. Das macht es natürlich schwierig, einen solchen Vorgang zu automatisieren.
Mathematica stellt Ihnen zwei zentrale Kommandos zum Vereinfachen von Ausdrücken zur
Verfügung, Simplify und FullSimplify, die beide versuchen, einen Ausdruck in eine möglichst
einfache Form ohne Ansehen der Zielstellung zu bringen. Simplify ist dabei das Alltagskom”
mando“, das mit einem eingeschränkten Repertoire von Tricks arbeitet, aber in den meisten
Situationen ausreicht, um Ausdrücke in eine möglichst einfache Form zu bringen. FullSimplify
schöpft das ganze Können von Mathematica aus, was in manchen Fällen (besonders, wenn algebraische Zahlen im Spiel sind) noch zu weiteren deutlichen Vereinfachungen führen kann –
allerdings auf Kosten der Rechenzeit.
Daneben gibt es eine ganze Reihe von Kommandos, um unterschiedliche, in ihrer Zielsetzung
teilweise gegensätzliche Umformungen anzustoßen. Schließlich können Sie mit selbst zusammengestellten Regeln Mathematica noch zu mancher Umformung überreden, die es, aus welchen Gründen auch immer, nicht vornehmen möchte. Allerdings ist es oft fehlende mathematische Exaktheit, wie im Fall der Umformung x y
x y (setzen Sie einfach mal x = y = 1
ein!), die Mathematica abhält, eine solche Umformung automatisch vorzunehmen.
p 7! p p
Computeralgebrasysteme wie Mathematica trennen deshalb Rechnen und Vereinfachen und geben Ergebnisse algorithmischer Verfahren meist in einer durch den Algorithmus unmittelbar
produzierten Form zurück, ohne diese vor der Ausgabe noch zu bearbeiten. Besonders beim
Integrieren können dabei sehr lange Ausdrücke entstehen, die sich noch weiter vereinfachen
lassen, was Sie als Nutzer aber selbst bewerkstelligen müssen. Im einfachsten Fall können Sie
gleich an jedes Integrationskommando ein ==Simplify anschließen. Bitte beachten Sie aber, dass
dessen Abarbeitung auch wieder einige Zeit in Anspruch nimmt. Sie können auf das Ergebnis
324
14 Umformung und Vereinfachung mathematischer Ausdrücke
aber auch speziellere Transformationen anwenden, die vielleicht schneller zu einer Vereinfachung führen als dieses Allround-Kommando.
Solche spezielleren Kommandos mit teilweise gegensätzlicher Wirkung sind:
Expand und Factor
Expand multipliziert alle Produkte aus, Factor versucht, Ausdrücke möglichst weitgehend in
Faktoren zu zerlegen. Die speziellen Varianten PowerExpand und LogicalExpand wirken nur auf
Potenzen bzw. logische Ausdrücke.
Together und Apart
können zur Bearbeitung rationaler Funktionen eingesetzt werden. Together bringt mehrere
Brüche auf einen gemeinsamen Nenner, Apart führt eine Partialbruchzerlegung durch.
TrigReduce, TrigExpand, TrigFactor
sind Spezialkommandos, die besonders bei der Bearbeitung trigonometrischer Ausdrücke hilfreich sind.
TrigToExp, ExpToTrig
wandelt trigonometrische Ausdrücke in die (für kompliziertere Umformungen manchmal
günstigere) Exponentialschreibweise um bzw. umgekehrt.
Das Vereinfachen von Ausdrücken ist auch mathematisch ein anspruchsvolles Thema, dessen algorithmische Umsetzung sich oft hart an der Grenze zur prinzipiellen algorithmischen
Unlösbarkeit bewegt. Umso wichtiger ist es für den Nutzer eines Systems wie Mathematica,
Teilklassen mit gutem Simplifikationsverhalten zu kennen und identifizieren zu können.
Dieses Kapitel legt – nach einer etwas ausführlicheren Darstellung der Simplifikationsproblematik – zunächst den Schwerpunkt auf pseudorationale Ausdrücke als die wichtigste solche
Teilklasse.
Danach wird an trigonometrischen Anwendungen demonstriert, welche Fragen für Ausdrücke
auftreten, die in mehrere verschiedene Richtungen sinnvoll umgeformt werden können, und
wie Sie gescheite Antworten darauf finden. Mit dem Integrieren trigonometrischer Funktionen
greifen wir dabei auch noch einmal ein Thema aus dem Kapitel 12 auf.
Betrachten Sie diesen Teil nicht nur als Einführung in das Arbeiten mit trigonometrischen
Funktionen, sondern zugleich als Beispiel für den Umgang mit anderen Funktionenklassen,
die wir in diesem Buch nicht alle einzeln behandeln können. Die Kommandos mögen dort andere sein – die grundsätzlichen Überlegungen aber sind ähnlich.
Ein wichtiges Thema beim Vereinfachen von Ausdrücken ist für das nächste Kapitel aufgespart
– das Vereinfachen von Ausdrücken, die algebraische Zahlen (insbesondere Root-Symbole) enthalten.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Die Simplifikationsproblematik
325
Die Simplifikationsproblematik
Welches die einfachste Form eines mathematischen Ausdrucks ist, lässt sich nicht immer eindeutig sagen. Eine dem menschlichen Denken nahe liegende Definition wäre vielleicht, dass ein
Ausdruck dann einfach ist, wenn er aus möglichst wenigen Einzeltermen zusammengesetzt ist.
Das heißt aber noch lange nicht, dass diese Form auch mathematisch günstig ist (beispielsweise
wenn der Ausdruck anschließend integriert werden muss).
Noch viel weniger eindeutig ist der Weg zu einer einfacheren Form eines mathematischen Ausdrucks. (x 2)(x + 2)(x2 4) ist in der ausmultiplizierten Form x4 16 kürzer, bei (x 1)10 + 1
wäre das Ausmultiplizieren dagegen genau der falsche Weg, er führte zu einer Summe aus 10
Termen.
Schwierig ist es auch, die Frage zu beantworten, was wir in dieser Richtung überhaupt erwarten können. Die einfache Darstellung dieses Ausdrucks ist noch durch Faktorisieren zu
finden.
Simplify 576 816 x 460 x2
129 x3 18 x4 x5
[
+
+
2
(3 + x)
Ziehen Sie 1 ab, so belässt Mathematica das Ergebnis in dieser kurzen Form.
%
Simplify ist jedoch nicht mehr in der Lage, aus
dem expandierten Polynom die kurze Darstellung zurückzugewinnen.
%
Das mächtigere FullSimplify versucht eine andere Vereinfachung, eine Zerlegung des Polynoms nach dem Horner-Schema, die wenigstens für numerische Zwecke effizienter ist als
die expandierte Darstellung.
%
+
+
+
]
3
(4 + x)
1 == Simplify
2
1 + (3 + x)
3
(4 + x)
== Expand == Simplify
2
575 + 816 x + 460 x
+ 129 x
3
+ 18 x
4
5
+ x
== FullSimplify
575 + x (816 + x (460 + x
(129 + x (18 + x))))
3
Um die Darstellung (3 + x)2 (4 + x)
1 zu finden, hätte Mathematica auch die Umgebung des
Polynoms abgrasen müssen, indem es jeden der 5 Koeffizienten vor x0 ; : : : ; x4 um, sagen wir,
2 variiert. Das ergäbe 25 zu untersuchende Polynome – eine Steigerung des Aufwands auf
das 25fache ohne die Chance, wenigstens in einem nennenswerten Prozentsatz von Fällen zu
einem besseren Resultat zu kommen.
Vereinfachen mit Simplify
Computeralgebrasysteme wie Mathematica trennen deshalb die Phase des Berechnens von Ergebnissen und die Phase des Vereinfachens dieser Resultate voneinander. Am Ergebnis der folgenden vierten Ableitung können Sie die mehrfache Anwendung der Quotientenregeln noch
erahnen. Simplify (aber auch das gezieltere Kommando Together, das nur Brüche zusammen-
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
326
14 Umformung und Vereinfachung mathematischer Ausdrücke
fasst) bringen das Ergebnis in die zweite, einfachere und für die Weiterverarbeitung wohl vorzuziehende Form.
"
#
2
D p11 xx2 ; fx; 4g
+
1 + x
2
105 x
7 + 51 x
(1
2
(1
+ 12 x
4
(1
2
2 7=2
x )
9 x
+
x )
== Simplify
90 x
+
3
2 7=2
(1
3
x )
15 x
+8 x
%
2 9=2
(1
4
2 5=2
9
+
(1
2 5=2
x )
2
3 x
+ 12
x )
(1
2 5=2
1
+
x )
(1
2 3=2
x )
2 9=2
x )
Bei der Vereinfachung geht Mathematica davon aus, dass sich der Nutzer aktiv am Simplifikationsgeschehen beteiligt. Das kann im einfachsten Fall mit den Kommandos Simplify oder
FullSimplify geschehen, aber auch kompliziertere Aktionen sind möglich. Wenn Sie z.B. vermuten, dass der Ausdruck ‘in der Nähe’ eines einfacheren liegt, dann können Sie selbst eine Liste
dieser modifizierten Ausdrücke erstellen und untersuchen.
Die Kommandos Simplify und FullSimplify vereinfachen Ausdrücke, indem sie eine Reihe
gängiger algorithmischer Tricks wie Faktorisieren, Expandieren, Anwenden verschiedener
Identitäten und Ähnliches versuchen und unter den Ergebnissen das ‘einfachste’ (eben das
mit den wenigsten Termen) zurückgeben. Die Betonung liegt auf ‘versuchen’, denn manchmal
ist das Resultat komplizierter als der ursprüngliche Ausdruck. Sie sollten von den Kommandos
also keine Wunder erwarten!
Mathematica kennt natürlich die einfache Regel Sin[x]2 + Cos[x]2 = 1.
Sie wird auch dann angewendet, wenn die
Argumente der Winkelfunktionen ein wenig
unterschiedlich formuliert sind.
Simplify Sin x 2 Cos x 2
[
[
]
+
[
] ]
1
SimplifySin a2 b222
Cos a b a b
[
[(
)(
] +
+
)]
1
In Simplify sind auch einige Regeln für logarithmische Funktionen eingebaut.
Simplify Ea Log[b]
[
]
a
b
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Die Simplifikationsproblematik
327
Das Kriterium für die ‘Einfachheit’ mathematischer Ausdrücke ist im Regelfall deren
Kürze. Simplify erkennt daher meistens, ob es
besser ist, Produkte auszumultiplizieren oder
nicht.
Simplify x 1 10 1
[(
)
+
]
10
1 + (
1 + x)
Simplify a b 2 a b 2
[(
)
(
+
) ]
4 a b
Das Arsenal von Simplify ist eingeschränkt und mit Blick auf die Rechenzeit optimiert, während
FullSimplify das ganze Können von Mathematica auszuschöpfen versucht, was in manchen
Fällen (besonders, wenn algebraische Zahlen im Spiel sind) noch zu weiteren deutlichen Vereinfachungen führen kann – allerdings auf Kosten der Rechenzeit. (Das Kommando kann mit
Alt + . abgebrochen werden. Alternativ können Sie mit der Option TimeConstraint ein Zeitlimit (in Sekunden) vorgeben oder einzelne Funktionen durch die Option ExcludeForms von
Vereinfachungsversuchen ausnehmen.)
Wenn das Ergebnis einer Berechnung vorliegt und Sie nicht wissen, welches der vielen Transformationskommandos weiterhilft, dann ist Simplify zumindest einen Versuch wert – ganz nach
dem Motto: Hilft’s nichts, so schadet es auch nicht. Vorsicht ist nur bei sehr komplexen Ausdrücken geboten: Da kann es schon passieren, dass die Rechenzeit ins Uferlose steigt. Simplify
bricht automatisch nach fünf Minuten ab, FullSimplify kennt dagegen in der Defaulteinstellung
kein Zeitlimit.
Gezielte Umformung von Ausdrücken
Oft ist es aber gar nicht das Ziel, einen Ausdruck nur ‘einfach so’ zu vereinfachen, sondern
er soll in eine spezielle, für die weitere Verarbeitung günstige Form gebracht werden. In der
Beziehung Log[x2 1] = Log[x +1]+ Log[x 1] werden Sie z.B. den rechten Ausdruck vorziehen,
wenn Sie anschließend integrieren wollen, den linken dagegen beim Lösen einer Gleichung.
Das Vereinfachen von Ausdrücken ist also Teil einer umfassenderen Problemstellung, die Mathematica bewältigen muss: Die gezielte Umformung von Ausdrücken in eine mathematisch
(semantisch) gleichwertige, aber textmäßig (syntaktisch) verschiedene Form, deren Aussehen
grob vorgegeben wird.
Dafür stehen eine Reihe von Kommandos wie Expand und Factor, Together und Apart, TrigReduce, TrigExpand, TrigFactor usw. zur Verfügung, auf die wir weiter unten noch genauer eingehen
werden. Auch zum Vereinfachen von Ausdrücken sind solche speziellen Umformungskommandos oft geeigneter als Simplify, denn mit ihnen können Sie selbst gezielt das Aussehen
des Ergebnisses beeinflussen und sind nicht auf Gedeih und Verderb an das Geschehen in der
‘Black Box’ gebunden. Auch sind diese Kommandos meist schneller, da sie nur einen Teil der
Arbeit von Simplify verrichten.
Doch kommen wir noch einmal zur Beziehung Log[x2 1] = Log[x + 1] + Log[x 1] zurück. Offensichtlich macht Mathematica beim Integrieren davon keinen Gebrauch, denn die vom Computer berechneten Stammfunktionen der beiden Seiten unterscheiden sich leicht.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
328
Z
14 Umformung und Vereinfachung mathematischer Ausdrücke
Log x2 1 x
dl
2 x
s1
= %
(
1 + x] + Log[1 + x] + x
2 + Log
2
1 +x
2
1 +x
Log x 1 Log x 1 x
[
2 x
s2
1 + x] + Log[1 + x] + x Log
== Simplify
Log[
Z
Log[
= %
] +
Log[
[
+
]) dl
1 + x] + x Log[
1 + x] + Log[1 + x] + x Log[1 + x]
== Simplify
2 x + (
1 + x) Log[
1 + x] + (1 + x) Log[1 + x]
Mathematica geht beim Integrieren also einen anderen Weg als den der Faktorzerlegung des
Arguments der Logarithmusfunktion. Allerdings kann selbst FullSimplify die Gleichwertigkeit
der Ergebnisse nicht feststellen.
s1
==
x
s2 == FullSimplify
Log[
1 + x] + Log[1 + x]
Log[
2
1 + x ]
== 0
Der Grund dafür liegt in Fragen der mathematischen Exaktheit, auf die wir weiter unten noch
zurückkommen werden.
2
Auch beim Lösen einer Gleichung, die den
==
;
Term Log[x2 1] enthält, sind die beiden Aus
p p x !
2 ; x !
2
drücke nicht gleichwertig.
Solve Log x 1
0x
Solve Log x 1 Log x 1
[
x
[
!
] +
p
[
+
] ==
0; x
]
2
Sie vermuten vielleicht als Grund, dass dies mit dem eingeschränkteren (reellen) Definitionsbereich des zweiten Ausdrucks zusammenhängt. Dieses Argument ist nicht stichhaltig, wie wir
bereits betont haben, denn defaultmäßig werden alle Funktionen als komplexwertig betrachtet.
Wir kommen weiter unten auf diese Frage zurück.
Erkennen semantisch gleichwertiger Ausdrücke
Ein weiteres Problem, das sich gelegentlich stellt, ist der Vergleich von Ergebnissen, die für
dieselbe Aufgabenstellung auf unterschiedlichen Wegen erzielt wurden und vollkommen unterschiedliches Aussehen haben. Wir sind mit dieser Frage bereits bei der obigen Integrationsaufgabe konfrontiert worden, wo der Vergleich mit s1 == s2 == FullSimplify versucht wurde.
Mathematica hat dabei die Aufgabe von sich aus sofort in die Untersuchung von s1 s2 == 0
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Die Simplifikationsproblematik
329
transformiert, wie Sie an der Ausgabe sehen, da es wesentlich einfacher ist, einen Nulltest auszuführen, als die Ausdrücke direkt zu vergleichen.
Die Aufgabe, zu entscheiden, ob ein gegebener Ausdruck zum Nullausdruck mathematisch
gleichwertig ist, bezeichnet man als die Simplifikationsproblematik.
Ihre algorithmische Lösung war Gegenstand des 10. Hilbertschen Problems. Seit den Arbeiten
von Matijasevich und Roberts Ende der 60er Jahre weiß man, dass diese Aufgabe zu den algorithmisch unlösbaren gehört, d.h. es gibt keinen Algorithmus, der in der Lage ist, in einer
genügend reichhaltigen Klasse von Ausdrücken alle zu Null äquivalenten zu identifizieren.
Mathematica und damit auch der fortgeschrittene Nutzer bewegen sich beim Vereinfachen von
Ausdrücken also häufig hart an der Grenze zur prinzipiellen algorithmischen Unentscheidbarkeit, womit Ihr Können gefordert ist, am Aussehen konkreter Ausdrücke zu erkennen, welche
speziellen Arten von Vereinfachungen zur Anwendung zu bringen sind, die sicher und laufzeitfreundlich zum Ergebnis führen.
Umformungen und mathematische Exaktheit. Zusatzannahmen
Mathematica kennt eine Menge von Umformungen und führt einige besonders elementare auch automatisch aus.
Sqrt x 2; Exp 3 Log x ; Tan ArcSin x [
]
[
; 3; p
x
x x
=
[
[
[
[
]]
n
];
[
;
[
x
ArcTan[Tan[x]] Log[e ]
[
]]
;
]]
p
x2
o
2
1.5
1
0.5
]];
[
[
ArcTan Tan x ; Log Exp x ; Sqrt x2
== FullSimplify
Beginnen wir mit einem Plot des ersten
Terms.
f ArcTan Tan x
Plot f ; fx; 5; 5g; PlotRange ! f 2; 2g
]]
x2
1
Umso mehr werden Sie verwundert sein, dass
diese drei Ausdrücke so simplifikationsresistent sind und nicht jeweils einfach zu x umgeformt werden.
[
4
2
0.5
1
1.5
2
2
4
Mathematica hatte also Recht, nicht ganz so sorglos zu vereinfachen wie vorgeschlagen, denn
ArcTan ist nur im Monotonieintervall 2 < x < 2 die Umkehrfunktion von Tan.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
330
14 Umformung und Vereinfachung mathematischer Ausdrücke
Für spezielle Argumente weiß Mathematica
durchaus den korrekten Wert. Beachten Sie
auch unser Vorgehen: f ist eine Variable für
den symbolischen Ausdruck und keine Funktion. x wird durch lokale Substitution ein
Wert zugewiesen.
Die Vereinfachung ist also nur für reelle x
zwischen 2 und 2 korrekt. Solche Intervalle
können Sie Simplify und FullSimplify als zweiten Parameter übergeben. Nun wird die Vereinfachung vorgenommen.
f =: x ! 125
2
5
Simplify f ; 1 < x < 1
[
]
x
Als solche Zusatzannahmen (Assumptions) können beliebige boolesche Ausdrücke angegeben
(x < 1) interpretiert.
werden. Die Ungleichungskette 1 < x < 1 wird dabei als ( 1 < x)
Variablen, die in solchen Ungleichungen auftreten, werden außerdem automatisch als reellwertig angenommen.
^
Für den zweiten Ausdruck trifft das Argument mit dem eingeschränkten Definitionsbereich der Umkehrfunktion aber nicht zu, denn
Exp ist monoton wachsend auf ganz .
40
20
R
40
f Log Exp x Plot f ; fx; 50; 50g
=
[
[
]];
[
20
20
40
20
];
40
Hier wirkt sich aus, dass Mathematica von allen Variablen standardmäßig voraussetzt, dass sie
Werte aus
annehmen können. Im Bereich der komplexen Zahlen ist aber x = Log[y ] als
Im[x] < 2 I ) der Lösungen von y = ex definiert, die nur bis auf einen
Hauptwert (d.h. 0
Summanden k 2 I eindeutig bestimmt sind.
C
Für x = 10 I berechnet Mathematica diesen
Hauptwert korrekt.
f =: x ! 10I
i i
10
4
Seit der Mathematica-Version 4 gibt es die Möglichkeit, die Bereichszugehörigkeit von Variablen
über den Domain-Operator (Eingabe Esc elem Esc ) zu testen oder anzugeben. Mathematica
kennt folgende Bereiche:
2
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Die Simplifikationsproblematik
Complexes
Reals
Algebraics
Rationals
Integers
Primes
Booleans
331
C
R
Q
Z
Bereich der komplexen Zahlen
Bereich der reellen Zahlen
Bereich der algebraischen Zahlen
Bereich der rationalen Zahlen
Bereich der ganzen Zahlen
Bereich der Primzahlen
Boolean-Bereich True; False
f
g
Eine solche Bereichsangabe kann auch im Simplify-Kommando verwendet werden. Sie lässt
sich mit anderen booleschen Ausdrücken kombinieren.
Hier wird geprüft, ob 149 eine Primzahl ist.
Mathematica vereinfacht den Ausdruck automatisch.
Mit diesem Kommando wird unser LogAusdruck wie erwartet vereinfacht.
149 2 Primes
True
Simplify f ; x 2 Reals
[
]
x
2 f Sqrt x2
Bleibt noch der dritte Term. Wird hier x
Reals angenommen, so erfolgt auch eine Vereinfachung, allerdings zur mathematisch korrekten Antwort x statt x.
jj
=
;
Simplify f ; x 2 Reals
[
]
Abs[x]
Zwei weitere simplifikationsresistente Ausdrücke, die Ihnen vielleicht schon auf Seite 288 aufgefallen sind, sollen noch Erwähnung finden:
Der erste berührt das Zusammenfassen von
Produkten von Wurzeln zu einem gemeinsamen Radikanden. Das verweigert Mathematica ziemlich konsequent. Der Grund wird offensichtlich, wenn Sie x = y = 1 einset1
1 = I I =
1, aber
zen:
p Es gilt
( 1)( 1) = 1 = +1.
p p
p
Der Ausdruck vereinfacht nur dann zu 0,
wenn einer der beiden Radikanden eine positive reelle Zahl ist.
Addison-Wesley Verlag
w1 pxpy px y == Simplify
=
p p
x
y
p
xy
w1 =: ffx ! 1; y ! 1g; fx ! 1; y ! 1gg
f; g
0
2
Simplify w1; x > 0
[
]
0
Kofler, Gräbe: Mathematica
http://www.kofler.cc
332
14 Umformung und Vereinfachung mathematischer Ausdrücke
r
w2 p1x
Ähnliche Sorgen bereiten Kehrwerte von
Wurzeln. Auch hier wird die Vereinfachung
verweigert, weil sie für negative reelle Zahlen
zu falschen Ergebnissen führt. Für x = 1 ist
die linke Seite gleich 1I = I , die rechte dagegen gleich
1 = +I .
=
r
1
p
+
x
1
x == Simplify
p
1
x
w2 =: ffx ! 1g; fx ! 1gg
f ; ig
0
2
Der Grund für dieses Verhalten liegt in der Natur der Wurzelfunktion für komplexe Zahlen,
die (wie übrigens auch Log und ArcTan) eigentlich mehrwertig ist.
w2 =: x ! 1 0:001I == Chop
Die Definition der komplexen Wurzelfunktion in Mathematica scheint nicht allzu konsistent zu sein, denn das Hinzufügen eines winzigen Imaginärteils zu 1 ändert die Antwort
grundlegend.
+
0
Limit w2 =: fx ! 1 a Ig; a ! 0
Sogar der entsprechende Grenzwert, wenn
sich x der reellen Achse annähert, ist gleich
0.
[
+
]
0
Das ist allerdings kein Defizit, sondern mathematisch notwendig, denn solche mehrwertigen
Funktionen sind längs Ihres ‘branch cuts’ nicht stetig. Weitere Erläuterungen dazu finden Sie
im Abschnitt 3.2.7 des Mathematica-Handbuchs.
l Log 1 x Log 1 2x
Log 1 x
l =: x ! 2
i
Simplify l; x > 1
Auch die Simplifikationsresistenz des LogAusdrucks auf Seite 327 wird nun klarer.
1 vereinfacht er nicht zu Null,
Für x <
weil die entsprechenden Zweige der LogFunktion nicht zusammenpassen. Die Beziehung stimmt nur für x > 1.
=
[
+
] +
[
+
+
]
;
2
[
]
0
Eigene Umformungsregeln vereinbaren
Wenn Mathematica sich konsequent weigert, Vereinfachungen vorzunehmen, dann können Sie
es immer noch mit gut gesetzten Regeln dazu überreden. Die Zutaten dafür, Muster und den
Rule-Operator , kennen Sie ja schon. Das folgende System aus zwei Regeln fasst Wurzelausdrücke zusammen:
r !
sqrtRules
=
px py ! px y; 1 !
py
Addison-Wesley Verlag
1
y
;
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Polynomiale, rationale und pseudorationale Ausdrücke
333
Angewendet wird es auf einen Ausdruck mit dem Operator =: (ReplaceAll, einmalige Anwendung der Regeln) oder ==: (ReplaceRepeated, Anwendung so oft wie möglich). In unserem Fall
vereinfacht es nicht nur Produkte und Kehrwerte, sondern auch Quotienten von Wurzeln, da
A Mathematica-intern ja als Times[A; Power[B; 1]] dargestellt werden, also aus eiQuotienten B
nem Produkt und einem Kehrwert zusammengesetzt sind. (Aus dem Grund reicht auch =: zur
Vereinfachung nicht aus.) Die Kenntnis von derartigen Interna ist besonders für das Aufstellen solcher Regelsysteme erforderlich. Im Zusammenhang mit trigonometrischen Ausdrücken
kommen wir darauf ab Seite 347 zurück.
(
r p
r )
pxpy px y; p1
x
1 x
x ; py
x
y
==: sqrtRules
f; ; g
0 0 0
Denselben Effekt können Sie in diesem Fall allerdings auch mit dem Kommando PowerExpand
erreichen. Auch damit werden die Wurzelausdrücke zu Null vereinfacht. Genauer gesagt bewirkt Powerexpand das Gegenteil der angegebene Regeln – es expandiert (u.a.) Wurzeln von
Produkten und Quotienten in Produkte und Quotienten von Wurzeln.
Beachten Sie also, dass die Anwendung von PowerExpand zu inkorrekten Ergebnissen führen
kann, denn Sie haben gerade gesehen, dass solche Umformungen nicht immer mathematisch
exakt sind!
Polynomiale, rationale und pseudorationale Ausdrücke
Für Polynome und rationale Funktionen lässt sich die Simplifikationsproblematik besonders
einfach entscheiden: Sie müssen nur alles ausmultiplizieren bzw. auf einen gemeinsamen
Hauptnenner bringen und dann gleichartige Summanden (des Zählers) zusammenfassen.
Wenn sich dabei alle Terme wegheben, ist der untersuchte Ausdruck gleich 0, sonst nicht. Wenn
Sie die Summanden geeignet ordnen, dann ist das polynomiale Ergebnis im zweiten Fall sogar
die rationale Normalform, d.h. zwei Ergebnisse, die verschieden aussehen, sind auch mathematisch verschieden.
Ausdrücke mit polynomialer bzw. rationaler Struktur spielen deshalb für Mathematica eine
wichtige Rolle, wobei die Definition der ‘Variablen’ nicht so eng gesehen wird und dafür auch
y ] (so genannte ‘verallgemeinerte Kerne’)
Funktionsausdrücke wie Sin[a + b] oder Cos[x
zulässig sind. Solche Ausdrücke werden als pseudorational bezeichnet.
Natürlich gehen Beziehungen zwischen den verallgemeinerten Kernen solcher pseudorationaler Ausdrücke in deren rationale Vereinfachung nicht ein. Sie können also in diesem Fall nicht
schließen, dass ein Ausdruck, in dem sich nicht alle Terme weggekürzt haben, auch mathematisch verschieden von Null ist.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
334
14 Umformung und Vereinfachung mathematischer Ausdrücke
Die entsprechenden Kommandos, mit denen die genannten polynomialen bzw. rationalen Vereinfachungen vorgenommen werden können, lauten Expand und Together. Sie sollten in Ihrem
Repertoire gleich nach Simplify einen zentralen Platz einnehmen.
Expansion von Produkten
Die Funktion von Expand ist am nebenstehenden Beispiel leicht zu erkennen: Das Kommando löst einfach alle Klammern auf.
x x a2x b3
(
) (
)
2
x (
a + x)
Expand
2
a
3
2
b
2
3
2
x
3
+ 2 a b
3
4
+ 3 b
x
3
b
2 a x
x
5
3
2
x
2
[(
+
a b (a + b)
)(
2
b (a + b)
2
+
)(
+
2
+ a (a + b)
)
3 b x
2
2
+
]
2
x
2
a (a + b)
(
2
+ b (a + b)
x
2
x
Expand Sin x Cos x
3
6
+ x
]
a b (a + b)
Cos[x]
x +
5
x+
2
x + (a + b)
Collect ; x
[%
4
+ a
Expand x a x b a b 2; x
[
] +
[
2
+ 3 Cos[x]
2
3 Cos[x] Sin[x]
3
])
Sin[x]+
+ Sin[x]
3
3
Expand xx 11 4 (
+
(
1
(
)
)
4
3 x
+
1 + x)
(
(
3
4
1 + x)
Kofler, Gräbe: Mathematica
4+
1 + x)
2
3 x
Addison-Wesley Verlag
x
6 a b
+(a + b)
Bei Brüchen wirkt Expand nur auf den Zähler.
(Das reicht für rationale Normalformen auch
aus.) Mit Together können Sie das Ergebnis auf
einen gemeinsamen Hauptnenner bringen.
2
b
2
b x
6 a b x
Expand wirkt auf diesen pseudorationalen
Ausdruck, als ob es sich um das Polynom
(A + B )3 mit A = Sin[x]; B = Cos[x] handelt. Die Beziehung Sin[x]2 +Cos[x]2 = 1 wird
nicht berücksichtigt.
2
x+ 3 a
4
Mit Collect können Sie die Koeffizienten vor
den einzelnen Potenzen von x zusammenfassen.
b + x)
[%]
3 a
Im optionalen zweiten Parameter kann ein
Muster angegeben werden. Faktoren, in denen dieses Muster (hier einfach die Variable
x) nicht vorkommt, bleiben von Expand unberührt. Die Wirkung dieses Kommandos ist
also eine Expansion nur nach der Variablen x.
3
(
x
+
(
4
1 + x)
http://www.kofler.cc
Polynomiale, rationale und pseudorationale Ausdrücke
ExpandAll wird dagegen auf alle Teilausdrücke angewendet.
335
3
ExpandAll xx 11 4 ==Together
(
+
)
(
)
2
3
1 + 3 x+ 3 x
4 x + 6 x2
1
Falls Sie nur den Nenner ausmultiplizieren möchten – ExpandDenominator macht’s
möglich!
+ x
4 x3 + x4
3
ExpandDenominator xx 11 4 (
+
(
)
)
3
(x + 1)
1
Die nebenstehenden Beispiele demonstrieren
nochmals den Unterschied zwischen Expand
und ExpandAll. Während im ersten Beispiel
2
der Kern A = Sin[(x + 1) ] unverändert
bleibt, wird im zweiten Beispiel auch das Innere des Kerns expandiert.
4 x +6
2
x
3
4 x
4
+ x
Expand Sin x 1 2 1 2
[(
[(
+
) ] +
) ]
2 2
2
1 + 2 Sin[(1 + x) ] + Sin[(1 + x) ]
ExpandAll Sin x 1 2 1 2
[(
[(
+
) ] +
) ]
2 2
2
1 + 2 Sin[1 + 2 x + x ] + Sin[1 + 2 x + x ]
Andere Expand-Kommandos
Die folgenden Kommandos haben nichts mit rationalen Funktionen zu tun, sondern ‘expandieren’ Ausdrücke in anderen Bedeutungen dieses Wortes. Sie sind hier der Vollständigkeit halber
kurz aufgeführt.
Potenzen vereinfachen (PowerExpand)
PowerExpand vereinfacht Wurzeln und Potenzen. Diese Umformungen sind nicht immer
mathematisch exakt (etwa gilt n2 = n nur
für n
0) und deshalb mit Vorsicht zu verwenden. Auf Seite 331 ist dieses Thema genauer besprochen.
p
PowerExpandSinpn2 t
Sin[n t]
PowerExpand a b c
[(
a
c
) ]
c
b
PowerExpand expandiert Produkte und Quotienten, die im ersten Argument von Power vorkommen, in Produkte und Quotienten von Potenzen bzw. Wurzeln. Für die dazu inverse Umformung kennt Mathematica kein Kommando. Hierfür müssen Sie das auf Seite 332 beschriebene
Regelsystem einsetzen.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
336
14 Umformung und Vereinfachung mathematischer Ausdrücke
Komplexe Ausdrücke vereinfachen (ComplexExpand)
ComplexExpand Sin a b I
ComplexExpand vereinfacht Ausdrücke, in denen Real- und Imaginärteil durch separate Variablen ausgedrückt sind.
[
[
+
]]
Cosh[b] Sin[a] + I Cos[a] Sinh[b]
Die Vereinfachung wird unter der Annahme vorgenommen, dass alle vorkommenden Variablen reelle Zahlen sind. Weitere Beispiele finden Sie im Kapitel 12 auf Seite 266.
Logische Ausdrücke vereinfachen (LogicalExpand)
LogicalExpand Xor a; b jj Implies a; b
Das Kommando LogicalExpand vereinfacht logische Ausdrücke nach den Regeln der booleschen Algebra. Im zweiten Ausdruck sind Xor
und Implies mit ihren Operatoren angeschrieben. Die Klammern sind erforderlich, um die
Terme richtig zu gruppieren.
[
[
]
[
]]
True
LogicalExpand a_b ^ a ) b
[(
b
)
(
)]
&& !a
Argumente trigonometrischer Ausdrücke vereinfachen (TrigExpand)
TrigExpand Cos TrigExpand wendet Additionstheoreme an,
um trigonometrische oder Hyperbelfunktionen mit zusammengesetzten Argumenten
(Winkelsummen, Mehrfachwinkel) in solche
mit einfachen Argumenten zu verwandeln.
[
[
]Cos[ ]
Cos[
+
Sin[
]]
]Sin[ ]
Weitere Kommandos zur Bearbeitung trigonometrischer Ausdrücke werden auf Seite 343 vorgestellt.
Ausdrücke nach Variablen zusammenfassen (Collect)
Mathematica ordnet die Einzelterme eines Ausdrucks (egal ob Summe oder Produkt) nach einer
intern festgelegten Ordnung, so dass Sie keinen Einfluss auf diese Ausgabe haben. (Das gilt
generell für Funktionssymbole mit dem Attribut Orderless.)
h
i
f Expand a x2y b y 2 x 2y c y2 2 x3 x4y2
=
+
2
a
+ x
2 x
4
2
y
3
+ x
2
+
3
2
+ c
Addison-Wesley Verlag
+
2
+ 2 a by
4 c y
+
4 x y +2 a x
y
y + 4 y
+
2
2
+b
+
y
2
+ 2 c x y
2
+ 2 b x
2
2
y +
4
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Polynomiale, rationale und pseudorationale Ausdrücke
337
Mit Collect können Sie in einem Ausdruck die Terme zur gleichen Potenz einer Variablen, etwa
x, zusammenfassen.
Collect f ; x
[
2
a
]
+ x
x
3
+ 2 a by + 4 y
4 y + 2 c y
2
+b
2
2
y
2
+ 2 x
4
y
2
4 c y
3
2
+ c
y
4
2
+ x
1 + 2 a y + 2 b y
2
+
Allerdings sind diese Terme nicht unbedingt nach x-Potenzen geordnet, da die interne Ordnung in den meisten Fällen zuerst nach der ‘Kompliziertheit’ (Depth) der Terme geht.
Depth = List
@
@@ %
f; ; ; ; ; ; ; ; ; g
2 2 2 3 3 3 3 3 5 5
Terme mit Klammern haben also eine gute Chance, weiter hinten zu stehen als Einzelterme
(wie im ersten Beispiel x3 oder 2x4 y 2 , die unter den x-freien Termen untergehen). Allerdings
ist das nicht immer so, wie das folgende Beispiel zeigt.
Collect f ; y
[
2
a
+ x
2
]
3
+ x
Depth = List
@
+
2 a b
4 x+ 2 a x
2
y +
2
4 + b
2
+ 2 c x+ 2 b x
4
+ 2 x
y
2
4 c y
3
+c
2
y
4
@@ %
f; ; ; ; ; ; g
2 2 2 5 5 3 3
Weitere Details zu dieser inneren Ordnung finden Sie im Abschnitt A.3.9 des MathematicaHandbuchs.
Doch kommen wir zum Kommando Collect zurück. Detailliertere Informationen, insbesondere
Zugriff auf die einzelnen Koeffizienten einer solchen Zerlegung, erhalten Sie mit den Funktionen CoefficientList bzw. Coefficient. Das erste Kommando gibt die Liste aller Koeffizienten nach
wachsender x-Potenz geordnet zurück, das zweite kann zum Herauslösen einzelner Koeffizienten verwendet werden.
CoeÆcientList f ; x
[
a
2
]
+ 2 a b y+ 4 y
CoeÆcient f ; x2
1 + 2 a y + 2 b y
2
2
+ b
oder
y
2
4 c y
3
2
+ c
y
4
;
4 y + 2 c y
2
; 1 + 2 a y + 2 b y2 ; 1; 2 y2
CoeÆcient f ; x; 2
[
]
2
Coefficient[f; y n ] und Coefficient[f; y; n] sind für n > 0 zueinander äquivalent. Für n = 0 klappt
das erste Kommando nicht. (Grund: y 0 wird zu 1 vereinfacht und eine solche Variable gibt es
nicht.) Hier werden die Koeffizienten der Potenzen y 0 ; y 1 und y 2 von f aufgesammelt. (Coefficient ist natürlich auch Listable, deshalb wird das Kommando über die Liste im dritten Argument distribuiert.)
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
338
14 Umformung und Vereinfachung mathematischer Ausdrücke
CoeÆcient f ; y; f0; 1; 2g
[
2
a
2
+ x
3
+ x
;2 a b
]
4 x + 2 a x
; 4 + b2 + 2 c x + 2 b x2 + 2 x4
2
Der zweite Parameter von Collect kann eine Liste sein. In diesem Fall wird nach allen angegebenen Variablen gruppiert. Beachten Sie den Unterschied in der Ausgabe zwischen dem ersten
und dem zweiten Beispiel. Im ersten Beispiel ist f nach a und die Koeffizienten nach y geordnet, im zweiten Beispiel ist es umgekehrt.
Collect f ; fa; yg
[
2
a
+ x
]
2
+x
3
2
4 x y+ a
2 b+ 2 x
Collect f ; fy; ag
[
2
]
2
a
+ x
+x
3
+
4 x+ a
2 b +2 x
y+
2 2
2
4 +b
+ 2 c x + 2 b x
2
y +
4 + b
+ 2 x
2
+ 2 c x + 2 b x
4
y
2
4
+ 2 x
4 c y
y
2
[
2
+ c
4 c y
CoeÆcientList f ; fx; yg
Auch CoefficientList und Coefficient können
verwendet werden, um Koeffizenten multivariater Terme zu extrahieren. Das erste Kommando extrahiert eine Liste von Listen der
Koeffizienten, das zweite einen Koeffizienten
zu einem speziellen Term.
3
3
y
4
2
+ c
y
4
]
; 2 a b; 4 + b ; 4 c; c2 ;
f0; 4; 2 c; 0; 0g; f1; 2 a; 2 b; 0; 0g;
f1; 0; 0; 0; 0g; f0; 0; 2; 0; 0g
a
2
2
CoeÆcient f ; x2 y
2 a
An Collect kann eine ’pure function’ übergeben werden, die auf alle gefundenen Gruppen angewendet wird. Besonders geeignet sind Funktionen, die diese Gruppe weiter vereinfachen.
Collect f ; x; Simplify
[
2
a
+ x
3
]
4
+ 2 a by + 2 x
y
2
+ 2 x y (
2
2 + c y) + x
1 + 2 a y+ 2 by
2
+y
2
2
b
+ (
2
2 + c y)
Collect kommt nicht nur mit einzelnen Variablen, sondern auch mit Kernen wie Cos[x] zurecht.
i
h
Expand Sin x Cos x 2 2 1 Cos x
[
1
]
2
2 Cos[x] + Cos[x]
Collect ; Cos x
[%
1
[
[
]
+(
[
4
+ Cos[x]
])
2
2
2 Cos[x]
Sin[x] + Sin[x]
2
]]
4
2 Cos[x] + Cos[x]
Addison-Wesley Verlag
+ Cos[x]
2
(1
2
2 Sin[x]) + Sin[x]
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Polynomiale, rationale und pseudorationale Ausdrücke
339
Faktorisierung von Summen
Factor 1 4x 6x2 4x3 x4
Factor ist das Gegenstück zu Expand, soweit es
das Ausmultiplizieren von Produkten anbelangt. Factor versucht, eine Summe von Einzeltermen in die Produktform zurückzuverwandeln.
[
(
+
+
]
4
1 + x)
Factor x4 y4
[
]
2
(x
y) (x + y) (x
2
+y )
Factor funktioniert ebenfalls für pseudorationale Ausdrücke mit verallgemeinerten Kernen als
Variablen. Im Ausdruck s1 werden vier solche Kerne (Cos[3 x]; Sin[3 x]; Cos[x] und Sin[x]) unterschieden – eine Faktorisierung ist nicht möglich.
s1 Integrate Sin x 3 Cos x 3; x
=
[
3 Cos[x]
4
+
s1 == Factor
1
12
(
[
1
]
+
[
Cos[3 x] +
12
]
]
3 Sin[x]
4
+
1
12
Sin[3 x]
9 Cos[x] + Cos[3 x] + 9 Sin[x] + Sin[3 x])
TrigExpand reduziert die Zahl der Kerne auf zwei (Cos[x] und Sin[x]). Nun kann ein Faktor
abgespalten werden.
s1 == TrigExpand
3 Cos[x]
4
%
+
== Factor
1
12
(Cos[x]
Cos[x]
3
12
Sin[x])
+
3 Sin[x]
4
+
9 + Cos[x]
1
4
2
2
Cos[x]
1
Sin[x]
4
2
Cos[x] Sin[x]
+ 4 Cos[x] Sin[x] + Sin[x]
3
Sin[x]
12
2
Simplify kann auch noch den zweiten Faktor vereinfachen.
%
== Simplify
1
6
(Cos[x]
Sin[x]) (
4 + Sin[2 x])
Diese Umformungen bewirkt auch das Kommando TrigFactor, das versucht, einen trigonometrischen Ausdruck möglichst weitgehend in Faktoren zu zerlegen.
Addison-Wesley Verlag
s1 == TrigFactor
1
6
(Cos[x]
Kofler, Gräbe: Mathematica
Sin[x]) (
4 + Sin[2 x])
http://www.kofler.cc
340
14 Umformung und Vereinfachung mathematischer Ausdrücke
Im Gegensatz zu Expand wirkt Factor bei
Brüchen gleichermaßen im Zähler und im
Nenner.
Factor bildet nur Terme mit ganzzahligen Koeffizienten und nicht ( 21 + x)( 12 + x), was
hier ebenfalls korrekt wäre.
Factor x x2 x 1 6 2+
(
2 + x) (3 + x)
(
1 + x) (1 + x)
Factorx2 14 1
4
Factor bildet normalerweise nur Terme mit
rationalen Koeffizienten. Aus diesem Grund
kann 1 + x2 nicht weiter vereinfacht werden.
!
Mit der Option GaussianIntegers
True
I erreichen Sie, dass auch
oder Extension
komplexe Koeffizienten (genauer: Zahlen der
Form a + b I mit a; b
) verwendet werden.
!
2Z
Die Extension-Option können Sie auch für
Produktzerlegungen über anderen Grundbereichserweiterungen verwenden.
!
Extension
Automatic bezieht alle in
einem Ausdruck vorkommenden algebraischen Zahlen in den Grundbereich ein.
(
1 + 2 x) (1 + 2 x)
Factor 1 x2
+
2
1 + x
Factor 1 x2; GaussianIntegers ! True
oder
Factor 1 x2; Extension ! I
i i
+
+
(
+ x) (
Factor x2 3x 1; Extension ! p5
+
1
3 +
4
p
5
+
2x
3 +
p
5 + 2x
Factorx2 2p2x 2;
Extension ! Automatic
+
p
2 + x
FactorTerms ist eine eingeschränkte Variante zu Factor. Das Kommando zieht lediglich
einen gemeinsamen numerischen Faktor vor
den Ausdruck.
+ x)
+
2
2
2
f Expand 2 7 x 2x 3 3 f == FactorTerms
(
=
1
21
(18
9 x
) (
2
24 x
)
3
+ 12 x
;
4
+8 x
5
4 x )
Arbeiten mit rationalen Funktionen
Im Mittelpunkt dieses Abschnitts stehen Funktionen, mit denen rationale Ausdrücke weiterverarbeitet werden können.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Polynomiale, rationale und pseudorationale Ausdrücke
341
Brüche auf gemeinsamen Hauptnenner bringen
Together bringt eine Summe von Brüchen auf
einen gemeinsamen Nenner.
Togetherx yz +
y+ x z
z
Together x 1 3 x 1 1 x2 1 1 +
+
+
2
5 +5 x + 2 x
(
Together funktioniert auch für pseudorationale Ausdrücke wie hier beim Zusammenfassen
des Ergebnisses dieses Integrate-Kommandos.
1 + x) (1 + x) (3 + x)
3
Sin
x
Integrate 1 Cos x ; x
[
]
+
2 Cos
x 2
2
[
]
Cos[x]
1 + Cos[x]
%
Cos
+
x 2
2
2
Cos[2 x]
2 (1 + Cos[x])
== Together
4 Cos
x 2
Cos[x] + Cos
x 2
2
Cos[2 x]
2 (1 + Cos[x])
Simplify kann das Ergebnis allerdings noch
weiter vereinfachen.
%
== Simplify
1
4
(
4 Cos[x] + Cos[2 x])
Zähler und Nenner ermitteln
Die Funktionen Numerator und Denominator ermitteln den Zähler und Nenner eines
Bruchs.
x 1 23
x 5
fNumerator f ; Denominator f g
f
=
(
+
)
(
[ ]
f
(1 + x)
Die beiden Kommandos sind reine Selektoren und bilden nicht automatisch einen gemeinsamen Nenner. Dazu muss vorher gegebenenfalls Together verwendet werden.
;
)
3
;(
[ ]
2
5 + x)
g
Numerator 1 a xx2 bx +
b
x
+
a x
x2
1
NumeratorTogether 1 a xx2 bx +
b
Addison-Wesley Verlag
2
a x
Kofler, Gräbe: Mathematica
2
+ b x
http://www.kofler.cc
342
14 Umformung und Vereinfachung mathematischer Ausdrücke
Brüche kürzen
Cancel kürzt Brüche, d.h. dividiert aus dem
Zähler und dem Nenner eines Bruches den
größten gemeinsamen Teiler aus. Das Kommando funktioniert auch für pseudorationale Funktionen, allerdings nur bzgl. der dabei
vorgefundenen rationalen Struktur.
Brüche werden zwar meist auch von Simplify
gekürzt, aber der Vorteil von Cancel besteht
darin, dass es wirklich kürzt und nur kürzt.
Hier wird der Unterschied deutlich: Da der
gekürzte Bruch (etwas) komplizierter ist als
der ungekürzte, lässt Simplify das Kürzen
sein.
8x x2 x3 Cancel 12
18 3x 4x2 x3
+
+
+
2 + x
3 + x
f
1 x36 f == Simplify
x 1
;
=
(
)
1
(x
3
x
6
1)
f == Cancel
1
(
x
x
2
5
1 + x)
Partialbruchzerlegung
Apart berechnet die Partialbruchzerlegung eines rationalen oder pseudorationalen Ausdrucks, d.h. zerlegt ihn in die Summe von
Brüchen mit möglichst einfachen Nennern.
Apart x4 x 1 1
4 (
+
1 + x)
1
x
4 (1 + x)
2 (1 + x )
2
Solche Zerlegungen spielen etwa beim Integrieren rationaler Funktionen eine wichtige Rolle. Beachten Sie, dass dabei exakt gerechnet wird und Mathematica deshalb den Nenner nur
in Faktoren über zerlegt, nicht aber in komplexe Linearfaktoren oder reelle lineare und quadratische Faktoren, wie es gewöhnlich in der Mathematik-Ausbildung gelehrt wird. Soviel zum
Unterschied zwischen theoretischer und algorithmischer Mathematik!
Q
Enthält ein Ausdruck mehrere Variablen, so
können Sie angeben, nach welcher Variablen
die Zerlegung durchgeführt werden soll. Alle
anderen Variablen werden dann als (konstante) Parameter betrachtet.
Es kann aber nur eine Variable angegeben
werden, denn Apart ist Listable und wird deshalb in diesem Beispiel über die Liste der Parameter im zweiten Argument distribuiert.
Addison-Wesley Verlag
Apart x x yy 2 ; x
(
y
x
y
)
y
+
2
2
(x
y)
Apart x x yy 2 ; fx; yg
(
)
y
x
y
y
+
Kofler, Gräbe: Mathematica
(x
2
2
y)
;
2
x
(
2
x + y)
+
x
x+ y
http://www.kofler.cc
Trigonometrische Ausdrücke
343
Trigonometrische Ausdrücke
Eine besondere Fülle von Beziehungen gibt es zwischen den trigonometrischen Funktionen,
so dass Sie leicht die Orientierung verlieren können, wenn keine klaren Zielvorstellungen Ihre
Umformungen begleiten. Ein erster Ansatz könnte sein, die Zahl der verschiedenen Funktionen
Sin bzw. Cos ersetzt werden.
in einem Ausdruck zu reduzieren, indem Tan und Cot durch Cos
Sin
Das ist mit Mathematica leider nicht möglich. Obwohl sonst nur selten ungefragt Umformungen vorgenommen werden – was ja
auch gut so ist –, kennt Mathematica bei den
Winkelfunktionen kein Halten und macht die
genannten Ersetzungen immer sofort rückgängig.
Sin x ; 1 ; Cos x ; 1 Cos x Cos x Sin x Sin x
f
[
]
[
]
[
]
[
]
[
]
[
]
; Sec[x]; Cot[x]; Csc[x]g
Tan[x]
Wir wollen deshalb zwei Zielvorstellungen für trigonometrische Umformungen, die einleuchtend und einfach sind, zunächst theoretisch erörtern, auch wenn sie aus den eben genannten
Gründen in keinem der weiter unten vorgestellten Mathematica-Kommandos in dieser reinen
Form ausgeführt werden. Sie können sich in einem solchen Fall allerdings behelfen, indem
Sie ein Regelsystem entwerfen, das genau diese Umformungen bewirkt. Nach einem Überblick
über die entsprechenden Mathematica-Kommandos werden wir gemeinsam ab Seite 347 ein solches Regelsystem entwickeln. Wenn Sie nur an den Kommandos interessiert sind, dann können
Sie diese beiden Abschnitte überschlagen.
Eine dritte Strategie hilft in verzwickten Situationen manchmal ebenfalls weiter: Die Anwendung der Formeln
ix
Sin[x] = e
e
2i
ix
und
ix
Cos[x] = e + e
2
ix
;
mit denen trigonometrische Formeln in die (komplexe) Exponentialschreibweise umgeformt
werden können. Der Erfolg dieses Zugangs liegt darin begründet, dass Mathematica mit solchen Power-Ausdrücken wesentlich besser rechnen kann als mit den trigonometrischen Funktionen selbst. Die entsprechenden Umformungen können mit den Kommandos TrigToExp (Umwandlung in die Exponentialschreibweise) und ExpToTrig (Rückumwandlung) vorgenommen
werden.
Sin x Cot x == TrigToExp
ix
ix
i i x i i x ii x i x iix i x
== Simplify
i i ix i ix i 2ix i 3ix
[
1
2
] +
[
]
1
e
2
e
e
e
e
e
e
e
%
2
e
+2
e
+2
2ix
e
e
2 + 2 e
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
344
%
14 Umformung und Vereinfachung mathematischer Ausdrücke
== ExpToTrig
(2
i i
+
Cos[x] + 2
i
Cos[2 x]
(
i
Cos[3 x]
i
3 Sin[x]
2 + 2 Cos[2 x] + 2
2 Sin[2 x] + Sin[3 x])
Sin[2 x])
Allerdings bedarf es oft einiger Kunstfertigkeit, die dabei entstehenden Ergebnisse richtig zu interpretieren. Sie sehen an diesem
Beispiel noch einmal, dass Simplify durchaus
nicht immer die einfachste Darstellung findet.
%
== Simplify
1
2
(
1
2 Cos[x] + Cos[2 x]) Csc[x]
Sin x == Simplify
%
[
]
Cot[x]
Wie vereinfacht man trigonometrische Ausdrücke?
Dieser Abschnitt ist fakultativ, für ein besseres Verständnis der Problematik aber zu empfehlen.
Um trigonometrische Ausdrücke zu vereinfachen, sollten zunächst die sechs bekannten trigonometrischen Funktionen (Sin, Cos, Tan, Cot, Sec, Csc) auf zwei von ihnen (Sin, Cos) reduziert
werden. Das ist, wie oben erläutert, mit Mathematica leider grundsätzlich nicht möglich, aber
wir wollen hier davon ausgehen, dass diese Umformungen ausgeführt wurden und (oder gar
nicht notwendig waren, weil) ein pseudorationaler Ausdruck vorliegt, in dessen Kernen nur
Sin- und Cos-Funktionen vorkommen.
Die folgenden beiden Additionstheoreme sind für die weiteren Ausführungen zentral:
(
SP Regeln
(
)
Sin[x + y ]
=
Sin[x] Cos[y ] + Cos[x] Sin[y ]
Cos[x + y ]
=
Cos[x] Cos[y ]
Sin[x] Sin[y ]
Sie können umgestellt werden in die Form
(
PS Regeln
)
8
>
<
>
:
Sin[x] Sin[y ]
=
Sin[x] Cos[y ]
=
Cos[x] Cos[y ]
=
x y ] Cos[x + y ])
x + y ] + Sin[x y ])
x y ] + Cos[x + y ])
1
2 (Cos[
1
2 (Sin[
1 (Cos[
2
Die SP-Regeln (SP steht für Summe-Produkt) sind geeignet, Winkelfunktionen mit Mehrfachargumenten, also Terme wie Sin[3 x + y ] oder Cos[5 x], in polynomiale Ausdrücke zu verwandeln,
in denen nur noch Sin[x]; Sin[y ]; Cos[x]; Cos[y ] als Kerne vorkommen. (Sin[3 x] etwa kann als
Sin[2 x + x] geschrieben werden, woraus sich nach zweimaligem Anwenden der SP-Regeln die
bekannte Formel Sin[3 x] = 3 Sin[x] 4 Sin[x]3 ergibt.)
Auf diese Weise kann die Zahl der verschiedenen Kerne in einem pseudorationalen trigonometrischen Ausdruck deutlich reduziert werden. Kommen etwa nur Winkelfunktionen der Form
Sin[n x] und Cos[n x] für verschiedene n
vor, so lässt sich der Ausdruck durch mehrfaches
Anwenden der SP-Regeln so umschreiben, dass nur noch Sin[x] und Cos[x] als Kerne vorkommen. Wenden Sie schließlich noch die Beziehung Sin[x]2 = 1 Cos[x]2 (oder umgekehrt) an,
2N
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Trigonometrische Ausdrücke
345
dann haben Sie den Ausdruck schon in eine kanonische Form gebracht. Wenn sich dabei nicht
alle Terme weggehoben haben, dann ist der untersuchte Ausdruck auch wirklich verschieden
von Null, d.h. das Simplifikationsproblem für solche trigonometrischen Ausdrücke ist damit
gelöst – kurz, ein effizientes und laufzeitfreundliches Simplifikationsverfahren.
Ähnlich gute, wenn auch nicht ganz so offensichtliche Eigenschaften haben die PS-Regeln (PS
steht für Produkt-Summe). Sie sind so etwas wie das Gegenstück zu den SP-Regeln, denn sie
verwandeln Produkte und Potenzen von Winkelfunktionen mit einfachen Argumenten in Linearkombinationen von Winkelfunktionen mit Mehrfachwinkelargumenten. In der Tat: Ersetzen
Sie in einem Produkt von Winkelfunktionen zwei Faktoren nach der PS-Regel, so entstehen
zwei Produkte mit je einem Faktor weniger. Mehrfache Anwendung der SP-Regeln löst also
nach endlich vielen Schritten alle Produkte auf.
Die Einfachheit dieser Darstellung beruht auf ihrer Linearität, womit sie besonders fürs Integrieren und Differenzieren gut geeignet ist. Sie ist ebenfalls eine (effizient und laufzeitfreundlich berechenbare) kanonische Form, wenigstens für pseudopolynomiale trigonometrische Ausdrücke.
Aus diesen Überlegungen ergeben sich zwei zueinander inverse Simplifikationsstrategien
für trigonometrische Ausdrücke: Mit den SP-Regeln Mehrfachwinkelargumente zugunsten
von Produkten aufzulösen oder mit den PS-Regeln Produkte zugunsten von Mehrfachwinkelargumenten aufzulösen.
Die erste Strategie verfolgt in etwa TrigExpand, die zweite TrigReduce.
Mathematica-Kommandos zur Umformung trigonometrischer Funktionen
Mathematica hält einige Kommandos speziell für die Umformung von Ausdrücken mit trigonometrischen Funktionen bereit. Obwohl keines von ihnen die im letzten Abschnitt beschriebenen
Umformungen punktgenau ausführt, erlauben sie immer noch – insbesondere im Vergleich zu
Simplify und FullSimplify – eine sehr viel gezieltere Vorgehensweise.
TrigExpand versucht (nach den SP-Regeln),
Summen und Vielfache in den Argumenten der trigonometrischen Funktionen aufzulösen. Dabei erhöht sich der polynomiale
Grad der umgeformten Ausdrücke.
TrigExpand Cos [
] Cos[ ]
Cos[
TrigExpand Cos
p
Addison-Wesley Verlag
2
]]
+
] Sin[ ]
ii
2x + Sin[
h
Cos[x]
Für polynomiale Ausdrücke in Sin und Cos ist
das Ergebnis von TrigExpand meist noch vorhersagbar.
[
h
4
p
2 Cos[x] Sin[x]
2
TrigExpand Cos 4x
[
4
Cos[x]
Kofler, Gräbe: Mathematica
[
2
2
]]
2
6 Cos[x]
p
Sin[x]
2
Sin[x]
4
+ Sin[x]
http://www.kofler.cc
346
14 Umformung und Vereinfachung mathematischer Ausdrücke
Sind noch andere Winkelfunktionen mit im
Spiel, dann wird die von Mathematica verfolgte Strategie undurchsichtig. Hier zum Beispiel
wäre eigentlich gar nichts zu expandieren.
TrigExpand Sin x 2 Cot x 2
[
2
3
Cos[x]
4
Einige offensichtliche Faktorisierungen werden dabei aber übersehen.
Eine deutlich weitergehende Funktionalität
als Factor[: : : ; Trig
True] bietet TrigFactor.
Das Kommando versucht verschiedene trigonometrische Umformungen, um dabei eine solche Darstellung zu finden, die sich so
weit wie möglich in Faktoren zerlegen lässt.
Cos[2x] wird nun zerlegt.
!
Allerdings kann man Cos[3x] noch weiter
zerlegen, wie die nebenstehende Rechnung
zeigt. Die Ergebnisse von TrigFactor sind also
nicht so aussagekräftig wie die von Factor für
Polynome.
8
]
+
Cos[x]
[
2
] ]
2
Cot[x] +
2
Sin[x]
+
8
TrigReduce 2Cos Cos [
[
]
[
]]
] + Cos[ + ]
Cos[
TrigReduce Sin x 5
[
1
16
Die bereits vorgestellten Kommandos Factor und Cancel berücksichtigen zusätzliche
Umformungsregeln, wenn Sie die Option
Trig verwenden. Einfache zusätzliche Faktorisierungen bzw. Faktoren werden dabei
gewöhnlich entdeckt.
1
+
2
7 Csc[x]
8
TrigReduce wirkt genau in die umgekehrte
Richtung: Es versucht, Produkte und Potenzen trigonometrischer Funktionen in Linearkombinationen aufzulösen, und nimmt dafür
komplexere Funktionsargumente in Kauf.
[
(10 Sin[x]
]
5 Sin[3 x] + Sin[5 x])
Factor Cos 3x ; Trig ! True
[
[
Cos[x] (
]
]
1 + 2 Cos[2 x])
Cos 2 ; Trig ! True
Cancel 1 Sin
[
[
]
]
]
2 Sin[
Factor Cos 2x ; Trig ! True
[
[
]
]
Cos[2 x]
TrigFactor Cos 2x
[
(Cos[x]
[
]]
Sin[x]) (Cos[x] + Sin[x])
TrigFactor Cos 3x
[
Cos[x] (
[
1 + 2 Cos[2 x])
i
h
]]
h
4Cos x 3 Cos x 3
+
i
== TrigReduce
1 + 2 Cos[2 x]
Was das Kommando TrigFactor drauf hat, sehen Sie am Ergebnis der folgenden Berechnung.
Es ist eine etwas verquere Art, TrigFactor für Cos[n x]; n = 2; : : : ; 6 zu bestimmen. (Alle drei
Funktionen Times, Cos und TrigFactor sind Listable.)
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Trigonometrische Ausdrücke
347
TrigFactorCos f2; 3; 4; 5; 6gx [
(Cos[x]
]
Sin[x]) (Cos[x] + Sin[x])
(Cos[2 x]
(Cos[x]
;
;
Cos[x] (
Sin[2 x]) (Cos[2 x] + Sin[2 x])
Sin[x]) (Cos[x] + Sin[x]) (
;
1 + 2 Cos[2 x])
Cos[x] (1
;
2 Cos[2 x] + 2 Cos[4 x])
1 + 2 Sin[2 x]) (1 + 2 Sin[2 x])
Ein Regelsystem für trigonometrische Funktionen
Wir kommen in diesem Abschnitt auf die SP-Regeln zurück und besprechen, wie Sie aus diesen
ein Regelsystem aufbauen können, das die gewünschten Umformungen vornimmt. Wenn Sie
den vorletzten Abschnitt nicht gelesen haben, so können Sie auch diese Ausführungen überspringen.
Zielgenaue Umformungen lassen sich oft nur mit solchen Regelsystemen erreichen, weil Mathematica nicht für jede spezielle Umformung einen eigenen Befehl bereithalten kann. Hier sind
die beiden Regeln zunächst einmal als s1 und c1 angeschrieben:
s1 Sin x y ! Sin x Cos y Cos x Sin y
c1 Cos x y ! Cos x Cos y Sin x Sin y
=
[
=
+
[
+
]
[
]
]
[
[
]
] +
[
]
[
]
[
[
]
]
[
]
Die verwendete Syntax mit Mustervariablen x ist Ihnen von Funktionsdefinitionen, die im
Kapitel 9 besprochen wurden, bekannt und auch den Rule-Operator
haben wir schon oft
eingesetzt. Solche Regeln können Variablen zugewiesen und als s1 ; c1 in einer Liste zu einem
Regelsystem zusammengestellt werden.
f
!
g
Angewendet werden Regeln mit dem Operator =: (ReplaceAll, einmalige Anwendung der Regeln) oder ==: (ReplaceRepeated, Anwendung so oft wie möglich bzw. bis keine Änderungen
mehr eintreten), wie bereits auf Seite 332 beschrieben. Hier wird Sin[x + y + z ] nach den beiden
vorgegebenen Regeln umgeformt. Sie sehen an der Form des Ergebnisses, dass zur Anwendung der Regeln das Argument x + y + z (also Plus[x; y; z ]) zunächst als x + (y + z ) zerlegt
wurde. Der zweite Schritt (deshalb ==: statt =:) wendet die Regeln noch einmal auf das neue
Argument y + z an.
Sin x y z ==: fs1; c1g
[
+
+
]
Cos[x] (Cos[z] Sin[y] + Cos[y] Sin[z]) + Sin[x] (Cos[y] Cos[z]
Sin[y] Sin[z])
Das Ergebnis mit seinen vielen Klammern ist noch recht unübersichtlich. Wir können die Klammern am Schluss mit Expand auflösen, aber das ist nicht gut, weil ein solcher Schritt möglichst
frühzeitig im Vereinfachungsprozess einsetzen und bereits auf Teilergebnisse angewendet werden sollte. Ein nachträgliches Expand könnte sonst (in komplizierteren Fällen) mit tausenden
von Klammern konfrontiert sein.
Die zusätzliche Regel
d2 a
=
> Expand[a]
:
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
348
14 Umformung und Vereinfachung mathematischer Ausdrücke
!
(:> statt , denn Expand soll ja nicht jetzt, bei der Regeldefinition, mit a, sondern später, bei
der Regelanwendung, mit dem Wert von a ausgeführt werden) leistet nicht das Geforderte:
Sin x y z ==: fs1; c1; d2g
[
+
Cos[y
]
z] Sin[x]
Cos[x] Sin[y
z]
Der Grund liegt in der Art, wie Mathematica Ersetzungen sucht. Zunächst wird untersucht, ob
eines der Muster auf den ganzen Ausdruck passt, und ggf. die entsprechende Regel angewendet. Passt keine der Regeln auf den gesamten Ausdruck, so werden rekursiv die Teilausdrücke
der ersten Ebene untersucht und bearbeitet usw. Hat sich nach einer Regelanwendung nichts
geändert, so hört ReplaceAll (mit diesem Teilausdruck) auf. Leider passt die Regel d2 immer auf
den Gesamtausdruck und ReplaceAll hat keinen Grund, Ersetzungen auch für Teilausdrücke
wie Cos[y z ] zu versuchen.
Wir verwenden eine andere Idee und formulieren die Distributivgesetze, die Expand anwendet,
als Regel d1 :
d1 a b c ! a c b c
= (
+
)
+
Sie hat nicht den eben beschriebenen Nachteil, denn sie ist nur anwendbar, wenn wirklich
etwas ausmultipliziert werden kann. Sie werden fragen, was mit Ausdrücken der Form a (b +
c) geschieht: Auch diese sind von der vereinbarten Regel erfasst, denn Times ist Orderless. In
diesem Fall versucht Mathematica, Produkte in allen möglichen Konstellationen der Faktoren
auf die Anwendbarkeit der Regel zu prüfen.
Sin x y z ==: fs1; c1; d1g
[
+
]
Cos[y] Cos[z] Sin[x]
Cos[x] Cos[z] Sin[y] + Cos[x] Cos[y] Sin[z] + Sin[x] Sin[y] Sin[z]
Leider werden noch keine Mehrfachwinkel zerlegt, denn auf die Umformung Sin[2x] = Sin[x +
x] kommt Mathematica nicht von allein. Die können Sie aber durch die nächsten beiden Regeln
bewirken:
s2 Sin n Integer x = n > 1 ! Sin x Cos n 1 x Cos x Sin n 1 x
c2 Cos n Integer x = n > 1 ! Cos x Cos n 1 x Sin x Sin n 1 x
=
=
[
]
[
;
]
[
;
]
[
[(
]
[(
)
] +
)
]
[
]
[
[(
]
[(
)
)
]
]
Natürlich würde eine Regel wie
Sin n Integer x
[
]
=;
n > 1 ! Sin x n 1 x
[
+ (
)
]
nicht ausreichen, denn das zerlegte Argument würde sofort wieder vereinfacht, noch ehe die
Regel s1 greifen kann.
s2 und c2 sind konditionale Regeln, denn es wird nicht nur geprüft, ob die Ausdrücke auf gewisse
Muster passen, sondern die Belegungen der Mustervariablen müssen auch noch zusätzliche Eigenschaften erfüllen. Die dabei verwendete Syntax ist dieselbe wie für partiell definierte Funktionen, siehe Seite 187. Die Einschränkung der Mustervariablen n auf ganze Zahlen größer als 1
garantiert die Termination der Regelanwendungen – im allgemeinen Fall ein diffiziles Problem.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Trigonometrische Ausdrücke
349
Sin 12x ==: fs2; c2; d1g
[
]
12 Cos[x]
11
Sin[x]
3
220 Cos[x]
220 Cos[x]
Sin[x]
9
9
3
7
Sin[x]
+ 792 Cos[x]
Sin[x]
5
5
792 Cos[x]
7
Sin[x] +
11
12 Cos[x] Sin[x]
Unser kleines Regelsystem wirkt auf diesen Ausdruck bereits wie TrigExpand. Nun wollen wir
noch die Beziehung Sin[x]2 + Cos[x]2 = 1 einsetzen, um Sin-Potenzen mit Exponenten größer
als 1 aufzulösen. Die Regel
Sin x 2 ! 1 Cos x 2
[
]
[
]
reicht dafür nicht aus, denn sie würde nur Sin-Potenzen ersetzen, deren Exponent genau gleich
2 ist (Mathematica fasst seine Regeln, etwa im Gegensatz zum CAS Reduce, immer als exakte
Regeln auf, nicht als algebraische). Die Lösung bietet folgende Regel, die wieder einer Aufspaltung n = 2 + (n 2) entspricht:
n Integer
2
n 2
sc Sin x
=
[
=;
]
n > 1 ! 1 Cos x Sin x
[
]
[
]
Damit können Sie nun z.B. Sin[5x] in einen Ausdruck zerlegen, der Sin[x] nur noch in der
ersten Potenz enthält. Der Ausdruck kann mit Factor weiter zerlegt werden in eine Produktdarstellung von Sin[5x], die TrigFactor nicht findet:
Sin 5x ==: fs2; c2; d1; scg
[
]
2
Sin[x]
12 Cos[x]
Sin[x] + 16 Cos[x]
Collect ; Sin x
[%
1
%
[
]]
12 Cos[x]
2
+ 16 Cos[x]
== Factor
1
4
2
2 Cos[x] + 4 Cos[x]
4
Sin[x]
Sin[x]
2
1 + 2 Cos[x] + 4 Cos[x]
Sin[x]
Sin 5x == TrigFactor
[
]
(1 + 2 Cos[2 x] + 2 Cos[4 x]) Sin[x]
Trigonometrische Umformungen in Anwendungen
Die Vielfalt der möglichen zueinander äquivalenten Formen, in denen ein trigonometrischer
Ausdruck auftreten kann, wird beim Integrieren besonders deutlich. Sie können ja zur Probe
einfach mal einen etwas komplizierteren trigonometrischen Ausdruck nehmen, die zugehörige
Stammfunktion berechnen und diese wieder ableiten. Aus mathematischer Sicht stimmt das
Ergebnis mit dem Ausdruck, von dem Sie gestartet sind, überein. Was meinen Sie, wie oft es
Ihnen gelingt, mit geeigneten Umformungen den Kreis auch syntaktisch zu schließen und zum
Ausgangspunkt zurückzukehren?
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
350
14 Umformung und Vereinfachung mathematischer Ausdrücke
Wir wollen in diesem Abschnitt einige solche Beispiele partiell diskutieren und die besonders
bemerkenswerten Aspekte hervorheben. Mehr (auch aus Platzgründen) auf der Begleit-CD.
Wir beginnen mit einem selbst gebauten Werkzeug, der Funktion tests, die auf einen Ausdruck
die vier Kommandos zum Vereinfachen trigonometrischer Ausdrücke (Simplify, TrigReduce,
TrigExpand, TrigFactor), die wir betrachtet haben, anwendet.
tests h
[
] :=
h & = fSimplify; TrigReduce; TrigExpand; TrigFactorg
#[
]
@
Sie hätten das vielleicht anders geschrieben, aber so geht’s auch: Map (Kurzform =@) setzt jede
der vier angegebenen Funktionen in #[h] für den Platzhalter # ein, führt die Aufrufe aus und
sammelt die Ergebnisse in einer Liste auf.
d1 Sin 3x Sin 5x i1 Integrate d1; x
Das erste Beispiel ist recht harmlos. Das Produkt d1 wird offensichtlich mit TrigReduce
zum Integrieren vorbereitet. Im Ergebnis h1
treffen die Winkelfunktionen mit den alten
und den neuen Argumenten aufeinander. Sowohl TrigExpand als auch TrigReduce sollten
damit spielend fertig werden und werden es
auch, ebenso wie die beiden anderen Kommandos.
=
1
4
[
]
[
];
1
Sin[2 x]
h1 d1 D i1; x
[
1
2
Cos[2 x] +
h1 == tests
[
]
Sin[8 x]
16
=
=
]
1
2
Cos[8 x] + Sin[3 x] Sin[5 x]
f; ; ; g
0 0 0 0
Hier sehen Sie zum Vergleich die Wirkung der vier Simplifikationskommandos auf den trigonometrischen Ausdruck i1 . TrigReduce und Simplify (die ersten beiden Listenelemente) liefern
dasselbe Ergebnis – eine Linearkombination von Winkelfunktionen. Der dritte Eintrag kommt
von TrigExpand – alle Mehrfachwinkel sind aufgelöst. Das vierte Ergebnis (von TrigFactor) ist
wegen der auftretenden komplexen Zahlen nicht zufrieden stellend.
i1 == tests
n
1
(4 Sin[2 x]
16
1
2
Cos[x] Sin[x]
i
Cos[x] (
i
;
Sin[8 x])
1
2
1
16
7
Cos[x]
;
(4 Sin[2 x]
Sin[x] +
7
2
Sin[8 x])
5
Cos[x]
i
3
7
Sin[x]
Cos[x]
2
i
3
5
Sin[x]
+
o
3
1
2
7
Cos[x] Sin[x]
;
+ (1 + ) Cos[2 x]) (1 + (1 + ) Cos[2 x]) Sin[x]
Das zweite Beispiel ist eine Nuance schwieriger, denn x2 und x3 sind gemeinsame Vielfache
von x6 , also keiner Variablen, sondern eines
Ausdrucks. Aber da 56x von TrigExpand nicht
als 56 x (so ist die interne Darstellung, schauen Sie sich die FullForm an!), sondern als 5 x6
interpretiert wird, steht dem Anwenden der
Mehrwinkelformel nichts im Wege.
Addison-Wesley Verlag
h i
h i
d2 Cos x2 Cos x3
i2 Integrate d2; x
=
=
[
h i
3 Sin
x
+
6
3
5
]
h
Sin
d2 D i2; x == tests
[
;
5 x
i
6
]
f; ; ; g
0 0 0 0
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Trigonometrische Ausdrücke
351
Noch eine Nuance schwieriger ist das folgende Beispiel, bei dem Mathematica leider voll aus
dem Rennen ist. Die vielen mysteriösen Einheitswurzeln lassen sich weder mit Simplify noch
mit FullSimplify beseitigen.
h
i
h
i
d3 Sin 2x 6 Cos 3x 4 i3 Integrate d3; x
5=6
1=3 1
i
i
4
4
4
=
+
+
1
20
(
+
1)
i
20
;
+ (
1)
Cos[3 x]
5=6
(
1)
=
[
Cos[x] Cos
]
+3 x
Sin[3 x]
1
5=6
(
1)
Cos[3 x]
Cos[5 x] Cos
4
+
+ 3 x
:::
+
Sin[3 x]
Dabei ist der Weg eigentlich klar: Umformungen wie TrigReduce sollten den Integranden ‘weich
klopfen’ und dann dürfte die Stammfunktion kein Problem mehr sein. Wenn ihn Mathematica
nicht zu gehen scheint, dann können wir ihn ja mal selbst probieren:
d3a d3 == TrigReduce
=
1
h
Sin
2
5
+ xi + Sin h 12
i3a Integrate d3a; x
=
1
[
1
2
2
1
2
(
7=12
1)
1=12
(
1)
i
12
+ 5 x
]
5=6 1 + (
1)
5=6 1 + (
1)
1
Cos[x] +
1
10
Sin[x]
1)
5=12
(
10
11=12
(
1)
1 + (
1 + (
1)
1=6 1 =6 1)
Cos[5 x]+
Sin[5 x]
Der erste Schritt war erfolgreich, aber beim zweiten, dem nunmehr trivialen, patzt Mathematica. Es mag die zusammengesetzten Argumente der Winkelfunktionen nicht. Mit TrigExpand
werden wir sie los, aber auch das 5 x im zweiten Term. Eigentlich brauchten wir jetzt eine
punktgenaue Umformung, wie sie die Regeln s1 ; c1 aus dem vorigen Abschnitt liefern. Wir
versuchen sie schon mal und vertrösten den Leser, der diesen Abschnitt übersprungen hat, auf
eine weitere Lösung.
f
d3b d3 ==: fs1; c1g
g
=
1
2
1
Cos[2 x]
p
3 Sin[2 x]
2
p
Cos[3 x]
2
p
Sin[3 x]
2
Dieser Ausdruck bereitet Mathematica nun keine Schwierigkeiten mehr. Das Ergebnis des Integrate-Kommandos fällt wie immer etwas lang aus, deshalb ist gleich ein Simplify nachgeschoben.
i3b Integrate d3b; x == Simplify
=
[
p
1
20
5
p
3
]
1
Cos[x] +
1 +
p
3
Cos[5 x] + 5 (1 +
p
3) Sin[x] + (1
p
3) Sin[5 x]
2
Auch die Probe, wenigstens mit d3b statt d3, bereitet nun keine Mühe mehr.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
352
14 Umformung und Vereinfachung mathematischer Ausdrücke
Wir hatten noch eine Lösung ohne Regelsystem versprochen. Dann müssen Sie den oben skizzierten Weg gehen, erst mit TrigReduce die Linearkombination herstellen und dann mit TrigExpand die Summen, die Mathematica aus dem Konzept brachten, auflösen. Leider wird dabei
auch 5 x mit expandiert, so dass die Linearität wieder verloren geht. Also jagen Sie noch einmal
TrigReduce drüber und schon haben Sie einen netten, integrablen Ausdruck! Sowohl Anzahl als
auch Reihenfolge der dabei vorgenommenen Umformungen sind wesentlich.
d3c d3 == TrigReduce == TrigExpand == TrigReduce
=
1
p
p
p
p
2 Cos[x]
8
2 Sin[5 x] +
1
8
[
p
2
p
1
1 +
2
5
p
3
1 +
2 Cos[5 x] +
p
6 Cos[5 x] +
p
2 Sin[x]
p
6 Sin[x]+
6 Sin[5 x]
i3c Integrate d3c; x
=
p
6 Cos[x]
]
Cos[x]
p
3
1
p
5
2
1 +
p
3
Cos[5 x]
p
2
1 +
p
3
Sin[x]+
Sin[5 x]
Eigentlich ganz logisch, oder? Etwas Verständnis sowohl für die zugrunde liegende Mathematik als auch grobe Vorstellungen von Mathematica-Interna waren natürlich erforderlich. Aber
das Ergebnis, das mit einem Werkzeug erzielt wird, kann nicht besser sein als der, der es gebraucht. Überlegungen und Kenntnisse wie die hier vorgetragenen sind eher typisch als die
Ausnahme, wenn Sie Mathematica intelligent einsetzen wollen und sich nicht mit ‘Lösungen
von der Stange’ (bzw. Nicht-Lösungen) begnügen. Auf der Begleit-CD finden Sie noch einige
weitere (aber nicht ganz so schlimme) Beispiele zum (elementaren) Integrieren trigonometrischer Funktionen.
Syntaxzusammenfassung
Allgemeine Simplifikations-Kommandos
Simplify f
[ ]
versucht den Ausdruck f zu vereinfachen.
Simplify f ; Zusatzannahmen
[
]
versucht den Ausdruck f unter den angegebenen Zusatzannahmen zu vereinfachen.
Wenn für eine Variable eine Ungleichung angegeben wird, setzt Mathematica automatisch
voraus, dass diese Variable reell ist.
Simplify f ; x 2 Bereich
[
]
2
versucht den Ausdruck f unter der Annhame x Bereich zu vereinfachen. Als Bereiche
können Complexes, Reals, Algebraics, Rationals, Integers, Primes, Booleans eingesetzt werden.
Kann mit anderen booleschen Prädikaten kombiniert werden.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Syntaxzusammenfassung
353
FullSimplify f ; TimeConstraint ! n
[
]
wie Simplify, aber gründlicher (und langsamer). Besonders im Zusammenhang mit algebraischen Zahlen kann noch einmal eine deutliche Vereinfachung erreicht werden.
Durch die Option TimeConstraint kann ein Zeitlimit in Sekunden angegeben werden. Zusatzannahmen und Bereichsangaben sind ebenfalls möglich.
Vereinfachung polynomialer, rationaler und pseudorationaler Ausdrücke
Klammern auflösen
Expand f
[ ]
multipliziert die Produkte in polynomialen oder pseudopolynomialen Ausdrücken aus.
ExpandAll f
[ ]
expandiert Produkte in allen Teilen eines Ausdrucks.
PowerExpand f
[ ]
expandiert Potenzen/Wurzeln von Produkten und Quotienten in Produkte und Quotienten von Potenzen/Wurzeln.
Das Kommando ist nur eingeschränkt mathematisch korrekt, siehe Seite 332!
LogicalExpand f
[ ]
vereinfacht den Ausdruck nach den Regeln der booleschen Algebra.
Ausdrücke nach Variablen zusammenfassen
Collect f ; x
Collect f ; x; g
[
]
[
]
gruppiert den Ausdruck nach Potenzen von x. Die optionale Funktion g wird auf alle
Koeffizienten angewendet.
CoeÆcientList f ; x
CoeÆcient f ; x; n
[
[
]
]
Liste der Koeffizienten bzw. Koeffizient vor xn , wenn f nach Potenzen von x gruppiert
ist
CoeÆcientList2f ; fx; yg
CoeÆcient f ; x y
[
[
]
]
multivariate Variante dieser Kommandos
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
354
14 Umformung und Vereinfachung mathematischer Ausdrücke
Faktorzerlegung
Factor f
[ ]
zerlegt den Ausdruck in ein Produkt.
!
!
p
Mit den Optionen GaussianIntegers
True oder Extension
d kann der Grundbereich,
über dem faktorisiert wird (Standard: ), verändert werden.
FactorList f
Q
[ ]
klammert einen gemeinsamen numerischen Faktor aus.
Rationale Funktionen
Together f
[ ]
bringt den Ausdruck auf einen gemeinsamen Nenner.
Numerator f
Denominator f
[ ]
[ ]
ermitteln Zähler und Nenner eines Bruchs.
Cancel f
[ ]
kürzt einen Bruch.
Apart f
Apart f ; x
[ ]
[
]
führt eine Partialbruchzerlegung des Ausdrucks (bzgl. der Variablen x) durch.
Vereinfachung trigonometrischer Ausdrücke
TrigExpand f
[ ]
Winkelsummen und Mehrfachwinkel in Argumenten zugunsten von Produkten von
Winkelfunktionen auflösen. Vereinfacht Argumente, aber Grad der Ausdrücke wächst.
TrigReduce f
[ ]
Produkte und Potenzen von Winkelfunktionen zugunsten von Mehrfachwinkelargumenten auflösen. In günstigen Fällen bleiben danach nur Linearkombinationen von Winkelfunktionen übrig.
TrigFactor f
[ ]
versucht, trigonometrische Ausdrücke so umzuformen, dass sie in möglichst viele Faktoren zerlegt sind.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Syntaxzusammenfassung
355
Factor f ; Trig ! True
Cancel f ; Trig ! True
[
]
[
]
funktionieren wie Factor bzw. Cancel unter der zusätzlichen Berücksichtigung trigonometrischer Umformungen.
TrigToExp f
ExpToTrig f
[ ]
[ ]
wandelt trigonometrische Ausdrücke in die Exponentialschreibweise um bzw. diese
zurück in die Standarddarstellung.
Addison-Wesley Verlag
Kofler, Gräbe: Mathematica
http://www.kofler.cc
Herunterladen