Einführung in Mathematica (1)
Numerisches und Symbolisches Rechnen
Michael O. Distler, Computer in der Wissenschaft, SS 2010 (Vorlage von L. Tiator)
Praktische Hinweise zur grafischen Oberfläche
Menü-Struktur (nur ausgewählte Menüpunkte)
ã File-Menü
das übliche
ã Edit-Menü
Undo (Ctrl+Z) : Achtung! Nur die letzte Aktion kann rückgängig gemacht werden.
keine Chancen bei Formattierungsänderungen
regelmäßiges Zwischenspeichern ist ratsam!
Complete Selection (Ctrl+K) : sehr hilfreich bei langen Befehlsnahmen und Optionen
Preferences ... : einige globale Einstellungen
ã Insert-Menü
Input from Above (Ctrl+L) : kopiert die letzte Zelle, sehr praktisch für kleine Änderungen bzw. Tests
ã Format-Menü
spezielle Darstellungen und Formattierungen
ã Cell-Menü
Convert To : Konvertierung zwischen InputForm (Shift+Ctrl+I), StandardForm (Shift+Ctrl+N),
TraditionalForm (Shift+Ctrl+T)
Properties : Eigenschaften einer Inputzelle, z.B. Active oder Initialization
Divide Cells : an der Cursorposition mit Shift+Ctrl+D in 2 Zellen teilen
Merge Cells : Zellklammern markieren und mit Shift-Ctrl+M zu einer einzigen Zelle vereinigen
Delete All Output : alle Output-Zellen werden gelöscht, z.B. zum Versenden per Email
ã Graphics
nur Spezialitäten
ã Evaluation
Quit Kernel : beendet den Kernel, damit wird die gesamte Vorgeschichte gelöscht
und alle Rechnungen können wieder "sauber" beginnen (Reset)
ã Palettes
Basic Math Assistant : wichtigste Palette für Eingabesyntax, kann immer offen sein
Algebraic Manipulation: praktisch für Umformungen komplexer Ausdrücke
Special Characters : Buchstaben (Α-W, A, Æ) und Symbole (¥Ìª©)
ã Window
Show Ruler : Maßstab mit Seiten-Markierungen
Show Toolbar : praktische Icon-Leiste
Fullscreen (F12) : ganzer Bildschirm
ã Help
Documentation Center: Umfangreiches Hilfesystem mit Suchfunktion
Function Navigator : Alle Mathematica-Funktionen nach Themenbereichen geordnet
Virtual Book : Mathematica-Tutorium
Option Inspector (Shift-Ctrl-O oder Toolbar oder Format-Menü)
sehr viele Details individuell einstellbar (aber nicht sehr übersichtlich)
eine recht nützliche Einstellung sind die Cell Labels (bis Vers. 5 default)
Show option values: Selected Notebook oder Global Preferences einstellen
im Baumdiagramm: Cell Options - Cell Labels auswählen
option ShowCellLabel: True anklicken
Initialisierung
Mathematica ist das vielseitigste und mächtigste Computer-Algebra-System. Es kann sowohl für symbolisches als auch numerisches
Rechnen eingesetzt werden und enthält sehr umfassende Grafikmöglichkeiten mit 2D- und 3D-Darstellungen, Animationen und vieles
mehr.
Darüber hinaus lässt sich Mathematica durch Zusatzpakete noch beliebig erweitern.
Für solche "packages" als auch für die standard Mathematica packages ist ein Suchpfad definiert. Diesen Suchpfad kann man mit
$Path
anzeigen und ggf. mit
$Path = $Path Ü 8".", "U:\\Mathematica"<erweitern.
Falls Daten oder Programmteile von einem speziellen Arbeitsdirectory eingelesen werden sollen oder geschrieben werden sollen, kann
man global ein Directory (Unix Syntax) definieren, z.B.
SetDirectory@"D:CTKursVorlesung"DD:\CTKurs\Vorlesung
2 Mathematica_1.nb
SetDirectoryA"U:DokumenteMathematicaÜbung"EDie Files im Arbeitsdirectory können mit
FileNames@D9Datenfiles, extras, fsvmainz05.jpg, Mathematica_1f.nb,
Mathematica_1.nb, packages, temp, Temperatur.dat, Tour, Vorlesung pdf files=
oder auch gezielt mit
FileNames@"*.dat"D8Temperatur.dat<
aufgelistet werden und ggf. mit FilePrint[...] ausgedruckt werden.
FilePrint@"Temperatur.dat"D 0.00000000000000E+0000 2.20000000000000E+0001 2.00000000000000E+0000 2.10000000000000E+0001 4.00000000000000E+0000 2.00000000000000E+0001 6.00000000000000E+0000 1.90000000000000E+0001 8.00000000000000E+0000 2.00000000000000E+0001 1.00000000000000E+0001 2.30000000000000E+0001 1.20000000000000E+0001 2.70000000000000E+0001 1.40000000000000E+0001 3.10000000000000E+0001 1.60000000000000E+0001 3.30000000000000E+0001 1.80000000000000E+0001 3.20000000000000E+0001 2.00000000000000E+0001 2.90000000000000E+0001 2.20000000000000E+0001 2.60000000000000E+0001 2.40000000000000E+0001 2.40000000000000E+0001
Startet man ein Notebook im Windows Explorer, so wird das Directory der Datei automatisch zum aktuellen Arbeitsdirectory. Damit kann
man sich die Initialisierung sparen.
Start von Mathematica
Der Mathematica Kernel
Der Kernel ist eine textorientierte Benutzeroberfläche die auf allen Rechnern gleich aussieht. Auch unter Windows startet der Kernel in
einem einfachen Textfenster:
In@1D :=
Dateien, die im Kernel bearbeitet werden sind reine Textdateien und somit vollständig plattformunabhängig. Sie tragen üblicherweise die
Endung .m (z.B. citydata.m)
Graphische Oberflächen
Mathematica für Windows ist eine graphische Oberfläche, die Text und Graphik in strukturierter Form darstellt. Solche strukurierte
Dateien (Notebooks) werden in einer reinen ASCII Form abgespeichert (name.nb), die für Frontends auf unterschiedlichen Rechnersys-
temen gleich sind. In diesen Dateien werden alle Graphiken in einer ASCII-Kodierung gespeichert, so dass die Notebooks
beträchtlichen Umfang annehmen können. Meistens kann man bei Speicherplatzproblemen zum Versenden mit Emails diese Dateien
sehr effektiv z.B. mit Winzip komprimieren.
Mathematica_1.nb 3
Mathematica Packages
Mit den sogenannten "packages" ist Mathematica beliebig erweiterbar. Packages sind rein textorientiert als name.m abgespeichert
(z.B. Calendar.m). Eine Großzahl von Standard Packages gehören zum Lieferumfang von Mathematica dazu und werden mit
Get["PackageName`"], bzw. <<PackageName oder HambestenL mit Needs["PackageName`"] geladen.
Letzteres verhindert ein mehrmaliges Laden eines Packages, was zu einem unerwünschten "Shadowing" (siehe weiter unten) führen
kann:
z.B. Needs["Graphics`"] lädt das Graphics Master Paket (nur noch bis Mathematica5 erforderlich)
<< Calendar`
FilePrint@"Calendar`"D(* ::Package:: *)
(* initialization file for the package Calendar` *)
Get["Calendar`Calendar`"]
?Calendar`*
Calendar`
Calendar EasterSundayGreekOrthodox Monday
CalendarChange Friday Saturday
DateQ Gregorian Sunday
DayOfWeek Islamic Thursday
DaysBetween Jewish Tuesday
DaysPlus JewishNewYear Wednesday
EasterSunday Julian
EasterSunday@2010D82010, 4, 4<
Table@8l1 = EasterSunday@yearD, l2 = EasterSundayGreekOrthodox@yearD,
H17L *DaysBetween@l1, l2D<, 8year, 2000, 2010<D8882000, 4, 23<, 82000, 4, 30<, 1<,
882001, 4, 15<, 82001, 4, 15<, 0<, 882002, 3, 31<, 82002, 5, 5<, 5<,882003, 4, 20<, 82003, 4, 27<, 1<, 882004, 4, 11<, 82004, 4, 11<, 0<,882005, 3, 27<, 82005, 5, 1<, 5<, 882006, 4, 16<, 82006, 4, 23<, 1<,882007, 4, 8<, 82007, 4, 8<, 0<, 882008, 3, 23<, 82008, 4, 27<, 5<,882009, 4, 12<, 82009, 4, 19<, 1<, 882010, 4, 4<, 82010, 4, 4<, 0<<
mit //TableForm erhält man eine besser lesbare Formatierung:
4 Mathematica_1.nb
Table@8l1 = EasterSunday@yearD, l2 = EasterSundayGreekOrthodox@yearD,
H17L *DaysBetween@l1, l2D<, 8year, 2007, 2012<D TableForm
200748
200748
0
2008323
2008427
5
2009412
2009419
1
201044
201044
0
2011424
2011424
0
201248
2012415
1
Damit kann man z.B. auch alle beweglichen Tage berechnen, die mit Ostern zusammenhängen:
RosenMontag@jahr_D := DaysPlus@EasterSunday@jahrD, -48DRosenMontag@2010D82010, 2, 15<
DayOfWeek@%DMonday
und noch etwas schöner:
Print@"Der Rosenmontag ", %%@@1DD," ist am ", %%@@3DD, ".", %%@@2DD, "."D
Der Rosenmontag 2010 ist am 15.2.
ã Alle Rosenmontage zwischen 2000 und 3000:
tab = Table@RosenMontag@JahrD, 8Jahr, 2000, 3000<D;Sortiert nach Monat und Tag :
tab@@Ordering@tab@@All, 82, 3<DDDDD;% Short
882285, 2, 2<, 82353, 2, 2<, 82437, 2, 2<, 995, 82782, 3, 8<, 82877, 3, 8<, 82945, 3, 8<<
Der früheste Termin ist der 2. Februar, z.B. im Jahr 2285 oder 2353,
der späteste Termin ist der 8. März, z.B. im Jahr 2945,
als nächstes im Jahr 2038.
Mathematica_1.nb 5
ã nochmals Day of Week
DayOfWeek@82010, 1, 1<DFriday
Manipulate ist ein neues (ab Vers. 6) und sehr praktisches Tool
Es kann sehr vielseitig eingesetzt werden, siehe Documentation Center. Weitere Beispiele werden folgen.
Needs@"Calendar`"DManipulate@DayOfWeek@8jahr, monat, tag<D,
88jahr, 2009<, 1950, 2050, 1<, 8monat, 1, 12, 1<, 8tag, 1, 31, 1<D
jahr
monat
tag
Calendar`DayOfWeek@82009, 1, 8<D
Help System
Das Help System von Mathematica ist völlig neu gestaltet: Es heißt jetzt: Documentation Center
Es ist grob in folgende Kategorien aufgeteilt:
Core Language
Mathematics and Algorithms
Visualization and Graphics
Data Manipulation
Computable Data
Dynamic Interactivity
Notebooks and Documents
Systems Interfaces & Deployment
und bietet eine sehr große Verzweigung mit Hinzunahme von Internet Links.
ã Funktions-Browser (F1)
Für die meisten speziellen Probleme bei der Eingabesyntax und bei der Suche von ähnlichen
Befehlen eignet sich am besten der Funktions-Browser (F1)
(am einfachsten: Funktionsname markieren und F1 drücken)
Mathematische Notation
Neben der ursprünglichen rein textorientierten Eingabeform gibt es bei Mathematica zusätzlich eine mathematische "Standard Form"
und eine mathematische "Traditional Form", z.B.:
Input Form (Shift+Ctrl+I) Integrate[ArcTan[x^2]/x^2, x,0,Infinity]
Standard Form (Shift+Ctrl+N) Ù0¥ ArcTanAx2Ex2
âx
Traditional Form (Shift+Ctrl+T) Ù0¥ tan-1Ix2M
x2â x
Mit dem Menü: Cell / Convert To können die Formen durch einfaches Klicken ineinander umgewandelt werden.
Die Eingabe der mathematischen Notation kann auf verschiedene Weise erfolgen:
6 Mathematica_1.nb
ã Verwendung von Paletten
Die wichtigste Eingabepalette ist: Basic Math Input unter Menü: Palettes/Other.
Eine weitere nützliche Palette ist: Algebraic Manipulation.
ã Eingabe mit Ctrl (Strg) Shortcuts
Beispiele: Ctrl# bedeutet gleichzeitiges Drücken der Ctrl (Strg) Taste und der Taste #
x Ctrl 8^< 3 ® x3
x Ctrl 8 < 3 ®x
3x Ctrl 8_< 3 ® x3
Ctrl 82< x ® xCtrl 8Space< ® beendet die Eingabe
x Ctrl 8^< 2 Ctrl 8Space< + 1 Ctrl 8 < Ctrl 82< x Ctrl 8Space< + a Ctrl 8Space<® x2 +
1
x + a
ã Eingabe mit \[...] bzw. mit Escape
\@Alpha D Esc a Esc Α
\@Pi D Esc pi Esc Π
\@Integral D Esc int Esc à\@DifferentialD D Esc dd Esc â
ã Eingabe mit LATEX-Notation
Esc \infty Esc ¥
Esc \int Esc à
Rechnen mit Zahlen
Rechnen mit Ganzen Zahlen
eine einfache Addition
45 + 77
122
etwas schwieriger
3^100
515377520732 011331036461129765621 272 702107 522 001
Mathematica rechnet im Gegensatz zu einem Taschenrechner mit einer beliebigen Anzahl von Stellen, zum Beispiel auch
Mathematica_1.nb 7
200!
788657867364 790503552363213932185 062 295135 977 687 173 263 294 742 533 244 359 449 963 403 342
920304284011984623904177212138 919638 830 257 642 790 242 637 105 061 926 624 952 829 931 113 462
857270763317237396988943922445 621451 664 240 254 033 291 864 131 227 428 294 853 277 524 242 407
573903240321257405579568660226 031904 170 324 062 351 700 858 796 178 922 222 789 623 703 897 374
720000000000000000000000000000 000000 000 000 000 000 000
Mit einem Semikolon am Ende kann man die Ausgabe unterdrücken
2000!;
Mit //Short kann man die Ausgabe entsprechend der Fenstergröße verkürzen
2000! Short
33162750924506332411 753933805763 240 5665 000 000 000 000000 000 000 000 000 000 000 000
Mit einem optionalen 2. Parameter kann man auch mehrere Zeilen darstellen:
Short@2000!, 5D331627509245 063324117539338057632 403 828111 720 810 578 039 457 193 543 706 038 077 905 600 822
400273230859732592255402352941225 834 109 258 084 817 415 293 796 131 5454
000000000000000000000000000000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
000000000000000000000000000000000 000 000 000 000 000 000 000 000 000
Gelegentlich kann es passieren, dass eine Rechnung in eine Endlosschleife gerät oder einfach zu lange dauert. In diesem Fall kann
man die Berechnung abbrechen, in dem man im Menü Kernel - Abort Evaluation wählt oder als Tastaturkürzel: Alt+. , z.B. :
1 000000!; Timing
82.25, Null<
Rechnen mit Reellen Zahlen
Natürlich kann das vorherige Ergebnis auch in kompakter Weise als Dezimalzahl dargestellt werden
N@%%D3.316275092450633´105735
Das Zeichen % bedeutet immer das letzte Ergebnis, %% das vorletzte u.s.w.
Das Ergebnis von Out[8] kann auch als absolute Angabe mit %8 bezeichnet werden.
%8 N
8882007., 4., 8.<, 82007., 4., 8.<, 0.<, 882008., 3., 23.<, 82008., 4., 27.<, 5.<,882009., 4., 12.<, 82009., 4., 19.<, 1.<, 882010., 4., 4.<, 82010., 4., 4.<, 0.<,882011., 4., 24.<, 82011., 4., 24.<, 0.<, 882012., 4., 8.<, 82012., 4., 15.<, 1.<<
Hier bedeutet //N dasselbe wir N[...]. Dies ist für alle Funktionen mit nur einem Argument möglich.
Die Verwendung von % ist in vielen Fällen sinnvoll, weitere Bezüge, insbesondere absolute Bezüge sind nicht zu empfehlen, da sie in
der Regel bereits beim nächsten Start des Notebooks schon nicht mehr stimmen.
So erhält man Pi auf 200 Stellen:
8 Mathematica_1.nb
N@Pi, 200D3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482
534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555
96446229489549303820
Mit NumberForm kann man weitere spezielle Formatierungen erreichen, z.B.
NumberForm@%, 26, DigitBlock ® 5, NumberSeparator ® " "D3.14159 26535 89793 23846 26434
PaddedForm erzeugt eine Formattierung mit genauer Angabe von Stellen
PaddedForm@N@ΠD, 86, 2<D3.14
PaddedForm@81, 200, 30<, 4D8 1, 200, 30<
mit Grid[...,...] kann man vielfältige Gitterstrukturen erzeugen, auch einzelne Zeilen
Grid@8%<D1 200 30
PaddedForm[ ...] muss immer außen stehen
PaddedForm@Grid@881, 200, 30<<D, 10D1 200 30
Rationalize erzeugt eine rationale Approximation, z.B. auf 2 Stellen genau
Rationalize@Π, 0.01D22
7
Auch Funktionen mit mehr als einem Argument können mit Hilfe der "pure function" (reine Funktion) nachgestellt werden
Pi N@ð, 50D &
3.1415926535897932384626433832795028841971693993751
Ähnlich wie beim Nachstellen einer Funktion gibt es auch die Möglichkeit des Voranstellen mit @, z.B.
Nã
2.71828
Die InlineForm ist eine verkürzte Schreibweise für 2-dim Funktionen
ã~N~50
2.7182818284590452353602874713526624977572470937000
auch wenn intern mit der vollen Stellenzahl gerechnet wird, werden explizit eingegebene reelle Zahlen nur mit 6-7 Ziffern angezeigt
Mathematica_1.nb 9
auch wenn intern mit der vollen Stellenzahl gerechnet wird, werden explizit eingegebene reelle Zahlen nur mit 6-7 Ziffern angezeigt
mproton = 938.272029 MeV
938.272 MeV
% N@ð, 50D &
938.272 MeV
es werden keine weiteren Stellen angezeigt, obwohl sie vorhanden sind:
mproton - 938.272 MeV
0.000029 MeV
in den meisten Fällen ist dies kein Problem, aber wenn es gewünscht wird, kann man durch eine spezielle Syntax die Anzahl der
angezeigten Stellen definieren:
mproton1 = 938.272029`9 MeV
938.272029 MeV
mproton1 - mproton
0. MeV
Rechnen mit Komplexen Zahlen
Die imaginäre Einheit ist als I vorbesetzt (I ist wie E oder Pi ein geschütztes Symbol), sie kann aber auch aus der Palette oder mit Esc ii
Esc erzeugt werden: ä
z1 = 3 + 4 I
3 + 4 ä
Die üblichen komplexen Funktionen, wie Realteil, Imaginärteil, Absolutbetrag, Argument, Komplexe Konjugation sind folgendermaßen
definiert:
In[49]:=
8Re@z1D, Im@z1D, Abs@z1D, Arg@z1D, Conjugate@z1D<In[49]:=
:3, 4, 5, ArcTanB43
F, 3 - 4 ä>
ein weiteres Beispiel:
z2 = ã1.0 ä
0.540302 + 0.841471 ä
8Re@z2D, Im@z2D, Abs@z2D, Arg@z2D, Conjugate@z2D<80.540302, 0.841471, 1., 1., 0.540302 - 0.841471 ä<
mit /° wird ein Winkel im Gradmaß dargestellt
10 Mathematica_1.nb
9Re@z2D, Im@z2D, Abs@z2D, Arg@z2D °, Conjugate@z2D=80.540302, 0.841471, 1., 57.2958, 0.540302 - 0.841471 ä<
Rechnen mit mathematischen Funktionen
Mathematica kennt sehr viele mathematische Funktionen, praktisch alle, die in der Physik vorkommen, z.B.
[email protected], Cos@0D, Tan@Pi2D, Cot@20 DegreeD,[email protected], ArcCos@-1D, [email protected] °, ArcTan@200D,[email protected], Exp@2D, Log@10D, Log@10, 2D, [email protected]=
:0.00159265, 1, ComplexInfinity, Cot@20 °D, 0.523599,
Π, 180., ArcTan@200D, 0.00999967, ã2, Log@10D, Log@2DLog@10D , 1.1752>
BesselJ@5, 34.6D0.0511826
[email protected] + 2 ID1.59421 + 0.418224 ä
Zeta@12 + 14.3 ID-0.0119878 + 0.132231 ä
Mathematica Symbole und Funktionen beginnen immer mit einem Großbuchstaben.
Es ist ein vernünftiger Programmierstil, die eigenen Definitionen zur besseren Unterscheidung mit kleinen Buchstaben zu starten.
Namen können beliebig viele Buchstaben und Ziffern enthalten und beginnen immer mit einem Buchstaben, Sonderzeichen sind als
Teil des Namens nicht erlaubt, auch sollte Underscore und Subscript nicht verwendet werden, da diese eine eigene Bedeutung in
Mathematica haben.
Die Speziellen Funktionen in Mathematica tragen meistens ihren vollen Namen, z.B.
SphericalHarmonicY@2, -1, Θ, ΦD1
2ã-ä Φ
15
2 ΠCos@ΘD Sin@ΘD
% TraditionalForm
1
2
15
2 Πã-ä Φ sinHΘL cosHΘL
Y2-1HΘ, ΦL
1
2ã-ä Φ
15
2 ΠCos@ΘD Sin@ΘD
Für den genauen Namen und die richtige Syntax sollte man von der sehr guten Online-Hilfe Gebrauch machen. Entweder über das
Help Menü oder einfach den Namen mit der Maus anklicken und auf F1 drücken.
Mathematica_1.nb 11
Für den genauen Namen und die richtige Syntax sollte man von der sehr guten Online-Hilfe Gebrauch machen. Entweder über das
Help Menü oder einfach den Namen mit der Maus anklicken und auf F1 drücken.
Mit Hilfe von Ctrl-K (Complete Selection) kann man sich zum einen Schreibarbeit ersparen, aber auch Funktionsnamen erraten, z.B.
durch Eingeben von "Spher" und anschließend Ctrl-K findet man schnell die richtige Funktion.
Mit dem Funktions Browser finder man unter "Mathematical Functions" eine komplette Liste von eingebauten Funktionen. Mit weiteren
Paketen ist diese Liste beliebig erweiterbar.
Rechnen mit Symbolen
Eingabe-Syntax
ã Namen
ai ist ein einfacher Name
ai FullForm
ai
a_i ist ein Muster (Pattern)
a_i FullForm
Pattern@a, Blank@iDD
ai ist eine indizierte Variable, z.B. für Vektoren oder Matrizen
ai FullForm
Subscript@a, iD
a2 ist wieder ein einfacher Name
a2 FullForm
a2
2a ist ein Produkt und ist identisch mit 2*a oder 2 a
2 a FullForm
Times@2, aD
H*Dies ist ein Kommentar in einer Input-Zelle*Lã Eingabeformen
a* b
a b
a b H*identisch zu a*b*La b
12 Mathematica_1.nb
ab H*neue Variable ab*Lab
2 a b
2 a b
a ba
b
die Ausgabereihenfolge ist immer alphabetisch
c + b - a
-a + b + c
a^2
a2
a b^-2 c d e f H* Beachte die Rangfolge! *La c d f
b2 e
Fakultät und Doppelfakultät:
5!
120
5!!
15
Skalarprodukt und Matrixprodukt
vectr = 8rx, ry, rz<8rx, ry, rz<
vectp = 8px, py, pz<8px, py, pz<
vectr.vectp
px rx + py ry + pz rz
Mathematica_1.nb 13
Cross@vectr, vectpD8pz ry - py rz, -pz rx + px rz, py rx - px ry<
Logische Operatoren: == != > >= < <= sowie: && für logisches UND | | für logisches ODER
a x + 2 b == 0
2 b + a x 0
Solve@%, xD::x ® -
2 b
a>>
Funktionsaufrufe
f@xDf@xD
Funktionsdefinition
f@x_D := x2 + 9
Funktionsaufruf und Ableitungen
f@yD9 + y2
f²@yD2
f¢@Sin@phiDD2 Sin@phiD
ã Zuweisungen (Definitionen) erstellen und löschen
x = N@ΠD3.14159
x = 1 + a + b
1 + a + b
Sobald wir mit x rechnen wird automatisch ein zuvor definierter Wert eingesetzt.
x2
H1 + a + bL2
aber auch bei einer direkten Funktionszuweisung im folgenden Beispiel, wo es im Allgemeinen unerwünscht ist
14 Mathematica_1.nb
f@x_D = x
1 + a + b
Damit f(x) tatsächlich als Funktion von x verwendet werden kann, muss vorher der Wert von x gelöscht werden.
?f
Info3466146953-3574994
Global`f
Info3466146953-3574994
f@x_D = 1 + a + b
x =.
Clear@xDClear@"Global`*"D
einmal verwendete Größen, z.B. f, bleiben im Kontext "Global" erhalten, auch wenn deren Wert gelöscht ist.
?f
Info3466146954-9668522
Global`f
Damit f nicht nur gelöscht, sondern ganz aus dem Kontext entfernt wird, verwendet man
Remove@fDRemove@"Global`*"D
Mitunter kann es erforderlich sein, den Kernel ganz neu zu starten, um alle vorherigen Definitionen und Zuweisungen wieder zu
neutralisieren. Dazu kann man entweder den Kernel im Menü Options/Kernel abschalten oder mit dem Kommando Quit den Kernel
beenden.
Quit
Eine korrekte Funktionsdefinition wird mit verzögerter Ausführung geschrieben
f@x_D := x
Polynome und Brüche
ã Ausmultiplikation, Faktorisierung
a x3 + b x + 3 c
3 c + b x + a x3
myPoly = %^2
I3 c + b x + a x3M2
zum Ausmultiplizieren
Mathematica_1.nb 15
Expand@myPolyD9 c2 + 6 b c x + b2 x2 + 6 a c x3 + 2 a b x4 + a2 x6
falls doch wieder faktorisiert werden soll
Factor@%DI3 c + b x + a x3M2
Man kann das Polynom auch nach Potenzen in a sortieren
Collect@myPoly, aD9 c2 + 6 b c x + b2 x2 + a2 x6 + a I6 c x3 + 2 b x4M
Collect@myPoly, a, FactorDa2 x6 + 2 a x3 H3 c + b xL + H3 c + b xL2
Collect@myPoly, xD9 c2 + 6 b c x + b2 x2 + 6 a c x3 + 2 a b x4 + a2 x6
Factor faktorisiert nicht automatisch mit komplexen Zahlen
FactorA1 - x2 + x4E1 - x2 + x4
es gibt jedoch eine Option (siehe Help) die dies ermöglicht.
FactorA1 - x2 + x4, GaussianIntegers ® TrueEI-1 - ä x + x2M I-1 + ä x + x2M
Polynome mit trigonometrischen Funktionen sind oft unübersichtlich
trigPoly = ExpandAI1 + Sin@xD2 + Sin@xD + Cos@xD2M2E1 + 2 Cos@xD2 + Cos@xD4 + 2 Sin@xD + 2 Cos@xD2 Sin@xD + 3 Sin@xD2 + 2 Cos@xD2 Sin@xD2 + 2 Sin@xD3 + Sin@xD4
Sie lassen sich mit Simplify vereinfachen
Simplify@trigPolyDH2 + Sin@xDL2
mit TrigReduce werden Produkte von Winkelfunktionen in Funktionen von mehrfachen Winkeln umgerechnet.
TrigReduce@trigPolyD1
2H9 - Cos@2 xD + 8 Sin@xDL
mit TrigExpand geht es wieder zurück
16 Mathematica_1.nb
% TrigExpand
9
2-Cos@xD2
2+ 4 Sin@xD +
Sin@xD2
2
im nächsten Beispiel arbeitet Factor besser als Expand
poly1 = H1 + xL7
H1 + xL7
Expand@poly1D1 + 7 x + 21 x2 + 35 x3 + 35 x4 + 21 x5 + 7 x6 + x7
% Factor
H1 + xL7
und hier ist das Ergebnis mit Expand kompakter als mit Factor
poly2 = 1 - x7
1 - x7
Factor@poly2D-H-1 + xL I1 + x + x2 + x3 + x4 + x5 + x6M
% Expand
1 - x7
Die Funktion Simplify arbeitet zwar langsamer, tut dafür auch wesentlich mehr und findet in beiden Fällen das beste Ergebnis.
Es ist jedoch eine gute Übung, die Umwandlung und Vereinfachung der Ausdrücke mit expliziten Funktionen zu probieren.
poly1 Expand
1 + 7 x + 21 x2 + 35 x3 + 35 x4 + 21 x5 + 7 x6 + x7
% Simplify
H1 + xL7
poly2 Factor
-H-1 + xL I1 + x + x2 + x3 + x4 + x5 + x6M
% Simplify
1 - x7
noch mächtiger aber auch noch langsamer ist FullSimplify
Mathematica_1.nb 17
x! Hx + 1L Simplify
H1 + xL x!
x! Hx + 1L FullSimplify
Gamma@2 + xD
FullSimplify erlaubt auch zusätzliche Annahmen, wie z.B. a > 0
FullSimplifyB ab
+b
c+c
a³ 3, a > 0 && b > 0 && c > 0F
True
ã Gebrochen Rationale Funktionen
quot1 =poly2
1 - x
1 - x7
1 - x
Cancel kürzt Brüche
Cancel@quot1D1 + x + x2 + x3 + x4 + x5 + x6
auch Simplify beinhaltet diese Funktion
Simplify@%D1 + x + x2 + x3 + x4 + x5 + x6
quot2 =Ha + bL2
Ha - bL3+
1
Ha - bL2
1
Ha - bL2+
Ha + bL2
Ha - bL3
Nenner und Zähler können getrennt verändert werden oder auch gemeinsam
ExpandDenominator@quot2D1
a2 - 2 a b + b2+
Ha + bL2
a3 - 3 a2 b + 3 a b2 - b3
ExpandNumerator@quot2D1
Ha - bL2+a2 + 2 a b + b2
Ha - bL3
18 Mathematica_1.nb
ExpandAll@quot2D1
a2 - 2 a b + b2+
a2
a3 - 3 a2 b + 3 a b2 - b3+
2 a b
a3 - 3 a2 b + 3 a b2 - b3+
b2
a3 - 3 a2 b + 3 a b2 - b3
Brüche können auf einen Hauptnenner gebracht werden
Together@quot2Da + a2 - b + 2 a b + b2
Ha - bL3
oder wieder auseinandergenommen werden
Apart@quot2D-
4 a2
H-a + bL3+
1 - 4 a
H-a + bL2-
1
-a + b
im nächsten Beispiel wird a als Variable betrachtet und erscheint nur im Nenner (Partialbruchzerlegung)
Apart@quot2, aD1
a - b+
4 b2
Ha - bL3+
1 + 4 b
Ha - bL2
Die kürzeste Darstellung liefert wieder Simplify
Simplify@quot2Da - b + Ha + bL2
Ha - bL3
Darüber hinaus gibt es noch eine Reihe weiterer Funktionen zur Manipulation von Polynomen und zur Vereinfachung von Ausdrücken.
z.B. FactorTerms, Factor[N[...]], Coefficient, Exponent, Part, ComplexExpand, PowerExpand, FactorSquareFree, Decompose, etc
(Siehe dazu die Online Help oder das Mathematica Buch.)
Werte einsetzen, Ersetzungsregeln
quot2 . a ® 3
1
H3 - bL2+
H3 + bL2
H3 - bL3
quot2 . 8a ® 3, b ® 5<-31
4
numRule = 8a ® 3, b ® 5<8a ® 3, b ® 5<
Mathematica_1.nb 19
quot2 . numRule-31
4
Rechnen mit komplexen Zahlen und Symbolen
Vorsicht! Der Name "I" ist geschützt und bedeutet die imaginäre Einheit ä , die man auch aus der Palette nehmen kann
Ξ = 5 + 3 I
5 + 3 ä
% Re
%% Im
%%% Abs
%%%% Conjugate
5
3
34
5 - 3 ä
z = u + I v
u + ä v
8Re@%D, Im@%D, Abs@%D, Conjugate@%D<8-Im@vD + Re@uD, Im@uD + Re@vD, Abs@u + ä vD, Conjugate@uD - ä Conjugate@vD<
Rechnen mit ComplexExpand
Besonders in physikalischen Anwendungen ist es oft klar, dass Parameter, z.B. Frequenzen, innerhalb eines komplexen Ausdrucks
reell sind. Dies kann man in Mathematica mit dem Kommando ComplexExpand erzwingen.
% ComplexExpand
:u, v, u2 + v2 , u - ä v>
Man kann auch explizite Definitionen für einzelne Variable setzen, wie Re[x]=0, Im[x]=0, Positive[x]=True, Negative[x]=True, etc
b : Im@bD = 0
0
a : Im@aD = 0;
20 Mathematica_1.nb
c = a + I b
a + ä b
8c Re, c Im<8Re@aD, Re@bD<
a1 : Re@a1D = 0
0
Eine andere häufige Anwendung in der Physik ist die Umwandlung von komplexen Exponentialausdrücken in trigonometrische
Ausdrücke und umgekehrt.
Exp@I Ω tDãä t Ω
% ExpToTrig
Cos@t ΩD + ä Sin@t ΩD
Cos@Ω tD TrigToExp
1
2ã-ä t Ω +
1
2ãä t Ω
Rechnen mit PowerExpand und FunctionExpand
PowerExpand wandelt Ausdrücke der Form (x y) p in xp yp um.
Dies liefert aber im Allgemeinen nur dann korrekte Ergebniss, wenn x und y positiv und reell sind und p ein Integer ist.
Viele physikalische Anwendungen sind aber von solcher Art, Potenzen sind fast immer ganzzahlig und viele Konstanten, wie Masse,
Geschwindigkeit, Naturkonstanten sind positive reelle Zahlen.
a2
a2
% PowerExpand
a
a a3
a
a3
Mathematica_1.nb 21
% PowerExpand
1
a
FunctionExpand arbeitet ähnlich wie PowerExpand bei Ausdrücken mit Potenzen
FunctionExpandAI2 x - x2MaEH2 - xLa xa
Gut geeignet ist FunctionExpand auch bei der Vereinfachung trigonometrischer Funktionen mit doppeltem oder halbem Argument
Sin@2 ArcTan@xDD FunctionExpand
2 x
1 + x2
FunctionExpandBSinB ArcCos@xD2
FF1 - x
2
Einige Funktionen können durch Gammafunktionen ausgedrückt werden
FunctionExpand@Binomial@n, mDDGamma@1 + nD
Gamma@1 + mD Gamma@1 - m + nD
FunctionExpand@n! Hn + 1LDGamma@2 + nD
Rechnen mit zusätzlichen Annahmen: Refine
Refine erlaubt Annahmen über die Parameter oder Variablen eines Ausdrucks anzugeben, z.B. dass die Masse eines Teilchens reell
und positiv ist
RefineB m2 , m > 0Fm
oder einfach nur reell
RefineB a2 , a Î RealsFAbs@aD
wie lautet der Logarithmus auf der negativen reellen Achse?
22 Mathematica_1.nb
Refine@Log@xD, x < 0Dä Π + Log@-xD
Einschränkung auf ganzzahlige Werte
ã2 ä n Π
ã2 ä n Π
Refine@%, n Î IntegersD1
Listen
Erzeugung
l1 = 82, 3, 4<82, 3, 4<
Arithmetische Folgen erzeugt man mit Range
Range@5DRange@2, [email protected], 1.1, 0.2D81, 2, 3, 4, 5<
82, 3, 4<
80.1, 0.3, 0.5, 0.7, 0.9, 1.1<
Mit Table erzeugt man eine Liste von Ausdrücken
Table@x^n, 8n, 5<D9x, x2, x3, x4, x5=
Listen von Listen
Table@x^n y^m, 8n, 3<, 8m, 2<D99x y, x y2=, 9x2 y, x2 y2=, 9x3 y, x3 y2==
Table@8x, Sin@xD<, 8x, 0, 2 Pi, Pi4<D:80, 0<, : Π
4,
1
2>, : Π
2, 1>, :3 Π
4,
1
2>, 8Π, 0<, : 5 Π
4, -
1
2>, : 3 Π
2, -1>, : 7 Π
4, -
1
2>, 82 Π, 0<>
Eine Liste von Zufallszahlen
Mathematica_1.nb 23
l2 = Table@RandomReal@D, 820<D80.586545, 0.359149, 0.428332, 0.0985141, 0.382958, 0.0270568,
0.431335, 0.205718, 0.380053, 0.443681, 0.91955, 0.374619, 0.199409,
0.820211, 0.480597, 0.813644, 0.673456, 0.107931, 0.0591139, 0.669197<Eine Vielzahl von Funktionen hat die Eigenschaft "listable", was bedeutet, dass man die Funktion auch für eine Liste von Zahlen oder
Variablen aufrufen kann. Das Ergebnis ist dann wieder eine Liste:
Sin@80, 1, 1.0, 3.14, Π<D80, Sin@1D, 0.841471, 0.00159265, 0<
Man beachte, dass Sin[1] für Mathematica eine exakte Zahl darstellt, während Sin[1.0] eine numerische Zahl in Maschinengenauigkeit
ist.
Mit exakten Zahlen kann z.B. exakt weitergerechnet werden:
Sin@2D Cos@1DSec@1D Sin@2D
% Simplify
2 Sin@1D
Ausgabeformate
nPi = Table@N@i Π, j + 2 iD, 8i, 1, 3<, 8j, 2, 5<D883.142, 3.1416, 3.14159, 3.141593<, 86.28319, 6.283185, 6.2831853, 6.28318531<,
89.4247780, 9.42477796, 9.424777961, 9.4247779608<<als Tabelle
[email protected] 3.1416 3.14159 3.1415936.28319 6.283185 6.2831853 6.283185319.4247780 9.42477796 9.424777961 9.4247779608
mit PaddedForm werden alle Elemente der Tabelle mit gleicher Stellenzahl vor und nach dem Dezimalpunkt dargestellt
PaddedForm@ TableForm@nPiD, 810, 5<D3.14200 3.14160 3.14159 3.141596.28319 6.28319 6.28319 6.283199.42478 9.42478 9.42478 9.42478
Tabelle als Matrix mit Klammern und zentrierten Spalten
[email protected] 3.1416 3.14159 3.1415936.28319 6.283185 6.2831853 6.283185319.4247780 9.42477796 9.424777961 9.4247779608
mit Zeilen- und Spaltenbezeichnungen und zentriert
24 Mathematica_1.nb
TableForm@nPi, TableHeadings ® 88" Π:", "2Π:", "3Π:"<, None<,TableAlignments ® 8Center, Center, Center<D
Π: 3.142 3.1416 3.14159 3.1415932Π: 6.28319 6.283185 6.2831853 6.283185313Π: 9.4247780 9.42477796 9.424777961 9.4247779608
Operationen auf Listen
Die meisten Funktionen in Mathematica sind Listable
Attributes@SinD8Listable, NumericFunction, Protected<
Sin@80, 1., Π 2, x<D80, 0.841471, 1, Sin@xD<
Einzelne Elemente können mit Part aus einer Liste geholt werden
Part@%, 4DSin@xD
oder einfach mit
%%@@2DD0.841471
Listen können mehrfach geschachtelt sein, z.B. die Lösungen von Gleichungen:
lsg = Solve@x^2 - 1 0, xD88x ® -1<, 8x ® 1<<
lsg@@1DD8x ® -1<
lsg@@1, 1DDx ® -1
lsg@@2, 1, 2DD1
am einfachsten übergibt man eine solche Lösung durch eine Regelzuweisung and eine neue Variable, z.B.
x1 = x . lsg@@2DD1
Die Struktur einer geschachtelten Liste erkennt man am besten mit FullForm oder TreeForm.
Mathematica_1.nb 25
FullForm@lsgDList@List@Rule@x, -1DD, List@Rule@x, 1DDD
TreeForm@lsgD
List
List
Rule
x -1
List
Rule
x 1
weitere nützliche Operationen mit Listen sind: First, Last, Length, Take, Join, Union, Sort, Order, ... (siehe online help)
Funktionen
Definition
Funktionen werden in Mathematica ebenso wie in der Mathematik definiert. Sie können ein oder mehrere Argumente haben, und die
Werte werden mit einer Funktionsgleichung berechnet.
Die Variablen werden mit einem Unterstrich _ gekennzeichnet und durch Kommas getrennt in eckige Klammern eingeschlossen! Die
Zuweisung erfolgt mit :=
f@x_D := x3 - x
Aufruf der Funktion für Zahlen oder Symbole
f@1D0
f@aD-a + a3
Beispiele von Funktionen mit 2 Argumenten:
f@x_, y_D :=ã-Ix2+y2M
x y
26 Mathematica_1.nb
f@a, aDã-2 a2
a2
f@aD-a + a3
?f
Info3466146957-5541415
Global`f
Info3466146957-5541415
f@x_D := x3 - x
f@x_, y_D :=ã
-Jx2+y2Nx y
eine Funktion f kann merfach mit unterschiedlicher Anzahl von Variablen definiert werden.
Auch das nächste Beispiel ist eine Funktion zweier Variablen
g@a_, b_D := NBTableBSin@xDx
, :x, a, b,b - a
10>FF
g@1, 11D80.841471, 0.454649, 0.04704, -0.189201, -0.191785,
-0.0465692, 0.0938552, 0.12367, 0.0457909, -0.0544021, -0.0909082<Bei der Definition von Funktionen darf der Unterstrich bei den Variablen nicht vergessen werden,
da sonst unerwünschte Effekte auftreten können:
h@xD := x2 + 4
h@3Dh@3D
h@xD4 + x2
h@yDh@yD
Wie man sieht, ist nur für x ein Funktionswert vorhanden, für alle anderen Konstanten oder Variablen ist die Funktion nicht definiert.
Unterschied zwischen direkter (=) und verzögerter (:=) Ausführung
Ganz offensichtlich ist der Unterschied bei zeitabhängigen Größen:
DateList@D82009, 11, 2, 10, 35, 57.8437500<
Mathematica_1.nb 27
Uhrzeit = Take@DateList@D, 84, 6<D810, 35, 57.8593750<
AktuelleUhrzeit := Take@DateList@D, 84, 6<Dim ersten Fall ist die Uhrzeit immer dieselbe:
8Uhrzeit, AktuelleUhrzeit<8810, 35, 57.8593750<, 810, 35, 57.8906250<<
neu in Version 6
DateString@8<DMon 2 Nov 2009 10:35:57
DateString@82009, 11, 2<,8"DayName", " ", "Day", " ", "MonthName", " ", "Year"<D
Monday 02 November 2009
Datum@d_, m_, y_D := DateString@8y, m, d<,8"DayName", " ", "Day", " ", "MonthName", " ", "Year"<D
Datum@1, 11, 2009DSunday 01 November 2009
Datum@29, 8, 1009DTuesday 29 August 1009
Datum@15, 10, 1582DFriday 15 October 1582
Datum@4, 10, 1582DMonday 04 October 1582
ähnlich ist die Situation bei Zufallszahlen:
z1 = [email protected]
z2 := RandomReal@D
28 Mathematica_1.nb
Table@z1, 820<D80.972883, 0.972883, 0.972883, 0.972883, 0.972883, 0.972883,
0.972883, 0.972883, 0.972883, 0.972883, 0.972883, 0.972883, 0.972883,
0.972883, 0.972883, 0.972883, 0.972883, 0.972883, 0.972883, 0.972883<
Table@z2, 820<D80.206076, 0.671451, 0.0436252, 0.500613, 0.863572, 0.200286,
0.499893, 0.907659, 0.0778667, 0.382288, 0.350599, 0.871432, 0.801277,
0.452228, 0.435805, 0.670963, 0.698237, 0.2036, 0.20136, 0.722176<
ã Beispiel für eine direkte Ausführung
Plot@Sinc@xD, 8x, -10, 10<D
-10 -5 5 10
-0.2
0.2
0.4
0.6
0.8
1.0
Find Fourier transform of Sinc :
FourierTransform@Sinc@tD, t, ΩD1
2
Π
2HSign@1 - ΩD + Sign@1 + ΩDL
g@Ω_D := FourierTransform@Sinc@tD, t, ΩDPlot@g@xD, 8x, -5, 5<D Timing
90.984,
-4 -2 2 4
0.2
0.4
0.6
0.8
1.0
1.2
=
Mathematica_1.nb 29
h@Ω_D = FourierTransform@Sinc@tD, t, ΩD1
2
Π
2HSign@1 - ΩD + Sign@1 + ΩDL
Plot@h@xD, 8x, -5, 5<D Timing
96.93889´10-17,
-4 -2 2 4
0.2
0.4
0.6
0.8
1.0
1.2
=
Unstetige Funktionen
Auch Mathematica-Funktionen müssen nicht unbedingt immer stetig sein. Z.B. kann die Stufenfunktion mit Hilfe von bedingten
Anweisungen geschrieben werden:
step1@x_D := -1 ; x £ 0
step1@x_D := 1 ; 0 < x
oder
step2@x_ ; x £ 0D := -1
step2@x_ ; 0 < xD := 1
Im 2. Beispiel wird die rechte Seite von step2 nur ausgewertet wenn die Bedingung wahr ist.
Damit ist step2 etwas schneller als step1.
step3@x_D := Piecewise@88-1, x < 0<, 81, x ³ 0<<DPlot@step3@xD, 8x, -5, 5<D
-4 -2 2 4
-1.0
-0.5
0.5
1.0
30 Mathematica_1.nb
Funktionen auf Listen
häufig kann man eine Funktion direkt auf eine Liste anwenden
viele Funktionen haben die Eigenschaft "listable"
f@8x, y, z, 1, -1, 0<D9-x + x3, -y + y3, -u + Hu + ä vL3
- ä v, 0, 0, 0=
bzw. in post - fix Darstellung
8x, y, z, 1, -1, 0< f
9-x + x3, -y + y3, -u + Hu + ä vL3- ä v, 0, 0, 0=
allgemein geht es aber immer mit der Map[ ...] Funktion :
Map@f, 8x, y, z, 1, -1, 0<D9-x + x3, -y + y3, -u + Hu + ä vL3
- ä v, 0, 0, 0=
bzw. in Operatordarstellung (siehe Help Map)
f 8x, y, z, 1, -1, 0<9-x + x3, -y + y3, -u + Hu + ä vL3
- ä v, 0, 0, 0=
Reine Funktionen (Pure Functions)
Eine "pure function" ist eine Funktion ohne Argumentangabe und häufig auch ohne Funktionsnamen, wie bei Operatoren
z.B.: Sin ist eine p.f . ohne Argument
#^2& ist eine p.f. ohne Argument und ohne Namen
a) Sin, Log, Exp, ... sind pure functions (p.f.) ohne Argument
8Sin, Log, Exp<8Sin, Log, Exp<
bL 1 &, ð &,ð2
1 - ð, ... sind p.f. ohne Argument und ohne Namen
:1 &, ð &,ð2
1 - ð&>
91 &, ð1 &,ð12
1 - ð1&=
c) die beiden nächsten Beispiele sind p.f. von 2 Variablen ohne Argumente und ohne Namen
:Ið12 + ð22M &,ð12 + a2
Sin@ð2D &>
9ð12 + ð22 &,ð12 + a2
Sin@ð2D &=
Definition einer pure function
Mathematica_1.nb 31
Definition einer pure function
N20 = Function@x, N@x, 20DDFunction@x, N@x, 20DD
N30 = N@ð, 30D &
N@ð1, 30D &
N@ΠDN20@ΠDN30@ΠDN@ð, 50D &@ΠD3.14159
3.1415926535897932385
3.14159265358979323846264338328
3.1415926535897932384626433832795028841971693993751
Funktionsaufruf einer pure function
8Sin@xD, Log@1D, [email protected]< H* Bsp aL *L8Sin@xD, 0, 7.38906<
:1 &@xD, ð &@yD, ð2
1 - ð&@zD> H* Bsp bL *L
91, y,Hu + ä vL2
1 - u - ä v=
:Ið12 + ð22M &@3, 4D, ð12 + a2
Sin@ð2D &@x, bD> H* Bsp cL *L
925, a2 + x2 Csc@bD=
wo treten pure functions in Mathematica häufiger auf?
1) bei Lösungen von DGLs
DSolve@y'@xD x + y@xD, y, xD88y ® Function@8x<, -1 - x + ãx C@1DD<<
32 Mathematica_1.nb
pf1 = y . %@@1DDFunction@8x<, -1 - x + ãx C@1DD
pf1@tD-1 - t + ãt C@1D
2) bei Optionen, z.B. bei GradientFieldPlot, Aufgabe10, Serie 2.
ScaleFunction ® H1 &L oder Ið2 &M etc
3) bei sogenannten postfix Anwendungenvon Funktionen: (expr) // p.f.
8Π N, Range@3D Sin<83.14159, 8Sin@1D, Sin@2D, Sin@3D<<
N50 = N@ð, 50D &
N@ð1, 50D &
N20@ΠD3.1415926535897932385
N50@ΠD3.1415926535897932384626433832795028841971693993751
Π N50
Π N@ð, 200D &
N@ð, 100D &B 2 F3.1415926535897932384626433832795028841971693993751
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482
534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555
96446229489549303820
1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753
4327641573
"pure function" mit mehreren Variablen
ð12 + ð22 &@a, bDa2 + b2
Anwendungen mit Map und Nest
Map@Ξ, 8a, b, c<D8H5 + 3 äL@aD, H5 + 3 äL@bD, H5 + 3 äL@a + ä bD<
Mathematica_1.nb 33
Map@ð^2 &, 81, 5, 13<D81, 25, 169<
Map@Sin, a + b + cDSin@2 aD + Sin@H1 + äL bD
Nest@1 H1 + ðL &, Ζ, 3D1
1 +1
1+1
1+Ζ
ohne p.f. braucht man dafür 2 Anweisungen und ein Symbol
q@x_D :=1
1 + x
Nest@q, Ζ, 3D1
1 +1
1+1
1+Ζ
Exp@RandomReal@80, 10<, 10DD TableForm PaddedForm@ð, 810, 3<D &
1.999194.04830.917368.1825.594
55.6644.089
518.9825.7762.724
Exp@RandomReal@80, 10<, 10DD TableForm PaddedForm@ð, 810, 3<D &
57.716183.9174.863
230.4702715.806
4.25612.8223.2913.061
14.514
34 Mathematica_1.nb
Kontexte und Pakete
Alle Mathematica Symbole, sowohl selbstdefinierte als auch vom System vorgegebene sind in verschiedenen Kontexten eingeordnet:
Global : wichtigster Kontext, enthält alle selbsteingegebenen Symbole
System : alle eingebauten Mathematica Symbole
Durch Dazuladen von Paketen werden weitere Kontexte geöffnet.
Wenn ein Name eingetippt wird, sucht Mathematica zuerst im aktuellen Kontext
$Context
Global`
und anschliessend der Reihe nach bei den in der Liste $ContextPath aufgeführten:
$ContextPath
8Calendar`, PacletManager`, WebServices`, System`, Global`<
ã Überschattung von Namen
Beim Einlesen eröffnet jedes Paket einen oder mehrere neue Kontexte. Diese werden der globalen Variablen $ContextPath vorne
angefügt.
Dies kann zu Problemen führen, wenn man versehentlich eine Funktion aus einem noch nicht geöffneten Paket aufruft, z.B.
c = SpeedOfLight
SpeedOfLight
Nun merkt man, dass die Funktion aus dem Paket PhysicalConstants zugeladen werden muss.
<< PhysicalConstants`
SpeedOfLight::shdw : Symbol SpeedOfLight appears in multiple contexts 9PhysicalConstants` ,
Global`=; definitions in context PhysicalConstants` may shadow or be shadowed by other definitions.
Mathematica informiert darüber, dass der Name SpeedOfLight in zwei verschiedenen Kontexten vorkommt,
es wird jedoch immer zuerst der Kontext Global ausgewertet
In diesem Fall muss man das Symbol SpeedOfLight aus dem Kontext Global entfernen.
Remove@Global`SpeedOfLightDDanach verwendet Mathematica das Symbol aus dem gewünschten Kontext.
SpeedOfLight
299792458 Meter
Second
Fehlermeldungen und Warnungen
hier ist die Schreibweise, bzw. der Name des Pakets falsch
Mathematica_1.nb 35
Needs@"Calender`"DGet::noopen : Cannot open Calender`.
Needs::nocont : Context Calender` was not created when Needs was evaluated.
$Failed
eine Funktion wird mit mehr oder auch weniger Argumenten aufgerufen, als zwingend erforderlich sind:
Sin@a, xDSin::argx : Sin called with 2 arguments; 1 argument is expected.
Sin@a, xD
E = 1
Set::wrsym : Symbol ã is Protected.
1
Ein bereits verwendetes Symbol kann nicht erneut als Funktionsbezeichner verwendet werden:
f = Sin@2 ArcTan@xDDSin@2 ArcTan@xDD
f@x_D = Sin@2 ArcTan@xDDSet::write : Tag Sin in Sin@2 ArcTan@xDD@x_D is Protected.
Sin@2 ArcTan@xDD
Am besten entfernt man das Symbol aus dem Kontext mit Remove
Remove@fDIm folgenden Beispiel wird eine numerische Funktion mit einem symbolischen Argument aufgerufen:
NIntegrate@Cos@c xD, 8x, 0, 6<DNIntegrate::inumr :
The integrand Cos@Removed@SpeedOfLightD xD has evaluated to non-numerical values for all sampling
points in the region with boundaries 880, 6<<.
NIntegrate@Cos@c xD, 8x, 0, 6<D
Die beiden folgenden Beispiele sind äquivalent. Dabei wird c nur lokal der Wert 1 zugewiesen, global bleibt c ein allgemeines Symbol
With@8c = 1<, NIntegrate@Cos@c xD, 8x, 0, 6<DD-0.279415
NIntegrate@Cos@c xD . c ® 1, 8x, 0, 6<D-0.279415
Mit c=2 gibt man c einen globalen Wert, dieser kann mit c=. wieder entfernt werden
36 Mathematica_1.nb
c = 2
2
c =.
Beim Versuch eine Gleichung zu schreiben, verwechselt man manchmal das logische Gleichheitszeichen (==) mit dem normalen
Gleichheitszeichen (=)
a x + 2 b = 0
Set::write : Tag Plus in 2 b + a x is Protected.
0
a x + 2 b == 0
2 b + a x 0
hier wird z als Variable benutzt, obwohl es bereits einen Wert besitzt
Solve@z == a, zDGeneral::ivar : u + ä v is not a valid variable.
Solve@u + ä v a, u + ä vD
?z
Info3466146986-9517161
Global`z
Info3466146986-9517161
z = u + ä v
Zusammenfassung Syntax und Notation
Syntax (Zusammenfassung)
In der Eingabesyntax sind bisher eine Reihe ungewohnter Symbole aufgetreten:
( ) mathematische Klammern
[ ] Funktionsklammern
Listenklammern, z.B. auch Vektoren, Matrizen
(* Kommentar in einer Inputzeile *)
% letzte Output-Zeile
%% vorletzte Output-Zeile
%n n-te Output-Zeile
; Output wird unterdrückt
// erlaubt das Nachstellen einer Funktion
@ erlaubt das Voranstellen einer Funktion
~ Infixform für f[x,y] als x~f~y
/. Ersetzungen mit nachfolgender Regel
//. mehrfache Ersetzungen nacheinander
/; bedingte Anweisung (If ..)
/: spezielle Definitionen für einen Ausdruck oder Symbol
-> Regelzuweisung
:= Funktionszuweisung (verzögerte Ausführung)
:-> Regelzuweisung (verzögerte Ausführung)
/@ Map[f,expr], z.B. f /@ 1,2,3 = f[1],f[2],f[3]
@@ Apply[f,expr], z.B. f @@ 1,2,3 = f[1,2,3]
Boolsche Operatoren (Ergebnis ist True oder False)
== mathematisch "gleich"
!= mathematisch "ungleich"
> mathematisch "größer"
< mathematisch "kleiner"
>= mathematisch "größer gleich"
|| mathematisch "oder"
&& mathematisch "und"
Mathematica_1.nb 37
( ) mathematische Klammern
[ ] Funktionsklammern
Listenklammern, z.B. auch Vektoren, Matrizen
(* Kommentar in einer Inputzeile *)
% letzte Output-Zeile
%% vorletzte Output-Zeile
%n n-te Output-Zeile
; Output wird unterdrückt
// erlaubt das Nachstellen einer Funktion
@ erlaubt das Voranstellen einer Funktion
~ Infixform für f[x,y] als x~f~y
/. Ersetzungen mit nachfolgender Regel
//. mehrfache Ersetzungen nacheinander
/; bedingte Anweisung (If ..)
/: spezielle Definitionen für einen Ausdruck oder Symbol
-> Regelzuweisung
:= Funktionszuweisung (verzögerte Ausführung)
:-> Regelzuweisung (verzögerte Ausführung)
/@ Map[f,expr], z.B. f /@ 1,2,3 = f[1],f[2],f[3]
@@ Apply[f,expr], z.B. f @@ 1,2,3 = f[1,2,3]
Boolsche Operatoren (Ergebnis ist True oder False)
== mathematisch "gleich"
!= mathematisch "ungleich"
> mathematisch "größer"
< mathematisch "kleiner"
>= mathematisch "größer gleich"
|| mathematisch "oder"
&& mathematisch "und"
Mathematische Notation (Zusammenfassung)
Palette : BasicMathInput Hoberer TeilL :
à â ¶
à
â ¶,
â=
ä=
PT
38 Mathematica_1.nb
Palette : BasicMathInput Hunterer TeilL :
Π ã ä ¥ °
´ ¸ ® ¦
¹ £ ³ Î
Ø ß Þ Ü ÝΑ Β Γ ∆ Ε
Ζ Η Θ Κ Λ
Μ Ν Ξ Π Ρ
Σ Τ Φ j Χ
Ψ Ω G D Q
L X F Y W
Für eine vollständige Übersicht über alle Paletten, siehe Documentation Center: Palette
Häufig verwendete Tastatur-Shortcuts
Shift+Enter Berechnung ausführen
Alt+. bricht eine Berechnung ab
Ctrl+L kopiert Inputzeile von oben
Ctrl+Shift+L kopiert Outputzeile von oben
Ctrl+K ergänzt unvollständige Namen bei der Eingabe
Ctrl+^ erzeugt Hochzahlen
Ctrl+_ erzeugt Index
Ctrl+2 erzeugt eine Quadratwurzel
Esc,a,Esc erzeugt griechischen Buchstaben Α, etc.
Ctrl+Y animiert Grafiksequenzen oder spielt Tonsequenzen
Shift+Ctrl+D zerlegt eine Eingabezelle in zwei Zellen (divide)
Shift+Ctrl+M vereinigt 2 Zellen (merge)
Shift+Ctrl+G gruppiert eine Reihe ausgewählter Zellen
Shift+Ctrl+U macht eine Gruppierung rückgängig
Shift+Ctrl+I ändert eine Zelle nach Eingabe Form
Shift+Ctrl+N ändert eine Zelle nach Standard Form
Shift+Ctrl+T ändert eine Zelle nach Traditional Form
Ctrl+Z macht die letzte Änderung rückgängig (Undo)
F1 öffnet den Help Browser
Mathematica_1.nb 39