Mathematica 6.0 Grundlegendes zu Mathematica - univie.ac.at · Hilfe Mathematica bietet eine...
Transcript of Mathematica 6.0 Grundlegendes zu Mathematica - univie.ac.at · Hilfe Mathematica bietet eine...
Einführung in das Arbeiten mit Mathematica 6.0
Autor: Harald Höller
letzte Änderung: 17.10.07
Interaktive Nutzung von Mathematica 6
Grundlegendes zu Mathematica 6
� Einleitende Bemerkungen
Mit Hilfe von Mathematica lassen sich analytische, numerische und grafische Berechnungen anstellen. Mathematica bieteteine relativ simple und instruktive logische Syntax. Die meisten bekannten Funktionen haben in Mathematica einesyntaktisch ähnliche Entsprechung. Das Argument einer Funktion steht immer in eckigen Klammern (z.B. Sin[x]). AuchOperationen werden auf Argumente in eckigen Klammern angewandt; die Liste von Argumenten wird mit Beistrichengetrennt (z.B. Integrate[x,x]).
� Datei - Typen
Der Standard - Dateityp ist das Notebook (.nb), in dem sich Berechnungen interaktiv anstellen lassen. Unter File -> Save Asfindet man noch einige Dateiformate (.html, .txt, .pdf), in die ein Notebook für reines Lesen exportiert werden kann. Dateien vom Format Notebook lassen sich nur über Mathematica bzw. eine MathReader öffnen. Leider ist die Abwärts-Kompatibilität gar nicht und die Aufwärts-Kompatibilität eingeschränkt gegeben. Das bedeutet unter Mathematica 6 erstelleNotebooks, lassen sich mit einer Mathematica 5 (oder früher) Installation gar nicht öffnen.
� Eingabe/Ausgabe
Die Eingabe von Befehlen in Mathematica funktioniert über die Enter - Taste (nicht Return), die entweder beimNummernblock zu finden ist, oder über Shift + Return gesetzt wird. Jede Eingabe/Ausgabe wird intern nummeriert.
In[1]:= 1
Out[1]= 1
Auf In/Outputs lässt sich also Bezug nehmen.
In[2]:= 1 + Out@1D
Out[2]= 2
Bzw. auf den jeweils vorangegangenen Output über Out[%]
In[3]:= Out@%D
Out[3]= 2
� Hilfe
�
Hilfe
Mathematica bietet eine umfangreiche eingebaute Hilfe, die durch eine online-Dokumentation komplettiert wird. DurchEingabe von F1 gelangt man zum Documentation Center und kann nach Stichworten suchen. Das Ergebnis der Suchanfragewird nach Relevanz gelistet. Möchte man nur eine Kurzzusammenfassung eines Befehls, tippt man einfach ein Fragezeichen und den Befehl ein
In[4]:= ? Integrate
Integrate@ f , xD gives the indefinite integral à f d x.
Integrate@ f , 8x, xmin, xmax<D gives the definite integral àxmin
xmax
f d x.
Integrate@ f , 8x, xmin, xmax<, 8y, ymin, ymax<, ¼D gives the multiple integral àxmin
xmax
d x àymin
ymax
dy ¼f.
und erhält die wichtigsten Informationen aus der Hilfe. Mit ?xyz* bekommt man alle Einträge der Hilfe, die mit xyz
beginnen.
In[5]:= ? Integ*
System`
Integer
IntegerEx�
ponent IntegerPart IntegerQ
IntegerStr�
ing Integrate
IntegerDi�gits
IntegerLe�
ngthIntegerPa�
rtitions Integers Integral
� Der Kernel
Mathematica ' merkt' sich einmal definierte Größen, Aus- und Eingaben innerhalb des Notebooks. Wie oben beschriebenkann man auf frühere Ergebnisse zurückgreifen. Weist man einer Variable eine Größe zu, so behält die Variable dieseGröße, solange der Kernel läuft.
In[6]:= a = 100
b = 1000
c = 1 000 000
Out[6]= 100
Out[7]= 1000
Out[8]= 1 000 000
In[9]:= a + b + c
Out[9]= 1 001 100
Um diesen Speicher zu löschen, gibt es zwei Möglichkeiten. Der Befehl Clear[Argumente] löscht einzelne Definitionenbzw. unter Evaluation -> Quit Kernel -> Local kann man den Kernel gänzlich stoppen, und so auch Berechnungenabbrechen.
2 einfuehrung_expand_m6.nb
In[10]:= ? Clear
Clear@symbol1, symbol2, ¼D clears values and definitions for the symboli.
Clear@ form1, form2, ¼D clears values and definitions
for all symbols whose names match any of the string patterns formi.
In[11]:= Clear@a, b, cD
In[12]:= a + b + c
Out[12]= a + b + c
Symbolisches Rechnen mit Mathematica - Basics
� Definitionen und Zuweisungen
Die einfachste Form einer Zuweisung der rechten Seite, nämlich über das Gleichheitszeichen haben wir schonkennengelernt.
In[13]:= ? =
lhs = rhs evaluates rhs and assigns the result to be
the value of lhs. From then on, lhs is replaced by rhs whenever it appears.
8l1, l2, ¼< = 8r1, r2, ¼< evaluates the ri, and assigns the results to be the values of the corresponding li.
In[14]:= d = 1
Out[14]= 1
Möchte man den Output unterdrücken, definiert man mit Doppelpunkt und Gleichheitszeichen
In[15]:= ? :=
lhs := rhs assigns rhs to be the delayed value of lhs. rhs is maintained in an
unevaluated form. When lhs appears, it is replaced by rhs, evaluated afresh each time.
In[16]:= f := 1
� Funktionen
Größen mit Argumenten, also solche der Form f[x] sind in Mathematica statische Gebilde. Möchte man, dass das Argumenteiner Größe eine Varible ist, muss man bei der Definition der Größe (bzw. der Funktion) Variable + Unterstrich setzen.
DONT :
In[17]:= h@xD := Sin@xD
In[18]:= h@1D
Out[18]= h@1D
DO :
In[19]:= g@x_D := Sin@xD
einfuehrung_expand_m6.nb 3
In[20]:= g@1D
Out[20]= Sin@1D
Wie man sieht, versucht Mathematica nicht immer, numerische Werte auszugeben.
� Eingabe/Ausgabe II
Möchte man den numerischen Wert einer Ausgabe erzwingen, setzt man N[Argument].
In[21]:= N@g@1DD
Out[21]= 0.841471
bzw. lassen sich Befehle, die sich auf den ganzen Ausdruck beziehen auch hinten anhängen, indem man zwei Schrägstricheanfügt.
In[22]:= g@1D �� N
Out[22]= 0.841471
� Grundlegende Operationen (Skalare)
Die Addition haben wir oben schon kennengelernt, sie wird - wenig überraschend - mit dem Plus - Zeichen (+) gesetzt,Subtraktion über das Minus (-). Die Multiplikation kann über Stern (*) oder ein Leerzeichen gesetzt werden. DasLeerzeichen wird von Mathematica automatisch durch ein x ersetzt.
In[23]:= 2 *2
Out[23]= 4
In[24]:= 2 ´2
Out[24]= 4
Division von skalaren Größen funktioniert auch wie man es sich erwarten würde.
In[25]:= 2 �2
Out[25]= 1
Verschachtelte Ausdrücke können ebenfalls wie am Papier, mit runden Klammern eingegeben werden.
In[26]:= H1 + H4 - 3L *2L � H1 + 1L + 1
Out[26]=5
2
In[27]:= Clear@"Global`*"D
� Grundlegende Befehle - Eingabe/Ausgabe III
Bisher haben wir Mathematica als ' Taschenrechner' kennengelernt. Wirklich interessant werden Computeralgebrasysteme,wenn es um kompliziertere Berechnungen geht. Integrale, Differentialgleichungen oder algebraische Gleichungssystemelösen sind typische Anwendungsbeispiele.
� Bsp. : Differenzieren
Um die Syntax ein wenig kennenzulernen, betrachten wir die Differentiation von skalaren Funktionen.
4 einfuehrung_expand_m6.nb
In[28]:= ? D
D@ f , xD gives the partial derivative ¶f � ¶x.
D@ f , 8x, n<D gives the multiple derivative ¶nf � ¶x
n.
D@ f , x, y, ¼D differentiates f successively with respect to x, y, ¼.
D@ f , 88x1, x2, ¼<<D for a scalar f gives the vector derivative H¶f � ¶x1, ¶f � ¶x2, ¼L.Berechnen wir das Differential einer nicht näher definierten Funktion F[x], so erhalten wir als Output F'[x]. Wie im Hilfe-Eintrag beschrieben werden die abzuleitende Funktion und die Variable nach der wir ableiten wollen, durch einen Beistrichgetrennt.
In[29]:= D@F@xD, xD
Out[29]= F¢@xD
Definieren wir eine Funktion G (auch statisch), d.h. weisen wir der Größe eine rechte Seite zu, so erhalten wir als Output dasErgebnis der partiellen Ableitung.
In[30]:= G@x_, y_D := x *y
In[31]:= D@G@x, yD, xD
Out[31]= y
Zweite partielle Ableitung nach x
In[32]:= D@G@x, yD, 8x, 2<D
Out[32]= 0
Aufeinanderfolge von Ableitungen nach einer Liste von Variablen
In[33]:= D@G@x, yD, x, yD
Out[33]= 1
� Simplify
In[34]:= ? Simplify
Simplify@exprD performs a sequence of algebraic
and other transformations on expr, and returns the simplest form it finds.
Simplify@expr, assumD does simplification using assumptions.
In[35]:= ? FullSimplify
FullSimplify@exprD tries a wide range of transformations on expr
involving elementary and special functions, and returns the simplest form it finds.
FullSimplify@expr, assumD does simplification using assumptions.
einfuehrung_expand_m6.nb 5
Lineare Algebra - Darstellung und Operationen von Vektoren, Matrizen und Tensoren
Indizierte Größen als Listen von Einträgen
� Darstellung von Vektoren, Matrizen, Tensoren
Vektoren und Tensoren werden in Mathematica zunächst als Listen von Einträgen dargestellt. Alle Operationen auf dieseGrößen werden - sofern man nichts Anderes definiert - in einem euklidischen n-Raum gebildet (kartesiche Koordinaten).
In[36]:= vec = 8a, b, c, d<Out[36]= 8a, b, c, d<
Größe mit einem Index - in Mathematica eine Liste von Zahlen.
In[37]:= ? Dimensions
Dimensions@exprD gives a list of the dimensions of expr.
Dimensions@expr, nD gives a list of the dimensions of expr down to level n.
In[38]:= Dimensions@vecD
Out[38]= 84<
In[39]:= tensor :=
888a, b, c<, 8a, b, c<, 8a, b, c<, 8a, b, c<<, 88a, b, c<, 8a, b, c<, 8a, b, c<, 8a, b, c<<<
In[40]:= Dimensions@tensorD
Out[40]= 82, 4, 3<
Größe mit drei Indices (Anzahl der Indices entspricht dem Rang des Tensors) - Zahlenlisten der Länge 2, 4, 3. Hinweis:gerade bei verschachtelten Ausdrücken wie dem oberen 'Tensor' ist es sinnvoll, bei der Eingabe nachdem eine Klammergeöffnet wurde, diese auch gleich wider zu schließen; d.h. [] eintippen und die Klammer befüllen.
� Bsp. : Einheitsmatrix
In[41]:= ? IdentityMatrix
IdentityMatrix@nD gives the n�n identity matrix.
In[42]:= M := IdentityMatrix@10D
In[43]:= Dimensions@MD
Out[43]= 810, 10<
Die Einheitsmatrix ist eine Größe mit zwei Indices.
� Listen automatisch befüllen
Oft ist es auch wünschenswert, sich Listen automatisch generieren zu lassen.
6 einfuehrung_expand_m6.nb
In[44]:= ? Table
Table@expr, 8imax<D generates a list of imax copies of expr.
Table@expr, 8i, imax<D generates a list of the values of expr when i runs from 1 to imax.
Table@expr, 8i, imin, imax<D starts with i = imin.
Table@expr, 8i, imin, imax, di<D uses steps di.
Table@expr, 8i, 8i1, i2, ¼<<D uses the successive values i1, i2, ¼.
Table@expr, 8i, imin, imax<, 8 j, jmin, jmax<, ¼D gives a nested list. The list associated with i is outermost.
In[45]:= H = Table@1 � Hi + j - 1L, 8i, 1, 10<, 8j, 1, 10<D �� MatrixForm
Out[45]//MatrixForm=
1 1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
19
In[46]:= ? Subscript
Subscript@x, yD is an object that formats as xy.
Subscript@x, y1, y2, ¼D formats as xy1,y2,¼.
In[47]:= Table@Subscript@m, i, jD, 8i, 3<, 8j, 3<D �� MatrixForm
Out[47]//MatrixForm=
m1,1 m1,2 m1,3m2,1 m2,2 m2,3m3,1 m3,2 m3,3
Lineare Gleichungssysteme und Systeme von Gleichungen lösen
� Lösen linearer Gleichungssysteme
Eines der wichtigsten Einsatzgebiete von Computeralgebrasystemen und numerischen Codes ist es, Gleichungssysteme zulösen. Ob man die aus den Kirchhoff'schen Regeln abgeleiteten Gleichungen für Spannung und Stromstärke in einemkomplizierten Schaltkreis berechnen oder die Lösung eines Systems aus Differentialgleichungen bestimmen möchte; imGrunde reduziert sich das Problem mathematisch auf das Invertieren von Matrizen. Je größer diese Systeme werden (also jemehr Gleichungen zu lösen sind), desto weniger gut handhabbar werden sie. Aber auch an den Computer sind hier Grenzen gesetzt, was wir am Beispiel der oben definierten Matrix H kurz beleuchtenwollen.
einfuehrung_expand_m6.nb 7
In[48]:= ? LinearSolve
LinearSolve@m, bD finds an x which solves the matrix equation m.x == b.
LinearSolve@mD generates a LinearSolveFunction@¼D which can be applied repeatedly to different b.
Dieser Befehl löst also ein Gleichungssystem der Form m.x=b. Aus der Theorie der linearen Algebra weiß man, dass dasGleichungssystem nicht lösbar ist, wenn die Determinante von m verschwindet, weil die Matrix nicht invertierbar ist.
� Bsp. : Hilbert - Matrix
Wir betrachten einen beliebigen Vektor b
In[49]:= b := 81, 1, 1, 1, 1, 1, 1, 1, 1, 1<
und wollen das Gleichungssystem H.x=b auflösen, d.h. den Lösungsvektor x bestimmen.
In[50]:= LinearSolve@H, bD
Out[50]= LinearSolveB
1 1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
19
, 81, 1, 1, 1, 1, 1, 1, 1, 1, 1<F
Mathematica spuckt uns die Eingabe wieder aus.
In[51]:= ? Det
Det@mD gives the determinant of the square matrix m.
In[52]:= Det@HD
Out[52]= DetB
1 1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
19
F
8 einfuehrung_expand_m6.nb
In[53]:= DetB
1 1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
3
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
4
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
5
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
6
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
7
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
8
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
19
F
Out[53]=1
46 206 893 947 914 691 316 295 628 839 036 278 726 983 680 000 000 000
Auch hier erhalten wir zunächst keine Antwort auf die Frage nach der Determinante von H; wir fragen noch einmal.
Die Determinante ist fast Null. Die Elemente der Hilbert-Matrix 'verdünnen' sich nach rechts unten, d.h. je größer dieDimension der Matrix, desto schwieriger ihre Inversion.
In[54]:= ? HilbertMatrix
HilbertMatrix@nD gives the n´n Hilbert matrix with elements of the form 1 � Hi + j - 1L.HilbertMatrix@8m, n<D gives the m´n Hilbert matrix.
Die fünfdimensionale Hilbert - Matrix
In[55]:= HilbertMatrix@5D
Out[55]= ::1,1
2,1
3,1
4,1
5>, :
1
2,1
3,1
4,1
5,1
6>,
:1
3,1
4,1
5,1
6,1
7>, :
1
4,1
5,1
6,1
7,1
8>, :
1
5,1
6,1
7,1
8,1
9>>
und ein beliebiger Vektor c
In[56]:= c := 81, 2, 3, 4, 5<
führen zu einem numerischen Ergebnis. Mathematica kann das Gleichungssystem also lösen und die Lösung ist eindeutig.
In[57]:= LinearSolve@HilbertMatrix@5D, cD
Out[57]= 8125, -2880, 14 490, -24 640, 13 230<
In[58]:= Det@HilbertMatrix@5DD
Out[58]=1
266 716 800 000
� Weiteres Beispiel :
In[59]:= A = 881, 2, 3, 1, 2<, 84, 5, 6, 4, 4<, 80, 8, 9, 1, 2<, 81, 1, 1, 0, 0<, 80, 0, 9, 0, 1<<
Out[59]= 881, 2, 3, 1, 2<, 84, 5, 6, 4, 4<, 80, 8, 9, 1, 2<, 81, 1, 1, 0, 0<, 80, 0, 9, 0, 1<<
In[60]:= d = 83, 6, 17, 5, 5<
Out[60]= 83, 6, 17, 5, 5<
einfuehrung_expand_m6.nb 9
In[61]:= x = LinearSolve@A, dD
Out[61]= :16
7,472
231,155
231, -
764
231, -
80
77>
In[62]:= Det@AD
Out[62]= 231
Probe :
In[63]:= A.x
Out[63]= 83, 6, 17, 5, 5<
Das lineare Gleichungssystem hat eine eindeutige Lösung, die Determinante ist ungleich Null
In[64]:= Clear@"Global`*"D
� Ein System von Gleichungen lösen
Nicht immer hat man sein Gleichungssystem in Matrixform aufgeschrieben bzw. hat es mit nichtlinearen Systemen ausGleichungen zu tun.
In[65]:= ? Solve
Solve@eqns, varsD attempts to solve an equation or set of equations for the variables vars.
Solve@eqns, vars, elimsD attempts to solve the equations for vars, eliminating the variables elims.
Im Hilfeeintrag zum Befehl Solve steht schon bezeichnend, dass 'versucht' wird, das System von Gleichungen zu lösen. Hierweiß man a priori nicht so genau, wie Mathematica das versucht; es gibt einige einbgebaute Algorithmen, die je nachProblemstellung 'ausprobiert' werden.
� Bsp. : System von drei Gleichungen (linear)
In[66]:= Solve@83 *a � b, 2 *a � c, c � 1<, 8a, b, c<D
Out[66]= ::a ®1
2, b ®
3
2, c ® 1>>
10 einfuehrung_expand_m6.nb
� Bsp. : System von drei Gleichungen (nichtlinear)
In[67]:= Solve@83 *a^3 � b^2, 2 *a^2 � c^2, c^3 � 1<, 8a, b, c<D
Out[67]= ::b ® -3
23�4, c ® 1, a ®
1
2>, :b ® -
ä 3
23�4, c ® 1, a ® -
1
2>, :b ®
ä 3
23�4, c ® 1, a ® -
1
2>,
:b ®3
23�4, c ® 1, a ®
1
2>, :b ® - 3 -
1
4-
ä 3
4
3�4
, c ®1
2J-1 + ä 3 N, a ® -
1
4-
ä 3
4>,
:b ® 3 -1
4-
ä 3
4
3�4
, c ®1
2J-1 + ä 3 N, a ® -
1
4-
ä 3
4>,
:b ® - 3 -1
4+
ä 3
4
3�4
, c ®1
2J-1 - ä 3 N, a ® -
1
4+
ä 3
4>,
:b ® 3 -1
4+
ä 3
4
3�4
, c ®1
2J-1 - ä 3 N, a ® -
1
4+
ä 3
4>,
:b ® -1
2ä
3
2J-1 - ä 3 N
3�4, c ®
1
2J-1 + ä 3 N, a ® - -
1
4-
ä 3
4>,
:b ®1
2ä
3
2J-1 - ä 3 N
3�4, c ®
1
2J-1 + ä 3 N, a ® - -
1
4-
ä 3
4>,
:b ® -1
2ä
3
2J-1 + ä 3 N
3�4, c ®
1
2J-1 - ä 3 N, a ® - -
1
4+
ä 3
4>,
:b ®1
2ä
3
2J-1 + ä 3 N
3�4, c ®
1
2J-1 - ä 3 N, a ® - -
1
4+
ä 3
4>>
Mathematica wird immer alle gefundenen Lösungen auflisten, auch wenn sie teilweise 'unbrauchbar' sind, weil sieunphysikalisch oder aus anderen Gründen auszuschließen sind. Hier sind dann oft wieder Zettel und Bleistift nötig, um dieSpreu vom Weizen zu trennen.
Operationen zwischen Vektoren, Tensoren
� Skalaprodukt, Vektorprodukt, Addition
Das Skalarprodukt (innere Produkt) zweier Vektoren wird durch einen Punkt (.) gesetzt.
In[68]:= vec = 8a, b, c<
Out[68]= 8a, b, c<
In[69]:= vec.vec
Out[69]= a2 + b2 + c2
Mit dem Befehl * werden die Einträge paarweise Multipliziert.
einfuehrung_expand_m6.nb 11
In[70]:= vec *vec
Out[70]= 9a2, b2, c2=
Die Addition funktioniert, wie man es erwarten würde.
In[71]:= vec + vec
Out[71]= 82 a, 2 b, 2 c<
Das Kreuzprodukt (Vektorprodukt) wird mit dem Befehl Cross gesetzt.
In[72]:= Cross@vec, vecD
Out[72]= 80, 0, 0<
Vektoren sind zu sich selbst parallel; das Vektorprodukt muss verschwinden.
In[73]:= Cross@81, 0, 0<, 80, 1, 0<D
Out[73]= 80, 0, 1<
Das Vektorprodukt zwischen Einheitsvektor in x - und in y - Richtung gibt den Einheitsvektor in z - Richtung
� Bemerkungen und Ausblick
Einige weitere in der linearen Algebra wichtige Anwendungsbereiche von Computeralgebrasystemen sind Bestimmung vonRang einer Matrix, Bestimmung von Eigenwerten, Eigenvektoren und Diagonalisierung von Matrizen. Um die Befehle kennenzulernen, betrachten wir ein konkretes Beispiel.
� Bsp. : Rang, Eigenwerte einer Matrix, Diagonalisierung
In[74]:= ? RandomReal
RandomReal@D gives a pseudorandom real number in the range 0 to 1.
RandomReal@8xmin, xmax<D gives a pseudorandom real number in the range xmin to xmax.
RandomReal@xmaxD gives a pseudorandom real number in the range 0 to xmax.
RandomReal@range, nD gives a list of n pseudorandom reals.
RandomReal@range, 8n1, n2, ¼<D gives an n1 �n2 �¼ array of pseudorandom reals.
RandomReal@dist, ¼D samples from the symbolic continuous distribution dist.
In[75]:= A = RandomReal@8-1, 1<, 85, 5<D
Out[75]= 88-0.169337, -0.685204, 0.102231, -0.947748, 0.713358<,80.54575, 0.151902, 0.6732, 0.366166, 0.0381229<,8-0.206992, 0.337439, -0.21688, 0.795893, -0.819972<,8-0.841506, 0.267082, -0.801049, 0.420996, 0.950138<,80.80867, 0.023677, -0.945861, -0.298547, -0.616122<<
In[76]:= ? MatrixRank
MatrixRank@mD gives the rank of the matrix m.
In[77]:= MatrixRank@AD
Out[77]= 5
12 einfuehrung_expand_m6.nb
In[78]:= ? Eigenvalues
Eigenvalues@mD gives a list of the eigenvalues of the square matrix m.
Eigenvalues@8m, a<D gives the generalized eigenvalues of m with respect to a.
Eigenvalues@m, kD gives the first k eigenvalues of m.
Eigenvalues@8m, a<, kD gives the first k generalized eigenvalues.
In[79]:= Eigenvalues@AD
Out[79]= 8-1.73719, 0.848373 + 0.803623 ä, 0.848373 - 0.803623 ä,
-0.194499 + 0.365137 ä, -0.194499 - 0.365137 ä<
In[80]:= ? Eigenvectors
Eigenvectors@mD gives a list of the eigenvectors of the square matrix m.
Eigenvectors@8m, a<D gives the generalized eigenvectors of m with respect to a.
Eigenvectors@m, kD gives the first k eigenvectors of m.
Eigenvectors@8m, a<, kD gives the first k generalized eigenvectors.
In[81]:= Eigenvectors@AD
Out[81]= 880.50923, -0.0375405, -0.447797, 0.326422, -0.65742<,8-0.0862052 + 0.448868 ä, 0.0405575 - 0.132333 ä, -0.0299047 - 0.479841 ä,
0.537622 + 0. ä, 0.128863 + 0.484917 ä<, 8-0.0862052 - 0.448868 ä,
0.0405575 + 0.132333 ä, -0.0299047 + 0.479841 ä, 0.537622 + 0. ä, 0.128863 - 0.484917 ä<,8-0.203702 + 0.226309 ä, 0.76677 + 0. ä, 0.0554223 + 0.156072 ä, -0.516735 + 0.135628 ä,
-0.066607 + 0.0455767 ä<, 8-0.203702 - 0.226309 ä, 0.76677 + 0. ä,
0.0554223 - 0.156072 ä, -0.516735 - 0.135628 ä, -0.066607 - 0.0455767 ä<<
In[82]:= ? CharacteristicPolynomial
CharacteristicPolynomial@m, xD gives the characteristic polynomial for the matrix m.
CharacteristicPolynomial@8m, a<, xD gives the generalized characteristic polynomial with respect to a.
In[83]:= CP@x_D = CharacteristicPolynomial@A, xD
Out[83]= -0.406015 - 0.652015 x - 1.76373 x2 + 1.39513 x3 - 0.42944 x4 - x5
Die Eigenwerte der Matrix (bzw. der linearen Abbildung) sind die Nullstellen des Charakteristischen Polynoms.
Probe :
In[84]:= CP@Eigenvalues@ADD
Out[84]= 90., 0. + 4.44089 ´10-16ä, 0. - 4.44089 ´10-16
ä,
1.38778 ´10-17- 1.21431 ´10-17
ä, 1.38778 ´10-17+ 1.21431 ´10-17
ä=
Ist einigermaßen Null.
einfuehrung_expand_m6.nb 13
Analysis - Arbeiten mit Funktionen, Folgen & Reihen
Einleitende Bemerkungen
� Wichtige mathematische Größen
Eine der schönsten Formeln der Mathematik soll uns als Fallbeispiel für weitere Mathematica-Eigenheiten dienen.
DONT :
In[85]:= e^8i * pi<
Out[85]= 9ei pi=
DO :
In[86]:= E^8I *Pi<
Out[86]= 8-1<
In[87]:= ? E
E is the exponential constant e Hbase of natural logarithmsL, with numerical value > 2.71828.
In[88]:= ? I
I represents the imaginary unit -1 .
In[89]:= ? Pi
Pi is Π, with numerical value > 3.14159.
In[90]:= ? Infinity
Infinity or ¥ is a symbol that represents a positive infinite quantity.
� Naturkonstanten usw.
In[91]:= << PhysicalConstants`
In[92]:= SpeedOfLight
Out[92]=299 792 458 Meter
Second
In[93]:= FineStructureConstant
Out[93]= 0.00729735
In[94]:= AgeOfUniverse
Out[94]= 4.7 ´1017 Second
� Wichtige eingebaute Funktionen
14 einfuehrung_expand_m6.nb
�
Wichtige eingebaute Funktionen
Wie schon eingangs bemerkt sind die wichtigsten mathematischen Funktionen in Mathematica implementiert und werden mitgroßen Anfangsbuchstaben eingegeben. Einige Beispiele:
In[95]:= ? Sin
Sin@zD gives the sine of z.
In[96]:= ? Log
Log@zD gives the natural logarithm of z Hlogarithm to base eL.Log@b, zD gives the logarithm to base b.
In[97]:= ? Gamma
Gamma@zD is the Euler gamma function GHzL.Gamma@a, zD is the plica function GHa, zL.Gamma@a, z0, z1D is the generalized plica function GHa, z0L - GHa, z1L. It is also a unit of magnetic flux density.
In[98]:= ? DiracDelta
DiracDelta@xD represents the Dirac delta function ∆HxL.DiracDelta@x1, x2, ¼D represents the multidimensional Dirac delta function ∆Hx1, x2, ¼L.
� Folgen und Reihen
Folgen sind zunächst ja auch nichts anderes als Listen von Zahlen (bzw. Einträgen) und werden daher ähnlich wie schonkennengelernt gehandhabt. Betrachten wir daher gleich eine etwas interessantere Anwendung, nämlich den Grenzwert einerFolge.
In[99]:= Clear@"Global`*"D
Definiert man die Folge auch gleich als Funktion, lassen sich rekursive Ausdrücke berechnen.
In[100]:= a@n_D := a@nD = H1 � H1 + nL^HnLL
In[141]:= b@n_D := b@nD := b@n - 1D * b@n - 2Db@0D := 1
b@1D := 2
b@2D := 2
In[105]:= ? Limit
Limit@expr, x -> x0D finds the limiting value of expr when x approaches x0.
In[106]:= Limit@a@nD, n ® InfinityD
Out[106]= 0
In[145]:= Table@b@nD, 8n, 0, 10<D
Out[145]= 81, 2, 2, 4, 8, 32, 256, 8192, 2 097 152, 17 179 869 184, 36 028 797 018 963 968<
Reihen lassen sich ebenfalls sehr einfach evaluieren
einfuehrung_expand_m6.nb 15
In[108]:= ? Sum
Sum@ f , 8i, imax<D evaluates the sum âi=1
imax
f.
Sum@ f , 8i, imin, imax<D starts with i = imin .
Sum@ f , 8i, imin, imax, di<D uses steps di.
Sum@expr, 8i, 8i1, i2, ¼<<D uses successive values i1, i2, ¼.
Sum@ f , 8i, imin, imax<, 8 j, jmin, jmax<, ¼D evaluates the multiple sum âi=imin
imax âj=jmin
jmax
¼ f.
In[109]:= Sum@x^n � Hn!^2L, 8n, 0, Infinity<D
Out[109]= BesselIB0, 2 x F
In[110]:= ? BesselI
BesselI@n, zD gives the modified Bessel function of the first kind InHzL.In[111]:= Sum@x^k �k!, 8k, 0, n<D
Out[111]=ãx H1 + nL Gamma@1 + n, xD
Gamma@2 + nD
und Potenzreihen von Funktionen generieren.
In[112]:= ? Series
Series@ f , 8x, x0, n<D generates a power series expansion for f about the point x = x0 to order Hx - x0Ln.
SeriesA f , 8x, x0, nx<, 9y, y0, ny=E successively finds series expansions with respect to x, then y.
In[113]:= Series@E^x, 8x, 0, 10<D
Out[113]= 1 + x +x2
2+x3
6+x4
24+
x5
120+
x6
720+
x7
5040+
x8
40 320+
x9
362 880+
x10
3 628 800+ O@xD11
Differenzieren und Integrieren
� Unbestimmtes und bestimmes Integral
Grundlegendes zum Differenzieren haben wir schon in der Sektion Eingabe/Ausgabe III kennengelernt. Analog werden dieBefehle beim Integrieren eingegeben.
In[114]:= Clear@"Global`*"D
16 einfuehrung_expand_m6.nb
In[115]:= ? Integrate
Integrate@ f , xD gives the indefinite integral à f d x.
Integrate@ f , 8x, xmin, xmax<D gives the definite integral àxmin
xmax
f d x.
Integrate@ f , 8x, xmin, xmax<, 8y, ymin, ymax<, ¼D gives the multiple integral àxmin
xmax
d x àymin
ymax
dy ¼f.
� Bsp. : Unbestimmte Integrale
In[116]:= Integrate@Sin@xD, xD
Out[116]= -Cos@xD
In[117]:= Integrate@E^Hx^2L, xD
Out[117]=1
2Π Erfi@xD
In[118]:= ? Erfi
Erfi@zD gives the imaginary error function erfHizL � i.
� Bsp.: Bestimmte Integrale
In[119]:= Integrate@Sin@xD *Cos@xD, 8x, -Pi, Pi<D
Out[119]= 0
In[120]:= Integrate@E^H-xL, 8x, 0, Infinity<D
Out[120]= 1
Differentialgleichungen
� Lösen gewöhnlicher Differentialgleichungen
Das Lösen von Differentialgleichungen gehört zu einer großen Stärken von Computeralgebrasystemen. Während manhändisch bereits für relativ einfache gewöhnliche DG spezielle Lösungsansätze benötig (die man also kennen muss), ist auchhier die Syntax in Mathematica recht instruktiv.
In[121]:= Clear@"Global`*"D
� Bsp. : Lösen einer gewöhnlichen Differentialgleichung ohne Nebenbedingung
In[122]:= ? DSolve
DSolve@eqn, y, xD solves a differential equation for the function y, with independent variable x.
DSolve@8eqn1, eqn2, ¼<, 8y1, y2, ¼<, xD solves a list of differential equations.
DSolve@eqn, y, 8x1, x2, ¼<D solves a partial differential equation.
In[123]:= DSolve@y'@xD + y@xD � 0, y@xD, xD
Out[123]= 88y@xD ® ã-x C@1D<<
� Bsp. : Lösen einer GDG mit NB
einfuehrung_expand_m6.nb 17
�
Bsp. : Lösen einer GDG mit NB
In[124]:= DSolve@8z'@xD + z@xD � 0, z@0D � 1<, z@xD, xD
Out[124]= 88z@xD ® ã-x<<
� Bsp. : Lösen eines Systems von Differentialgleichungen
Wirklich schwierig wird das Lösen von DG, wenn es sich um Systeme gekoppelter Gleichungen handelt, das heißtFunktionen und deren Ableitungen in mehrere Gleichungen vorkommen. Zur Illustration wieder ein sehr einfaches Beispiel:
In[125]:= eqn1 := s'@xD + t@xD � 0
eqn2 := t'@xD + s@xD � 0
In[127]:= DSolve@8eqn1, eqn2<, 8s@xD, t@xD<, xD
Out[127]= ::s@xD ®1
2ã
-x I1 + ã2 xM C@1D -
1
2ã
-x I-1 + ã2 xM C@2D,
t@xD ® -1
2ã
-x I-1 + ã2 xM C@1D +
1
2ã
-x I1 + ã2 xM C@2D>>
� Lösen partieller Differentialgleichungen
Physikalische Vorgänge werden oft über partielle Differentialgleichungen beschrieben - z.B. das Geschwindigkeitsfeld einesGases, die Änderung der Temperatur eines beheizten Wasserbehälters oder die Aufenthaltswahrscheinlichkeit einesElektrons im Wasserstoffatom.
In[128]:= Clear@"Global`*"D
� Bsp. : Lösen einer PDG in zwei Dimensionen (analystisch)
Wir definieren eine partielle Differentialgleichung mit Nebenbedingung
In[129]:= pde := D@f@x, yD, xD + D@f@x, yD, yD � 0
NB := f@x, 1D � x^3
und betrachten zunächst die 'analytische' Lösung der Gleichung mit Nebenbedingung und geben das Ergebnis grafisch aus.
In[131]:= DSolve@8pde, NB<, f@x, yD, x, yD
Out[131]= 99f@x, yD ® H1 + x - yL3==
18 einfuehrung_expand_m6.nb
In[132]:= Plot3D@f@x, yD �. %, 8x, 0, 10<, 8y, 0, 10<D
Out[132]=
0
5
10 0
5
10
-200
0
200
400
Probe :
In[133]:= DAH1 + x - yL3, xE + DAH1 + x - yL3, yE
Out[133]= 0
� Bsp. : Lösen einer PDG in zwei Dimensionen (numerisch)
In[134]:= NDSolve@8pde, NB<, f@x, yD, 8 x, 0, 10<, 8y, 0, 10<D
NDSolve::bcart :
Warning: An insufficient number of boundary conditions have been specified for the direction of independent
variable x. Artificial boundary effects may be present in the solution.
Out[134]= 88f@x, yD ® InterpolatingFunction@880., 10.<, 80., 10.<<, <>D@x, yD<<
In[135]:= Plot3D@Evaluate@f@x, yD �. %D, 8x, 0, 10<, 8y, 0, 10<, PlotRange ® AllD
Out[135]=
0
5
10 0
5
10
-500
0
500
1000
Das numerische Ergebnis unterscheidet sich also von analytischen.
einfuehrung_expand_m6.nb 19