Einführung in Mathematica (V7) · Einführung in Mathematica (V7) L. Tiator, M. Distler, Computer...
Transcript of Einführung in Mathematica (V7) · Einführung in Mathematica (V7) L. Tiator, M. Distler, Computer...
Einführung in Mathematica (V7)
L. Tiator, M. Distler, Computer in der Wissenschaft, WS 2014/15
ü wichtiger Hinweis:
Dieses Notebook soll nicht als Ganzes, z.B. mit "Evaluate Notebook" ausgeführt werden.
Aus Demonstrationsgründen können einzelne Zellen sehr viel Rechenzeit beanspruchen,
bzw. sogar in Endlosschleifen geraten.
Sollte dies geschehen, kann die Rechnung mit "Abort Evaluation" (Alt .) abgebrochen wer-
den.
Sinnvoll ist es, die Inputzellen einzeln auszuführen (Shift Enter).
Ein vollständig ausgeführtes Notebook kann als wesentlich größere Datei,
Mathematica_2014_complete.nb, heruntergeladen werden.
Zusätzlich ist ein PDF Ausdruck davon bereitgestellt.
Allgemeine Informationen
i. 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 unbedingt notwendig!
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
BasicMathInput : wichtigste Palette für Eingabesyntax, kann immer offen sein
AlgebraicManipulation : praktisch für Umformungen komplexer Ausdrücke
ã Window
Show Ruler : Maßstab mit Seiten-Markierungen
Show Toolbar : praktische Icon-Leiste
Fullscreen (F12) : ganzer Bildschirm
ü 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
ii. Initialisierung
ü Pfade und Arbeits-Verzeichnisse
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
2 Mathematica_2014_complete.nb
$Path
., C:\ProgramData\Mathematica\Applications,C:\ProgramData\Mathematica\Autoload, C:\ProgramData\Mathematica\Kernel,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\Applications,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\Autoload,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\ExtraPackages,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\LegacyPackages,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\Packages,C:\Program Files\Wolfram Research\Mathematica\7.0\Documentation\English\System,C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Autoload,C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Kernel\Packages,C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Links,C:\Users\tiator, C:\Users\tiator\AppData\Roaming\Mathematica\Applications,C:\Users\tiator\AppData\Roaming\Mathematica\Autoload,C:\Users\tiator\AppData\Roaming\Mathematica\Kernel, U:\Mathematica
anzeigen und ggf. mit
$Path $Path ".", "U:\\Mathematica"., C:\ProgramData\Mathematica\Applications,C:\ProgramData\Mathematica\Autoload, C:\ProgramData\Mathematica\Kernel,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\Applications,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\Autoload,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\ExtraPackages,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\LegacyPackages,C:\Program Files\Wolfram Research\Mathematica\7.0\AddOns\Packages,C:\Program Files\Wolfram Research\Mathematica\7.0\Documentation\English\System,C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Autoload,C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Kernel\Packages,C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\Links,C:\Users\tiator, C:\Users\tiator\AppData\Roaming\Mathematica\Applications,C:\Users\tiator\AppData\Roaming\Mathematica\Autoload,C:\Users\tiator\AppData\Roaming\Mathematica\Kernel, 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"C:DatenMathematica"C:\Daten\Mathematica
Mit der nachfolgenden Eingabe wird das Directory aus dem das Notebook geöffnet wurde zum aktuellen Directory.
Dies ist in den meisten Fällen die beste Variante.
SetDirectoryNotebookDirectoryC:\Daten\CTKurs\Aktueller Kurs 2014
Die Files im Arbeitsdirectory können mit
FileNamesGauss.dat, Mathematica_2014_compact.pdf, Mathematica_2014.nb,
Mathematica_2014_opensubgroups.nb, Organisation, Output.dat, Temperatur.dat, tmp
oder auch gezielt mit
FileNames".dat"Gauss.dat, Output.dat, Temperatur.dat
Mathematica_2014_complete.nb 3
aufgelistet werden und ggf. mit FilePrint[...] ausgedruckt werden.
FilePrint"Temperatur.dat" 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
Pane ist eine andere Möglichkeit, um Dateiinhalte in Kurzform darzustellen
PaneImport"Gauss.dat", "Text", 200, 200, Scrollbars True 0.0000 3.00001.0000 2.00002.0000 3.00003.0000 7.00004.0000 5.00005.0000 6.00006.0000 4.00007.0000 5.00008.0000 16.00009.0000 13.0000
10.0000 15.000011.0000 19.000012.0000 31.0000
PaneImport"Gauss.dat", "Text", Full, 100, Scrollbars True 0.0000 3.00001.0000 2.00002.0000 3.00003.0000 7.00004.0000 5.00005 0000 6 0000
ü Initialisierung mit "Initialization cells"
einzelne Zellen eines Notebooks können mit Hilfe des Cell-Menüs und Cell Properties
zu Initialisierungszellen ausgewählt werden
diese Zellen werden dann bei jedem Start von Mathematica vor allen anderen Befehlen
automatisch ausgeführt
damit können eigene Voreinstellungen z.B. für Grafik oder eigene Funktionen definiert wer-
den
4 Mathematica_2014_complete.nb
ã Beispiel für Grafik Initialisierung
SetOptionsPlot, ListPlot, ParametricPlot,
Plot3D, Graphics, DensityPlot, RegionPlot,
ContourPlot, ParametricPlot3D,BaseStyle 16, FontFamily "Times", Italic, ImageSize 350;
SetOptionsPlot, PlotStyle Thickness0.005;SetOptionsListPlot, PlotStyle Red, PointSize0.015;
dünne Linien und Punkte :
SetOptionsPlot, ListPlot, Graphics,BaseStyle Medium, FontFamily "Times";
SetOptionsPlot, PlotStyle Thickness0.002;SetOptionsListPlot, PlotStyle Red, PointSize0.005;
andere mögliche Fonts :
BaseStyle 18, FontFamily "Helvetica"BaseStyle Large, FontFamily "Helvetica", Italic, Bold
ã Beispiel für selbstdefinierte globale Funktionen
für selbstdefinierte Funktionen etc. eignet sich die Cell-Option : Cell Properties: Initialization Cell
solche Zellen können auch an beliebigen Stellen der Datei stehen und werden nach dem Laden der
Datei beim ersten Ausführen einer Zelle direkt gestartet
tooltipflist_, nlist_ : InnerTooltip, flist, nlist, List
RootPlotsol_, opts : OptionsPatternListPlot : Module,CellPrintExpressionCellNsol, "Output";ListPlotTooltipRe, Im & Nx . sol, opts,
AspectRatio Automatic, PlotStyle Red, PointSize.02
ComplexNumberPlotlist_,opts : OptionsPatternListPlot : Module,ListPlotTooltipRe, Im & Nlist, opts,
AspectRatio Automatic, PlotStyle Red, PointSize.02 ã Beispiel für Zusatzpakete zu Interpolation und Fit
Needs"Splines`"Needs"ErrorBarPlots`"
ã Beispiel für Arbeitsverzeichnis zum Arbeiten mit externen Datenfiles
spezielles Datenverzeichnis als Arbeitsverzeichnis definieren:
SetDirectory"C:DatenMathematica"C:\Daten\Mathematica
Mathematica_2014_complete.nb 5
aktuelles Notebook Directory als Arbeitsverzeichnis definieren:
SetDirectoryNotebookDirectoryC:\Daten\CTKurs\Aktueller Kurs 2014
iii. Start von Mathematica
ü Der Mathematica Kernel (MathKernel.exe)
Der Kernel ist eine textorientierte Benutzeroberfläche die auf allen Rechnern gleich aussieht. Auch unter Windows startet der
Kernel in einem einfachen Textfenster:
In1 :Dateien, die im Kernel bearbeitet werden sind reine Textdateien und somit vollständig plattformunabhängig. Sie tragen üblicher-
weise die Endung .m (z.B. citydata.m)
ü Grafische Oberflächen (Mathematica.exe)
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
Rechnersystemen 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.
Bei der ersten Ausführung eines Mathematica - Befehls startet der Kernel automatisch im Hintergrund.
In der Graphischen Oberfläche wird ein Mathematica-Befehl mit: Shift-Enter ausgeführt.
1 1
2
In der Graphischen Oberfläche gibt es eine große Zahl von verschiedenen Zellentypen (> 10)
Nur der Typ: Input erlaubt eine Mathematica Berechnung
Viele Typen: Title, Subtitle, Subsubtitle, Section, Subsection, Subsubsection, Text,
dienen nur zur Strukturierung eines Mathematica-Notebooks
ü 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 am besten mit Needs["PackageName`"] geladen.
Letzteres verhindert ein mehrmaliges Laden eines Packages,
was zu einem unerwünschten "Shadowing" (siehe weiter unten) führen kann.
Extra packages sollten aber nur dann geladen werden, wenn man sie wirklich braucht,
da sie beim Laden teilweise etwas Zeit benötigen und auch Ressourcen verbrauchen.
ã Package : Calendar (just for fun)
Calendar`
6 Mathematica_2014_complete.nb
FilePrint"Calendar`"(* ::Package:: *)
(* initialization file for the package Calendar` *)
Get["Calendar`Calendar`"]
?Calendar`*
Calendar`
Calendar DaysPlus Islamic Saturday
CalendarChange EasterSunday Jewish Sunday
DateQ
EasterSundayGreeÖkOrthodox JewishNewYear Thursday
DayOfWeek Friday Julian Tuesday
DaysBetween Gregorian Monday Wednesday
Date2014, 10, 20, 15, 33, 9.7560362
currentyear PartDate, 12014
EasterSundaycurrentyear2014, 4, 20
Tablel1 EasterSundayyear, l2 EasterSundayGreekOrthodoxyear,1 7 DaysBetweenl1, l2, year, 2010, 2020
2010, 4, 4, 2010, 4, 4, 0,2011, 4, 24, 2011, 4, 24, 0, 2012, 4, 8, 2012, 4, 15, 1,2013, 3, 31, 2013, 5, 5, 5, 2014, 4, 20, 2014, 4, 20, 0,2015, 4, 5, 2015, 4, 12, 1, 2016, 3, 27, 2016, 5, 1, 5,2017, 4, 16, 2017, 4, 16, 0, 2018, 4, 1, 2018, 4, 8, 1,2019, 4, 21, 2019, 4, 28, 1, 2020, 4, 12, 2020, 4, 19, 1
mit //TableForm erhält man eine besser lesbare Formatierung:
Mathematica_2014_complete.nb 7
Tablel1 EasterSundayyear, l2 EasterSundayGreekOrthodoxyear,17 DaysBetweenl1, l2, year, 2007, 2017 TableForm
200748
200748
0
2008323
2008427
5
2009412
2009419
1
201044
201044
0
2011424
2011424
0
201248
2012415
1
2013331
201355
5
2014420
2014420
0
201545
2015412
1
2016327
201651
5
2017416
2017416
0
Damit kann man z.B. auch alle beweglichen Tage berechnen, die mit Ostern zusammenhängen:
RosenMontagjahr_ : DaysPlusEasterSundayjahr, 48
RosenMontagcurrentyear2014, 3, 3
DayOfWeekMonday
und noch etwas schöner:
Print"Der Rosenmontag ", 1," ist am ", 3, ".", 2, "."
Der Rosenmontag 2014 ist am 3.3.
Alle Rosenmontage zwischen 2000 und 3000:
tab TableRosenMontagJahr, Jahr, 2000, 3000;Sortiert nach Monat und Tag :
tabOrderingtabAll, 2, 3;
8 Mathematica_2014_complete.nb
Short2285, 2, 2, 2353, 2, 2, 2437, 2, 2, 2505, 2, 2,993, 2630, 3, 8, 2782, 3, 8, 2877, 3, 8, 2945, 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.
ã Package: PhysicalConstants
Needs"PhysicalConstants`"das Laden dieses Pakets dauert überdurchschnittlich lange
?PhysicalConstants`*
PhysicalConstants`
AccelerationDueToÖGravity ElectronGFactor
MuonMagneticMomÖent
SackurTetrodeConsÖtant
AgeOfUniverse
ElectronMagneticMÖoment MuonMass SolarConstant
AvogadroConstant ElectronMass
NeutronComptonWÖavelength SolarLuminosity
BohrRadius FaradayConstant
NeutronMagneticMÖoment SolarRadius
BoltzmannConstant
FineStructureConstÖant NeutronMass
SolarSchwarzschildÖRadius
ClassicalElectronRÖadius GalacticUnit PlanckConstant SpeedOfLight
CosmicBackgroundÖTemperature
GravitationalConstaÖnt
PlanckConstantRedÖuced SpeedOfSound
DeuteronMagneticÖMoment HubbleConstant PlanckMass StefanConstant
DeuteronMass IcePoint
ProtonComptonWaÖvelength
ThomsonCrossSectÖion
EarthMass
MagneticFluxQuantÖum
ProtonMagneticMoÖment VacuumPermeability
EarthRadius MolarGasConstant ProtonMass VacuumPermittivity
ElectronCharge MolarVolume
QuantizedHallCondÖuctance WeakMixingAngle
ElectronComptonWÖavelength MuonGFactor RydbergConstant
ProtonMass
1.672621027 Kilogram
AgeOfUniverse
4.71017 Second
Mathematica_2014_complete.nb 9
Convert, Year1.490361010 Year
ã Package: ErrorBarPlots
Needs"ErrorBarPlots`"
?ErrorBarPlots`*
ErrorBarPlots`
ErrorBar ErrorBarFunction ErrorBarPlot ErrorListPlot
ã Package: Splines
Needs"Splines`"
?Splines`*
Splines`
Bezier Cubic Spline SplineDots SplineFunction
CompositeBeziÖer RenderSpline SplineDivision SplineFit SplinePoints
ü Help System (F1)
Das Help System von Mathematica heißt: Documentation Center und öffnet sich mit F1
es ist sehr umfangreich und äußerst hilfreich
Es ist grob in folgende Kategorien aufgeteilt:
Core Language
Mathematics and Algorithms
Data Handling & Data Sources
Systems Interfaces & Deployment
Dynamic Interactivity
Visualization and Graphics
Notebooks and Documents
und bietet eine sehr große Verzweigung mit Hinzunahme von Internet Links.
ã Funktions-Browser (F1 mit Cursor in Funktionsname)
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 ArcTanx2
x2x
Traditional Form (Shift+Ctrl+T) 0¶ tan-1x2
x2„ x
Auch mit dem Menü: Cell / Convert To können die Formen ineinander umgewandelt werden.
Die Eingabe der mathematischen Notation kann auf verschiedene Weise erfolgen:
10 Mathematica_2014_complete.nb
ã Verwendung von Paletten
Am umfangreichsten sind die Assistenten: Basic Math Assistent, Classroom Assistent und Writing Assistent
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 ^ 3 Æ x3
x Ctrl 3 Æx
3x Ctrl _ 3 Æ x3
Ctrl 2 x Æ xCtrl Space Æ beendet die Eingabe oder einfach : Pfeil nach rechts
x Ctrl ^ 2 Ctrl Space + 1 Ctrl Ctrl 2 x Ctrl Space + a Ctrl SpaceÆ x2 +
1
x + a
ã Eingabe mit Escape
Esc a Esc
Esc pi Esc
Esc sum Esc Esc int Esc Esc dd Esc
ã Eingabe mit LATEX-Notation
Esc \infty Esc
Esc \int Esc
ã Eingabe mit Complete Selection (Ctrl-K) und Template (Ctrl-Shift-K)
SphericalHarmonicY l , m , q , f
NDSolve eqns , y , x , xmin , xmax
Plot f , x , xmin , xmax
iv. Kontexte und Pakete
v. Fehlermeldungen und Warnungen
hier ist die Schreibweise, bzw. der Name des Pakets falsch
Mathematica_2014_complete.nb 11
Needs"Calender`"Get::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:
Sina, xSin::argx : Sin called with 2 arguments; 1 argument is expected.à
Sina, x
E 1
Set::wrsym : Symbol ‰ is Protected.à
1
Ein bereits verwendetes Symbol kann nicht erneut als Funktionsbezeichner verwendet werden:
f Sin2 ArcTanxSin2 ArcTanx
fx_ Sin2 ArcTanxSet::write : Tag Sin in Sin2 ArcTanxx_ is Protected.àSin2 ArcTanx
Am besten entfernt man das Symbol aus dem Kontext mit Remove
RemovefIm folgenden Beispiel wird eine numerische Funktion mit einem symbolischen Argument aufgerufen:
NIntegrateCosc x, x, 0, 6NIntegrate::inumr :
The integrand CosRemovedSpeedOfLight x has evaluated to non-numerical values for all samplingpoints in the region with boundaries 0, 6.à
NIntegrateCosc x, x, 0, 6
Die beiden folgenden Beispiele sind äquivalent. Dabei wird c nur lokal der Wert 1 zugewiesen, global bleibt c ein allgemeines
Symbol
Withc 1, NIntegrateCosc x, x, 0, 60.279415
NIntegrateCosc x . c 1, x, 0, 60.279415
12 Mathematica_2014_complete.nb
Mit c=2 gibt man c einen globalen Wert, dieser kann mit c=. wieder entfernt werden
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
z 0
0
hier wird z als Variable benutzt, obwohl es bereits einen Wert besitzt
Solvez a, zGeneral::ivar : 0 is not a valid variable.à
Solve0 a, 0
?z
Global`z
z 0
Vorsicht beim "Copy and Paste" aus Texten, ggf. auch aus dem Help System:
Der folgende Ausdruck ergibt einen Fehler bei der Eingabe: pol2 = z2 + 1) 5 x2 - 3x + y )
pol2 z2 1 5 x2 3 x y in einem solchen Fall hilft es nur alle Klammern neu zu setzen :
pol2 z2 1 5 x2 3 x y3 x 5 x2 y
Beim nächsten Beispiel sieht alles in Ordnung aus, es ist jedoch ein Fehler in der internen Struktur
diese Fehler (wahrscheinlich Systemfehler) sind sehr schwer zu finden, z.B. durch systematische
Eingrenzung und Neuschreibung
Daten a, b, c;f2 Y0Daten12
Mathematica_2014_complete.nb 13
Daten a, b, c;f2 Y0Daten1^2a2 Y02
mit Ctrl + Shift + E kann man auch die volle Struktur anzeigen,
dann wird es für "Experten" auch offensichtlich :
f2 Y0Daten12die SuperscriptBox ist an der falschen Stelle und unvollständig
vi. 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 (postfix)
@ erlaubt das Voranstellen einer Funktion (prefix)
~ Infixform für f[x,y] als x~f~y (infix)
/. 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"
14 Mathematica_2014_complete.nb
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+Shift+K Ergänzung und Template
Ctrl+^ erzeugt Hochzahlen
Ctrl+_ erzeugt Index
Ctrl+/ erzeugt einen Bruch
Ctrl+2 erzeugt eine Quadratwurzel
Esc,a,Esc erzeugt griechischen Buchstaben , etc.
Esc,p,Esc erzeugt griechischen Buchstaben
Esc,int,Esc erzeugt ein Integralzeichen
Esc,sum,Esc erzeugt ein Summenzeichen
Esc,inf,Esc erzeugt ein Unendlichzeichen
Esc,ii,Esc erzeugt imaginäre Einheit
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
ü Mathematische Notation (Zusammenfassung)
Palette : BasicMathInput oberer Teil :
ÇÉ ÇÉ
Ç ÇÉ
Ç‚É ∂É Ç
É
ÉÇ‚É ∂É,ÉÇ
É=É
É
Ç É=É
É
Ç
É ÉÉ É
ÇÉ
Mathematica_2014_complete.nb 15
Palette : BasicMathInput unterer Teil :
p „ ‰ • °
¥ ∏ â Æ ¶
ä π £ ≥ Œ
ÿ a b g d e
z h q k l
m n x p r
s t f j c
y w G D Q
L X F Y W
ÇÉ ÇÉ ÇÉÉ ÉÇ ÉÇ
ÇÉ Ç
ÉÇÉ
ÉÇ Ç
Für eine vollständige Übersicht über alle Paletten, siehe Documentation Center: Palette
1. Numerisches und Symbolisches Rechnen
1.1. Rechnen mit Zahlen
ü Rechnen mit Ganzen Zahlen
eine einfache Addition
45 77
122
etwas schwieriger
3^100
515 377 520 732 011 331 036 461 129 765 621 272702 107 522 001
Mathematica rechnet im Gegensatz zu einem Taschenrechner mit einer beliebigen Anzahl von Stellen, zum Beispiel auch
200
788 657 867 364 790 503 552 363 213 932 185 062295 135 977 687 173 263 294 742 533 244 359 449963 403 342 920 304 284 011 984 623 904 177 212 138 919 638 830 257642 790 242 637 105 061 926 624 952 829 931 113 462 857 270 763 317 237 396 988 943 922 445 621 451 664 240254 033 291 864 131 227 428 294 853 277 524 242 407 573 903 240 321 257 405 579 568 660 226 031 904 170 324062 351 700 858 796 178 922 222 789 623 703 897 374 720 000 000 000 000 000 000 000 000 000 000 000 000 000000 000 000
Mit einem Semikolon am Ende kann man die Ausgabe unterdrücken
16 Mathematica_2014_complete.nb
2000;
Mit //Short kann man die Ausgabe entsprechend der Fenstergröße verkürzen
2000 Short331 627 509 245 063 324 117 539 338 057 632 403828 111 7205646 000 000 000 000 000 000 000 000 000 000 000000 000 000 000
Mit einem optionalen 2. Parameter kann man auch mehrere Zeilen darstellen:
Short2000, 5331 627 509 245 063 324 117 539 338 057 632 403828 111 720 810 578 039 457 193 543 706 038 077905 600 822
400 273 230 859 732 592 255 402 352 941 225 834109 258 084 817 415 293 796 131 386 633 526343 688 905 634 058 556 163 940 6055382
000 000 000 000 000 000 000 000 000 000 000 000 000 000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000000 000 000 000 000 000 000 000 000 000 000000 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. :
10000000; Timing5.709, Null
ü Rechnen mit Reellen Zahlen
Natürlich kann das vorherige Ergebnis auch in kompakter Weise als Dezimalzahl dargestellt werden
N3.316275092450633105735
Das Zeichen % bedeutet immer das letzte Ergebnis, %% das vorletzte u.s.w.
N3.316275092450633105735
Hier bedeutet //N dasselbe wir N[...]. Dies ist für alle Funktionen möglich, die nur 1 Argument benötigen.
Für mehrere Argumente gibt es jedoch auch einen Umweg über die "pure functions", siehe weiter unten.
NPi3.14159
So erhält man Pi auf 200 Stellen:
NPi, 2003.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303820
Mit NumberForm kann man weitere spezielle Formatierungen erreichen, z.B.
Mathematica_2014_complete.nb 17
NumberForm, 26, DigitBlock 5, NumberSeparator " "3.14159 26535 89793 23846 26434
PaddedForm erzeugt eine Formattierung mit genauer Angabe von Stellen
PaddedFormN, 6, 23.14
PaddedForm1, 200, 30, 4 1, 200, 30
mit Grid[{{...},{...}}] kann man vielfältige Gitterstrukturen erzeugen, auch einzelne Zeilen
Grid1 200 30
PaddedForm[ ...] muss immer außen stehen
PaddedFormGrid1, 200, 30, 101 200 30
Auch Funktionen mit mehr als einem Argument können mit Hilfe der "pure function" (reine Funktion) nachgestellt werden
Pi N, 50 &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, sie wird jedoch selten verwendet.
N50
2.7182818284590452353602874713526624977572470937000
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, 50 &938.272 MeV
es werden keine weiteren Stellen angezeigt, obwohl sie vorhanden sind:
18 Mathematica_2014_complete.nb
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
die nachfolgende Syntax (Eingabe : ==) prüft auf Identität
mproton1 mproton
True
ü 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 folgender-
maßen definiert:
Rez1, Imz1, Absz1, Argz1, Conjugatez1
3, 4, 5, ArcTan 43, 3 4
ein weiteres Beispiel:
z2 60.0 °
0.5 0.866025
Rez2, Imz2, Absz2, Argz2, Conjugatez20.5, 0.866025, 1., 1.0472, 0.5 0.866025
mit /° wird ein Winkel im Gradmaß dargestellt
Rez2, Imz2, Absz2, Argz2 °, Conjugatez20.5, 0.866025, 1., 60., 0.5 0.866025
ü Rechnen mit mathematischen Funktionen
Mathematica kennt sehr viele mathematische Funktionen, praktisch alle, die in der Physik vorkommen, z.B.
Mathematica_2014_complete.nb 19
Sin3.14, Cos0, TanPi 2, Cot20 Degree,ArcSin0.5, ArcCos1, ArcCos1.0 °, ArcTan200,ArcCot100.0, Exp2, Log10, Log10, 2, Sinh1.0
0.00159265, 1, ComplexInfinity, Cot20 °, 0.523599,
, 180., ArcTan200, 0.00999967, 2, Log10, Log2Log10 , 1.1752
BesselJ5, 34.60.0511826
Log4.5 2 I1.59421 0.418224
Zeta12 14.3 I0.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.
SphericalHarmonicY2, 1, ,
1
2
15
2 Cos Sin
TraditionalForm
1
2
15
2 p‰-Â f sinq cosq
Y2-1q, f
1
2
15
2 Cos Sin
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.
20 Mathematica_2014_complete.nb
1.2. Rechnen mit Symbolen
ü Eingabe-Syntax
ã Namen
ai ist ein einfacher Name:
ai FullFormai
a_i ist ein Muster (Pattern) und kann nicht als Variable verwendet werden:
a_i FullFormPatterna, Blanki
ai ist eine indizierte Variable, z.B. für Vektoren oder Matrizen:
ai FullFormSubscripta, i
a2 ist wieder ein einfacher Name:
a2 FullForma2
2a ist ein Produkt und ist identisch mit 2*a oder 2 a
2 a FullFormTimes2, a
Dies ist ein Kommentar in einer InputZelleã Eingabeformen
a b
a b
a b identisch zu aba b
ab neue Variable abab
Mathematica_2014_complete.nb 21
2 a b
2 a b
a ba
b
a^2
a2
die Ausgabereihenfolge ist immer alphabetisch:
c b a
a b c
im folgenden Fall beachte man die Rangfolge, zur Sicherheit sollte man evtl. runde Klammern verwenden:
a b^2 c d e fa c d f
b2 e
Fakultät und Doppelfakultät:
5
120
5
15
für das Skalarprodukt (Matrixprodukt) kann man den Punkt (.) als Operator verwenden (Funktion: Dota, b)
vectr rx, ry, rzrx, ry, rz
vectp px, py, pzpx, py, pz
vectr.vectp
px rx py ry pz rz
für das Vektorprodukt (Kreuzprodukt) verwendet man eine spezielle Funktion: Crossa, b
Crossvectr, vectppz ry py rz, pz rx px rz, py rx px ry
22 Mathematica_2014_complete.nb
es gibt auch dafür einen "Kreuzoperator" (ä) shortcut: Esc cross Esc
vectrvectp
pz 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, x
x 2 b
a
Funktionsaufrufe
fxfx
Funktionsdefinition: Auf Muster ( _ ) und Verzögerung ( : ) achten!
fx_ : x2 9Funktionsaufruf und Ableitungen
fy9 y2
fy2
fSinphi2 Sinphi
ã Zuweisungen (Definitionen) erstellen und löschen
x N3.14159
x 1 a b
1 a b
Sobald wir mit x rechnen wird automatisch ein zuvor definierter Wert eingesetzt.
Mathematica_2014_complete.nb 23
x2
1 a b2
aber auch bei einer direkten Funktionszuweisung im folgenden Beispiel, wo es im Allgemeinen unerwünscht ist
fx_ 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
Global`f
fx_ 1 a b
x .
Clearx
Clear"Global`"einmal verwendete Größen, z.B. f, bleiben im Kontext "Global" erhalten, auch wenn deren Wert gelöscht ist.
?f
Global`f
Damit f nicht nur gelöscht, sondern ganz aus dem Kontext entfernt wird, verwendet man
Removef
Remove"Global`"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
fx_ : x
?f
Global`f
fx_ : x
gx_ : x x x 2 3 5
24 Mathematica_2014_complete.nb
?g
Global`g
gx_ : x x x 2 3 5
ü Polynome und Brüche
ã Expandexpr, Factorexpr, Simplifyexpr , Collectexpr, x, Coefficientexpr, x, n, Exponentexpr, x
x .
a x3 b x 3 c
3 c b x a x3
myPoly ^2
3 c b x a x32
zum Ausmultiplizieren
ExpandmyPoly9 c2 6 b c x b2 x2 6 a c x3 2 a b x4 a2 x6
falls doch wieder faktorisiert werden soll
Factor3 c b x a x32
Man kann das Polynom auch nach Potenzen in a sortieren
CollectmyPoly, a9 c2 6 b c x b2 x2 a2 x6 a 6 c x3 2 b x4
mit einer zusätzlichen Option, wie Factor, Simplify etc. können die einzelnen Terme weiter umgeformt werden
CollectmyPoly, a, Factora2 x6 2 a x3 3 c b x 3 c b x2
CollectmyPoly, x9 c2 6 b c x b2 x2 6 a c x3 2 a b x4 a2 x6
CollectmyPoly, c9 c2 b2 x2 2 a b x4 a2 x6 c 6 b x 6 a x3
Mathematica_2014_complete.nb 25
CollectmyPoly, c, Factor9 c2 6 c x b a x2 x2 b a x22
mit Coefficient kann man einzelne Koeffizienten aus einem Polynom entnehmen,
hier der Koeffizient :x ^ 3
CoefficientmyPoly, x, 36 a c
der höchste Exponent in x eines Polynoms
ExponentmyPoly, x6
ã Faktorisierung über komplexe oder algebraische Zahlen
Factor faktorisiert nicht automatisch mit komplexen Zahlen
Factor1 x2 x41 x2 x4
es gibt jedoch eine Option (siehe Help) die dies ermöglicht.
Factor1 x2 x4, GaussianIntegers True1 x x2 1 x x2
auch folgende Möglichkeit findet man, wenn man in der Help, wenn man bei "Examples" weitersucht
Factor1 x2 x4, Extension I1 x x2 1 x x2
Faktorisierung über algebraische Zahlen
Factor2 x22 x2
Factor2 x2, Extension 2
2 x 2 x
ã Umwandeln und Vereinfachen von trigonometrische Ausdrücken mit TrigReduceexpr, TrigExpandexprPolynome mit trigonometrischen Funktionen sind oft unübersichtlich
trigPoly Expand1 Sinx2 Sinx Cosx22
1 2 Cosx2 Cosx4 2 Sinx 2 Cosx2 Sinx 3 Sinx2 2 Cosx2 Sinx2 2 Sinx3 Sinx4
26 Mathematica_2014_complete.nb
Sie lassen sich mit Simplify vereinfachen
SimplifytrigPoly2 Sinx2
mit TrigReduce werden Produkte von Winkelfunktionen in Funktionen von mehrfachen Winkeln umgerechnet.
TrigReducetrigPoly1
29 Cos2 x 8 Sinx
mit TrigExpand geht es wieder zurück
TrigExpand9
2Cosx2
2 4 Sinx Sinx2
2
im nächsten Beispiel arbeitet Factor besser als Expand
poly1 1 x7
1 x7
Expandpoly11 7 x 21 x2 35 x3 35 x4 21 x5 7 x6 x7
Factor1 x7
und im Folgenden ist das Ergebnis mit Expand kompakter als mit Factor
poly2 1 x7
1 x7
Factorpoly21 x 1 x x2 x3 x4 x5 x6
Expand1 x7
ã Simplifyexpr und FullSimplifyexprDie 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 Expand1 7 x 21 x2 35 x3 35 x4 21 x5 7 x6 x7
Mathematica_2014_complete.nb 27
Simplify1 x7
poly2 Factor1 x 1 x x2 x3 x4 x5 x6
Simplify1 x7
noch mächtiger aber auch noch langsamer ist FullSimplify
x x 1 Simplify1 x x
x x 1 FullSimplifyGamma2 x
FullSimplify erlaubt auch zusätzliche Annahmen, wie z.B. a > 0
FullSimplify abb
cc
a 3, a 0 && b 0 && c 0
True
FullSimplify nutzt auch trigonometrische Relationen
ArcSin12 °
6 °
ArcSin12 ° FullSimplify30
ã Gebrochen Rationale Funktionen - Cancelexpr, Apartexpr, Togetherexpr, ExpandNumerator, ExpandDenominator, ExpandAll
quot1 poly2
1 x
1 x7
1 x
Cancel kürzt Brüche
Cancelquot11 x x2 x3 x4 x5 x6
28 Mathematica_2014_complete.nb
auch Simplify beinhaltet diese Funktion
Simplify1 x x2 x3 x4 x5 x6
quot2 a b2a b3
1
a b2
1
a b2a b2a b3
Nenner und Zähler können getrennt verändert werden oder auch gemeinsam
ExpandDenominatorquot21
a2 2 a b b2
a b2a3 3 a2 b 3 a b2 b3
ExpandNumeratorquot21
a b2a2 2 a b b2
a b3
ExpandAllquot21
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
Togetherquot2a a2 b 2 a b b2
a b3
oder wieder auseinandergenommen werden
Apartquot2
4 a2
a b3
1 4 a
a b2
1
a b
im nächsten Beispiel wird a als Variable betrachtet und erscheint nur im Nenner (Partialbruchzerlegung)
Apartquot2, a1
a b
4 b2
a b3
1 4 b
a b2
Die kompakteste Darstellung liefert wieder Simplify
Mathematica_2014_complete.nb 29
Simplifyquot2a b a b2
a b3
Darüber hinaus gibt es noch eine Reihe weiterer Funktionen zur Manipulation von Polynomen und zur Vereinfachung von Aus-
drücken.
z.B. FactorTerms, Factor[N[...]], Coefficient, Exponent, Part, ComplexExpand, PowerExpand, FactorSquareFree, Decompose, etc
(Siehe dazu die Online Help.)
ü Werte einsetzen, Ersetzungsregeln
quot2
1
a b2a b2a b3
quot2 . a 3
1
3 b23 b2
3 b3
Apartquot2 . a x, x4 b2
b x3
1 4 b
b x2
1
b x
quot2 . a 3, b 5
31
4
numRule a 3, b 5a 3, b 5
quot2 . numRule
31
4
bei all diesen Operationen bleibt der ursprüngliche Ausdruck unverändert
quot2
1
a b2a b2a b3
ü 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
oder mit Esc ii Esc
30 Mathematica_2014_complete.nb
I 0
Set::wrsym : Symbol  is Protected.à
0
5 3 I
5 3
Re Im Abs Arg Conjugate5
3
34
ArcTan 35
5 3
im nächsten Beispiel sind für Mathematica die Symbole u, v erstmal beliebig komplex
Clearu, v
z u I v
u v
Re, Im, Abs, ConjugateImv Reu, Imu Rev, Absu v, Conjugateu Conjugatev
ü Rechnen mit ComplexExpand
Besonders in physikalischen Anwendungen ist es oft klar, dass Parameter, z.B. Frequenzen, innerhalb eines komplexen Aus-
drucks reell sind. Dies kann man in Mathematica mit dem Kommando ComplexExpand erzwingen.
ComplexExpand
u, v, u2 v2 , u v
Eine andere häufige Anwendung in der Physik ist die Umwandlung von komplexen Exponentialausdrücken in trigonometrische
Ausdrücke und umgekehrt.
Mathematica_2014_complete.nb 31
ExpI t t
ExpToTrigCost Sint
Cos t TrigToExp1
2 t
1
2 t
ExpI t ReImt CosRet
mit ComplexExpand kann man wieder festlegen, dass w und t reell-wertige Variable sind
ExpI t Re ComplexExpandCost
im nächsten Beispiel wird nur t als reell angenommen, w bleibt dagegen komplex
ComplexExpandExp t Re, t Im Cost Re
ã Orderless
ClearAttributesTimes, Orderless
ExpI t t
aber das ist sehr unpraktisch für alle anderen Manipulationen
3 a b 5 b a
5 b a 3 a b
SetAttributesTimes, Orderless
2 a b
32 Mathematica_2014_complete.nb
ü Rechnen mit PowerExpand
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
PowerExpanda
a a3
a
a3
PowerExpand1
a
im nächsten Beispiel führt PowerExpand erst nach der Faktorisierung zum gewünschten Erfolg
a2 b2
a b
a2 b2
a b
PowerExpanda2 b2
a b
Factor PowerExpanda b
ü Rechnen mit FunctionExpand
FunctionExpand arbeitet ähnlich wie PowerExpand bei Ausdrücken mit Potenzen
FunctionExpand2 x x2a2 xa xa
Gut geeignet ist FunctionExpand auch bei der Vereinfachung trigonometrischer Funktionen mit doppeltem oder halbem Argument
Mathematica_2014_complete.nb 33
Sin2 ArcTanx FunctionExpand2 x
1 x2
FunctionExpandSin ArcCosx2
1 x
2
Einige Funktionen können durch Gammafunktionen ausgedrückt werden
FunctionExpandBinomialn, mGamma1 n
Gamma1 m Gamma1 m n
FunctionExpandn n 1Gamma2 n
ü 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
Refine m2 , m 0m
oder einfach nur reell
Refine a2 , a RealsAbsa
welche Werte hat der Logarithmus auf der negativen reellen Achse?
RefineLogx, x 0 Logx
Einschränkung auf ganzzahlige Werte
2 n
2 n
Refine, n Integers1
34 Mathematica_2014_complete.nb
2. Funktionen, Listen, Vektoren und Matrizen
2.1. Funktionen
ü Definition einer Funktion
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 berech-
net.
Die Variablen werden mit einem Unterstrich _ (einem Muster) gekennzeichnet und durch
Kommas getrennt in eckige Klammern eingeschlossen!
Die Zuweisung erfolgt mit :=
fx_ : x3 xAufruf der Funktion für Zahlen oder Symbole
f10
faa a3
Beispiele von Funktionen mit 2 Argumenten:
fx_, y_ : x2y2
x y
fa, a2 a
2
a2
faa a3
die Help Kurzform ?
gibt auch Auskunft über selbstdefinierte Symbole
?f
Global`f
fx_ : x3 x
fx_, y_ : x2y2
x y
Mathematica_2014_complete.nb 35
eine Funktion f kann merfach mit unterschiedlicher Anzahl von Variablen definiert werden.
Auch das nächste Beispiel ist eine Funktion zweier Variablen
ga_, b_ : NTable Sinxx
, x, a, b,b a
10
g1, 110.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:
hx : x2 4
h3h3
hx4 x2
hyhy
Wie man sieht, ist nur für x ein Funktionswert vorhanden, für alle anderen Konstanten oder
Variablen ist die Funktion nicht definiert.
Man beachte auch die Farbcodierung in der Input-Zelle
ü Unterschied zwischen direkter (=) und verzögerter (:=) Ausführung
Ganz offensichtlich ist der Unterschied bei zeitabhängigen Größen:
DateList2014, 10, 20, 15, 43, 42.9923484
Uhrzeit TakeDateList, 4, 615, 43, 43.0859486
AktuelleUhrzeit : TakeDateList, 4, 6im ersten Fall ist die Uhrzeit immer dieselbe:
Uhrzeit, AktuelleUhrzeit15, 43, 43.0859486, 15, 43, 43.1171486
DateString gibt Uhrzeit und Datum im gebräuchlichen Format:
36 Mathematica_2014_complete.nb
DateStringMon 20 Oct 2014 15:43:43
Wie sehr häufig, findet man in der Help eine Vielzahl von weiteren Möglichkeiten :
Datumd_, m_, y_ : DateStringy, m, d,"DayName", " ", "Day", " ", "MonthName", " ", "Year"
Datum1, 11, 2011Tuesday 01 November 2011
Mit Dynamic und Refresh im Intervall von 1 Sekunde ergibt sich eine einfache Digitaluhr
DynamicRefreshDateString, UpdateInterval 1Mon 20 Oct 2014 17:51:25
ähnlich ist die Situation bei Zufallszahlen:
z1 RandomReal0.6057
z2 : RandomRealim ersten Fall bekommen wir immer dieselbe Zufallszahl
Tablez1, 200.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057,0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057, 0.6057
im zweiten Fall bekommen wir eine Liste von echten Zufallszahlen
Tablez2, 200.76991, 0.479042, 0.0699937, 0.686574, 0.948656, 0.792864,0.415726, 0.537683, 0.85796, 0.612241, 0.899064, 0.827867, 0.88233,0.837439, 0.157714, 0.941674, 0.35734, 0.937047, 0.453887, 0.0892438
Mathematica_2014_complete.nb 37
ã Beispiel für eine sinnvolle direkte Ausführung
PlotSincx, x, 10, 10
-10 -5 5 10-0.2
0.2
0.4
0.6
0.8
1.0
Berechnung der Fourier transformierten Funktion:
FourierTransformSinct, t,
1
2
2Sign1 Sign1
wird dies verzögert definiert, dauert die Ausführung recht lange
g_ : FourierTransformSinct, t,
Plotgx, x, 5, 5 Timing
0.421,
-4 -2 2 4
0.2
0.4
0.6
0.8
1.0
1.2
während die direkte Ausführung praktisch instantan abläuft :
h_ FourierTransformSinct, t,
1
2
2Sign1 Sign1
38 Mathematica_2014_complete.nb
Plothx, x, 5, 5 Timing
0.,
-4 -2 2 4
0.2
0.4
0.6
0.8
1.0
1.2
im nächsten Beispiel wird bei der Funktionsdefinition gleich die rechte Seite ausgewertet
h1_ : FourierTransformSinct, t, Evaluate
Ploth1x, x, 5, 5 Timing
0.,
-4 -2 2 4
0.2
0.4
0.6
0.8
1.0
1.2
?h
Global`h
hx : x2 4
h_ 1
2
2Sign1 Sign1
?h1
Global`h1
h1_ : 1
2
2Sign1 Sign1
Removex
Mathematica_2014_complete.nb 39
Unstetige Funktionen
Auch Mathematica-Funktionen müssen nicht unbedingt immer stetig sein. Z.B. kann die
Stufenfunktion mit Hilfe von bedingten Anweisungen geschrieben werden:
step1x_ : 1 ; x 0step1x_ : 1 ; 0 x
oder
step2x_ ; x 0 : 1step2x_ ; 0 x : 1
Im 2. Beispiel wird die rechte Seite von step2 nur ausgewertet wenn die Bedingung wahr
ist.
Damit ist step2 etwas schneller als step1.
step3x_ : Piecewise1, x 2, 1, x 2
Plotstep3x, x, 5, 5
-4 -2 2 4
-1.0
-0.5
0.5
1.0
standardmäßig werden Unstetigkeitsstellen bei Piecewise beim Plotten ausgespart,
mit Exclusions->None kann man dies jedoch auch vermeiden
Plotstep3x, x, 5, 5,Exclusions None, PlotStyle Red, Thick
-4 -2 2 4
-1.0
-0.5
0.5
1.0
40 Mathematica_2014_complete.nb
Funktionen auf Listen
häufig kann man eine Funktion direkt auf eine Liste anwenden
viele Funktionen haben die Eigenschaft "listable". Selbstdefinierten Funktionen
kann man mit SetAttributes diese Eingenschaft zuweisen:
Clearf
fx, y, z, 1, 1, 0fx, y, u v, 1, 1, 0
Attributesf
SetAttributesf, Listablebzw. in post - fix Darstellung
x, y, z, 1, 1, 0 ffx, fy, fu v, f1, f1, f0
allgemein geht es aber immer mit der Map[ ...] Funktion :
Mapf, x, y, z, 1, 1, 0fx, fy, fu v, f1, f1, f0
bzw. in Operatordarstellung (siehe Help Map)
f x, y, z, 1, 1, 0fx, fy, fu v, f1, f1, f0
2.2. Reine Funktionen (Pure Functions)
ü Definition einer pure function
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
Sin, Log, ExpSin, Log, Exp
b 1 &, &,2
1 , ... sind p.f. ohne Argument und ohne Namen
Mathematica_2014_complete.nb 41
1 &, &,2
1 &
1 &, 1 &,12
1 1&
c) die beiden nächsten Beispiele sind p.f. von 2 Variablen ohne Argumente und ohne
Namen
12 22 &, 12 a2
Sin2 &
12 22 &, 12 a2
Sin2 &
bzw. mit der Fullform: Function[ ...]
Functionx, 1, Functionx, x, Functionx1, x2, x12 x22Functionx, 1, Functionx, x, Functionx1, x2, x12 x22
ã Erzeugung einer pure function
N20 Functionx, Nx, 20Functionx, Nx, 20
oder einfacher:
N30 N, 30 &N1, 30 &
NN20N30N, 50 &3.14159
3.1415926535897932385
3.14159265358979323846264338328
3.1415926535897932384626433832795028841971693993751
ü Funktionsaufruf einer pure function
Sinx, Log1, Exp2.0 Bsp a Sinx, 0, 7.38906
42 Mathematica_2014_complete.nb
1 &x, &y, 2
1 &z Bsp b
1, y,u v21 u v
12 22 &3, 4, 12 a2
Sin2 &x, b Bsp c
25, a2 x2 Cscb
ü wo treten pure functions in Mathematica häufiger auf?
1) bei Lösungen von DGLs
DSolvey'x x yx, y, xy Functionx, 1 x x C1
pf1 y . 1Functionx, 1 x x C1
pf1t1 t t C1
2) bei sogenannten postfix Anwendungen von Funktionen: (expr) // p.f.
N, Range3 Sin3.14159, Sin1, Sin2, Sin3
N50 N, 50 &N1, 50 &
N502 N, 100 &
3.1415926535897932384626433832795028841971693993751
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641573
3) Anwendungen mit Map und Nest
Map, a, b, c5 3 a, 5 3 b, 5 3 c
Mathematica_2014_complete.nb 43
Map^2 &, 1, 5, 131, 25, 169
MapSin, a b cSina Sinb Sinc
Nest11 &, , 31
1 1
11
1
ohne p.f. braucht man dafür 2 Anweisungen und ein Symbol
qx_ : 1
1 x
Nestq, , 31
1 1
11
1
ExpRandomReal0, 10, 10 TableForm PaddedForm, 10, 3 &1169.059
33.8134.171
1549.020653.453149.903
10714.59151.201
3371.674100.371
2.3. Listen ....
ü Erzeugung von Listen
l1 2, 3, 42, 3, 4
Arithmetische Folgen erzeugt man am einfachsten mit Range
44 Mathematica_2014_complete.nb
Range5Range2, 4Range0.1, 1.1, 0.21, 2, 3, 4, 5
2, 3, 4
0.1, 0.3, 0.5, 0.7, 0.9, 1.1
Mit Table kann man Listen aller Art erzeugen,
z.B. Listen von Zahlen oder Symbolischen Ausdrücken
Tablex^n, n, 5x, x2, x3, x4, x5
Listen von Listen, bzw. geschachtelte Listen oder Matrizen
Tablex^n y^m, n, 3, m, 2x y, x y2, x2 y, x2 y2, x3 y, x3 y2
Tablex, Sinx, x, 0, 2 Pi, Pi 4
0, 0, 4,
1
2,
2, 1, 3
4,
1
2, , 0, 5
4,
1
2, 3
2, 1, 7
4,
1
2, 2 , 0
Eine Liste von Zufallszahlen
l2 TableRandomReal, 200.301473, 0.742062, 0.419267, 0.255465, 0.358688, 0.676718,0.495266, 0.127366, 0.833929, 0.165581, 0.114931, 0.213081, 0.674014,0.879938, 0.204973, 0.322488, 0.938045, 0.74282, 0.312768, 0.0740554
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:
Sin0, 1, 1.0, 3.14, , 90, 90 °0, Sin1, 0.841471, 0.00159265, 0, Sin90, 1
Man beachte, dass Sin[1] oder Sin[90] 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:
Sin2Cos1Sec1 Sin2
Mathematica_2014_complete.nb 45
Simplify2 Sin1
ü Ausgabeformate
nPi TableNi , j 2 i, i, 1, 3, j, 2, 53.142, 3.1416, 3.14159, 3.141593, 6.28319, 6.283185, 6.2831853, 6.28318531,9.4247780, 9.42477796, 9.424777961, 9.4247779608
als Tabelle
TableFormnPi3.142 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 TableFormnPi, 10, 53.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
MatrixFormnPi3.142 3.1416 3.14159 3.141593
6.28319 6.283185 6.2831853 6.283185319.4247780 9.42477796 9.424777961 9.4247779608
mit Zeilen- und Spaltenbezeichnungen und zentriert
TableFormnPi, TableHeadings " :", "2:", "3:", None,TableAlignments Center, Center, Center: 3.142 3.1416 3.14159 3.141593
2: 6.28319 6.283185 6.2831853 6.283185313: 9.4247780 9.42477796 9.424777961 9.4247779608
ü Operationen auf Listen
ã listeable
Die meisten Funktionen in Mathematica sind Listable
AttributesSinListable, NumericFunction, Protected
46 Mathematica_2014_complete.nb
Sin0, 1., 2, x0, 0.841471, 1, Sinx
Nicht jede Funktion ist Listable
f1b_ : NIntegrateLogx, x, 0, b
f11, 10, 20, 100NIntegrate::nlim : x = 1., 10., 20., 100. is not a valid limit of integration.àNIntegrateLogx, x, 0, 1, 10, 20, 100
dann kann man entweder das Attribut explizit setzen
Attributesf1 ListableListable
f11, 10, 20, 1001., 13.0259, 39.9146, 360.517
zur Demonstration einer zweiten Möglichkeit wird hier das Attribut wieder zurückgesetzt
Attributesf1
ã Map, bzw. /@
alternative kann man die Funktion Map anwenden:
Mapf1, 1, 10, 20, 1001., 13.0259, 39.9146, 360.517
für Map[f,list] gibt es den Operator /@
f1 1, 10, 20, 1001., 13.0259, 39.9146, 360.517
ã Part, bzw. [[ ]]
Einzelne Elemente können mit Part aus einer Liste geholt werden
Part, 4360.517
oder einfach mit
213.0259
Mathematica_2014_complete.nb 47
Listen können mehrfach geschachtelt sein, z.B. die Lösungen von Gleichungen:
lsg Solvex^2 1 0, xx 1, x 1
lsg1x 1
lsg1, 1x 1
lsg2, 1, 21
am besten übergibt man eine solche Lösung durch eine Regelzuweisung an eine neue
Variable, z.B:
x2 x . lsg21
generell können bei Zuweisungen auf der linken Seite auch Listen stehen:
x1, x2 x . lsg1, 1
Die Struktur einer geschachtelten Liste erkennt man am besten mit FullForm oder TreeForm.
FullFormlsgListListRulex, 1, ListRulex, 1
48 Mathematica_2014_complete.nb
TreeFormlsg
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)
ü mehrdimensionale oder geschachtelte Listen
list3 10, 20, a, b, 30, c, , 10, 20, a, b, 30, c, ,
Partlist3, 3a, b
list33a, b
list33, 1a
list35, 2, 2
ü Transpose
Transpose vertauscht Zeilen mit Spalten, ergibt also eine transponierte Matrix
Mathematica_2014_complete.nb 49
list3 1, 2, 3, 4, a, b, c, d1, 2, 3, 4, a, b, c, d
MatrixForm 1 2 3 4a b c d
Transposelist31, a, 2, b, 3, c, 4, d
MatrixForm1 a2 b3 c4 d
für Operationen mit Matrizen aber auch z.B. zum Plotten von Datenpunkten:
x1 1, 3, 4, 7;y1 2, 0, 3, 5;
Transposex1, y11, 2, 3, 0, 4, 3, 7, 5
ListPlotTransposex1, y1, PlotStyle PointSize0.05
2 3 4 5 6 7
-2
2
4
2.4. Vektoren und Matrizen
ü Vektoren
In Mathematica ist ein Vektor eine Liste
50 Mathematica_2014_complete.nb
vec1 a, b, ca, b, c
vec1 MatrixFormabc
vec2 Arraya, 3a1, a2, a3
ü Matrizen
In Mathematica ist eine Matrix eine geschachtelte Liste
Erzeugung einer 2x2 Matrix mit Palette
mat1 a bc d
a, b, c, d
Erzeugung einer beliebigen NxM Matrix mit Palette
mit Ctrl Enter ( ‚¿ ) erzeugt man eine neue Zeile
mit Ctrl , (Komma) ( ‚ , ) erzeugt man eine neue Spalte
mat2
a1 a2 a3 a4b1
b2
b4
a1, a2, a3, a4, b1, , , , b2, , , , , , , , b4, , ,
Erzeugung einer Matrix mit ContextMenu (rechte Maustaste) : "Insert Table/Matrix"
1 0 00 1 00 0 1
1, 0, 0, 0, 1, 0, 0, 0, 1
Erzeugung einer symbolischen Matrix mit Array
mat3 ArrayA, 2, 3A1, 1, A1, 2, A1, 3, A2, 1, A2, 2, A2, 3
MatrixFormA1, 1 A1, 2 A1, 3A2, 1 A2, 2 A2, 3
Mathematica_2014_complete.nb 51
auch eine etwas schönere Schreibweise mit Indizes ist möglich mit der Funktion Subscript[...]
ArraySubscriptx, 1, 2 &, 3, 3 MatrixFormx1,1 x1,2 x1,3x2,1 x2,2 x2,3x3,1 x3,2 x3,3
aber Vorsicht bei Indizes: Die indizierte Größe ist nicht unabhängig von der normalen Variablen.
x 2, x1,2 0, x3 52, 0, 5
ArraySubscriptx, 1, 2 &, 3, 3 MatrixForm21,1 0 21,322,1 22,2 22,323,1 23,2 23,3
Removexnatürlich kann eine Matrix auch mit dem Befehl Table[...] erzeugt werden:
mat4 Tableai,j, i, 1, 4, j, 1, 3 MatrixForma1,1 a1,2 a1,3a2,1 a2,2 a2,3a3,1 a3,2 a3,3a4,1 a4,2 a4,3
Vorsicht: //MatrixForm ist wie auch //TableForm etc eine Darstellungsform und sollte nicht in die
Definition einer Größe aufgenommen werden:
mat42, 2
Part::partw : Part 2 of
a1,1 a1,2 a1,3a2,1 a2,2 a2,3a3,1 a3,2 a3,3a4,1 a4,2 a4,3
does not exist.à
a1,1 a1,2 a1,3a2,1 a2,2 a2,3a3,1 a3,2 a3,3a4,1 a4,2 a4,3
2, 2
besser:
mat5 Tablebi,j, i, 1, 4, j, 1, 3 MatrixFormb1,1 b1,2 b1,3b2,1 b2,2 b2,3b3,1 b3,2 b3,3b4,1 b4,2 b4,3
oder:
52 Mathematica_2014_complete.nb
mat5 Tablebi,j, i, 1, 4, j, 1, 3 MatrixFormb1,1, b1,2, b1,3, b2,1, b2,2, b2,3, b3,1, b3,2, b3,3, b4,1, b4,2, b4,3
b1,1 b1,2 b1,3b2,1 b2,2 b2,3b3,1 b3,2 b3,3b4,1 b4,2 b4,3
ã Einheitsmatrix
IdentityMatrix5 MatrixForm1 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 00 0 0 0 1
ã Diagonalmatrix
DiagonalMatrix1, 2, 3, 4, 5 MatrixForm1 0 0 0 00 2 0 0 00 0 3 0 00 0 0 4 00 0 0 0 5
auch für sub- und superdiagonale Matrizen
DiagonalMatrixa, b, 1 MatrixForm0 0 0a 0 00 b 0
ü Operationen auf Matrizen und Vektoren
ã Multiplikation Dot (mit normalem Punkt: . )
diese beiden Matrizen passen nicht zusammen:
mat1.mat5
Dot::dotsh :
Tensors a, b, c, d and b1,1, b1,2, b1,3, b2,1, b2,2, b2,3, b3,1, b3,2, b3,3, b4,1, b4,2, b4,3 have incompatibleshapes.à
a, b, c, d.b1,1, b1,2, b1,3, b2,1, b2,2, b2,3, b3,1, b3,2, b3,3, b4,1, b4,2, b4,3
mat1.mat3 MatrixForma A1, 1 b A2, 1 a A1, 2 b A2, 2 a A1, 3 b A2, 3c A1, 1 d A2, 1 c A1, 2 d A2, 2 c A1, 3 d A2, 3
mit Apply[funct, liste] bzw. funct /@ liste operiert die Funktion auf jedes einzelne Element
Mathematica_2014_complete.nb 53
MatrixForm mat1, mat3, mat1.mat3
a bc d
, A1, 1 A1, 2 A1, 3A2, 1 A2, 2 A2, 3 ,
a A1, 1 b A2, 1 a A1, 2 b A2, 2 a A1, 3 b A2, 3c A1, 1 d A2, 1 c A1, 2 d A2, 2 c A1, 3 d A2, 3
mat1.x, ya x b y, c x d y
vec x, yx, y
vec MatrixForm xy
hier unterscheidet Mathematica nicht zwischen Spalten- und Zeilenvektoren
mat1.vec MatrixForm a x b yc x d y
vec.mat1 MatrixForm a x c yb x d y
Skalarprodukt
1, 2.3, 411
Vektorprodukt
1, 2, 13, 4, 514, 8, 2
ã Spalten - und Zeilenvektoren
wenn man zwischen Spalten- und Zeilenvektoren unterscheiden möchte, muss man diese als Matrizen
schreiben:
vcolumn x, yx, y
54 Mathematica_2014_complete.nb
MatrixForm xy
vline x, yx, y
MatrixForm x y
mat1.vcolumn MatrixForm a x b yc x d y
vline.mat1 MatrixForm a x c y b x d y
die jeweils andere Schreibweise ist dann ausgeschlossen:
mat1.vline MatrixFormDot::dotsh : Tensors a, b, c, d and x, y have incompatible shapes.àa, b, c, d.x, y
vcolumn.mat1 MatrixFormDot::dotsh : Tensors x, y and a, b, c, d have incompatible shapes.àx, y.a, b, c, d
mit Transpose[ ] kann man die beiden Formen ineinander überführen:
Transposevline MatrixForm xy
Transposevcolumn MatrixForm x y
ã Norm und Normierung: Norm, Normalize
v 1, 2, 31, 2, 3
Mathematica_2014_complete.nb 55
Normv
14
vn Normalizev
1
14,
2
7,
3
14
Norm1
ã Operationen auf Matrizen: Transpose, ConjugateTranspose, Inverse, Tr, Det
c1 1 1
1 1
1, 1 , 1 , 1
die Transponierte Matrix AT
Transposec1 MatrixForm1 1
1 1
und die Hermitisch Konjugierte Matrix A† (transponiert und konjugiert komplex)
ConjugateTransposec1 MatrixForm1 1
1 1
Abfrage als logischer Ausdruck: Ergebnis entweder True oder False
ConjugateTransposec1 c1
True
für viele Eigenschaften hat Mathematica auch Testfunktionen eingebaut, die mit Q enden,
z.B. PrimeQ, EvenQ, OddQ, IntegerQ, etc. so auch HermitianMatrixQ
HermitianMatrixQc1True
Inverse Matrix
Inversec1 c1
False
56 Mathematica_2014_complete.nb
Inversec1 MatrixForm1
3
1
3
3
1
3
31
3
Spur (Tr[...]) und Determinante (Det[...])
c1 Trc1 Det0
3
Unitäre Matrix, dann, wenn: A-1 = A†
smat 0
0
, 0, 0,
Inversesmat ConjugateTransposesmat , 0, 0, Conjugate, 0, 0, Conjugate
die Matrix A ist unitär, wenn a,b e R
ComplexExpandTrue
ü Lineare Gleichungssysteme
A . x = b
dabei ist A eine Matrix und b und x sind Vektoren. Formal ist die Lösung: x = A-1 . b
mA RandomInteger5, 3, 31, 3, 1, 3, 1, 5, 2, 3, 5
vb RandomInteger2, 2, 30, 1, 0
ã Lösung mit Inverser Matrix
vx InversemA.vb
23,
1
6,
1
6
Mathematica_2014_complete.nb 57
ã Lösung mit LinearSolve
vx LinearSolvemA, vb
23,
1
6,
1
6
ã Lösung mit Solve
Removex, y, z
vx x, y, zx, y, z
eq1 mA.vx vb
x 3 y z, 3 x y 5 z, 2 x 3 y 5 z 0, 1, 0
Solveeq1, x, y, z
x 2
3, y
1
6, z
1
6
ü Eigenwert Gleichungen
M . v = l v bzw. (M - lI) . v = 0
dabei ist l ein Eigenwert und v ein Eigenvektor. Eine 3x3 Matrix hat 3 Eigenwerte und 3 dazuge-
hörige Eigenvektoren.
ã triviales Beispiel
mA DiagonalMatrixa, b, c MatrixForma 0 00 b 00 0 c
EigenvaluesmAa, b, c
EigenvectorsmA1, 0, 0, 0, 1, 0, 0, 0, 1
man kann auch mit Eigensystem[...] die Eigenwerte und dazugehörigen Eigenvektoren auf einmal
berechnen:
EigensystemmAa, b, c, 1, 0, 0, 0, 1, 0, 0, 0, 1
58 Mathematica_2014_complete.nb
MatrixForm a b c1, 0, 0 0, 1, 0 0, 0, 1
ã ein nicht so triviales Beispiel
mB ArraySubscriptb, 1, 2 &, 2, 2 MatrixFormb1,1 b1,2b2,1 b2,2
EigensystemmB MatrixForm1
2b1,1 b2,2 b1,1
2 4 b1,2 b2,1 2 b1,1 b2,2 b2,22 1
2b1,1 b2,2 b1,1
2 4 b1,2 b2,1 2 b1,1 b2,2 b2,22
b1,1b2,2 b1,12 4 b1,2 b2,12 b1,1 b2,2b2,2
2
2 b2,1, 1 b1,1b2,2 b1,1
2 4 b1,2 b2,12 b1,1 b2,2b2,22
2 b2,1, 1
mB ArraySubscriptb, 1, 2 &, 4, 4 MatrixFormb1,1 b1,2 b1,3 b1,4b2,1 b2,2 b2,3 b2,4b3,1 b3,2 b3,3 b3,4b4,1 b4,2 b4,3 b4,4
EigensystemmB
A very large output was generated. Here is a sample of it:
Root14 361 12 b1,2 b2,1 15 b3,3 b4,4 1 b1,3 b2,2 b3,1 b1,2 b2,3 b3,1 b1,3 b2,1 b3,2 b1,1 b2,3 b3,2 b1,2 b2,1 b3,3 b1,1 b2,2 b3,3
b1,4 b2,2 b4,1 b1,2 b2,4 b4,1 13 b1,1 b3,4 b4,3 b2,2 b3,4 b4,3 b1,2 b2,1 b4,4
b1,1 b2,2 b4,4 b1,3 b3,1 b4,4 b2,3 b3,2 b4,4 b1,1 b3,3 b4,4 b2,2 b3,3 b4,4 &, 1,Root1 &, 2, 1, Root14 38 1 1 &, 4, 1
Show Less Show More Show Full Output Set Size Limit...
analytische Lösungen gibt es nur bis 3x3 Matrizen
auch formale Lösungen mit Root erfordern sehr viel Rechenzeit
mit numerischen Matrizen ist das alles kein Problem
das nächste Beispiel rechnet jedoch erstmal exakt, da es sich um ganze Zahlen handelt
mC RandomInteger9, 5, 5 MatrixForm3 5 1 1 21 2 9 1 37 2 7 2 59 6 7 8 58 5 9 7 4
EigensystemmC
Mathematica_2014_complete.nb 59
Root1664 633 1 365 12 47 13 24 14 15 &, 3,Root1664 633 1 365 12 47 13 24 14 15 &, 5,Root1664 633 1 365 12 47 13 24 14 15 &, 4,Root1664 633 1 365 12 47 13 24 14 15 &, 2,Root1664 633 1 365 12 47 13 24 14 15 &, 1,
35 121 61843 953 053
5 507 986 Root1664 633 1 365 12 47 13 24 14 15 &, 3
43 953 053
4 852 882 Root1664 633 1 365 12 47 13 24 14 15 &, 32
43 953 053
1 039 789 Root1664 633 1 365 12 47 13 24 14 15 &, 33
43 953 053
37 208 Root1664 633 1 365 12 47 13 24 14 15 &, 34
43 953 053,
13 970 301
43 953 05312 538 101 Root1664 633 1 365 12 47 13 24 14 15 &, 3
43 953 053
473 949 Root1664 633 1 365 12 47 13 24 14 15 &, 32
43 953 053
1 176 709 Root1664 633 1 365 12 47 13 24 14 15 &, 33
43 953 053
49 970 Root1664 633 1 365 12 47 13 24 14 15 &, 34
43 953 053,
1 380 375
43 953 0536 926 179 Root1664 633 1 365 12 47 13 24 14 15 &, 3
87 906 106
3 820 771 Root1664 633 1 365 12 47 13 24 14 15 &, 32
43 953 053
55 271 Root1664 633 1 365 12 47 13 24 14 15 &, 33
87 906 106
12 183 Root1664 633 1 365 12 47 13 24 14 15 &, 34
87 906 106,
26 776 516
43 953 05334 154 183 Root1664 633 1 365 12 47 13 24 14 15 &, 3
87 906 106
295 196 Root1664 633 1 365 12 47 13 24 14 15 &, 32
43 953 053
624 585 Root1664 633 1 365 12 47 13 24 14 15 &, 33
87 906 106
29 325 Root1664 633 1 365 12 47 13 24 14 15 &, 34
87 906 106, 1,
60 Mathematica_2014_complete.nb
35 121 61843 953 053
5 507 986 Root1664 633 1 365 12 47 13 24 14 15 &, 5
43 953 053
4 852 882 Root1664 633 1 365 12 47 13 24 14 15 &, 52
43 953 053
1 039 789 Root1664 633 1 365 12 47 13 24 14 15 &, 53
43 953 053
37 208 Root1664 633 1 365 12 47 13 24 14 15 &, 54
43 953 053,
13 970 301
43 953 05312 538 101 Root1664 633 1 365 12 47 13 24 14 15 &, 5
43 953 053
473 949 Root1664 633 1 365 12 47 13 24 14 15 &, 52
43 953 053
1 176 709 Root1664 633 1 365 12 47 13 24 14 15 &, 53
43 953 053
49 970 Root1664 633 1 365 12 47 13 24 14 15 &, 54
43 953 053,
1 380 375
43 953 0536 926 179 Root1664 633 1 365 12 47 13 24 14 15 &, 5
87 906 106
3 820 771 Root1664 633 1 365 12 47 13 24 14 15 &, 52
43 953 053
55 271 Root1664 633 1 365 12 47 13 24 14 15 &, 53
87 906 106
12 183 Root1664 633 1 365 12 47 13 24 14 15 &, 54
87 906 106,
26 776 516
43 953 05334 154 183 Root1664 633 1 365 12 47 13 24 14 15 &, 5
87 906 106
295 196 Root1664 633 1 365 12 47 13 24 14 15 &, 52
43 953 053
624 585 Root1664 633 1 365 12 47 13 24 14 15 &, 53
87 906 106
29 325 Root1664 633 1 365 12 47 13 24 14 15 &, 54
87 906 106, 1,
35 121 61843 953 053
5 507 986 Root1664 633 1 365 12 47 13 24 14 15 &, 4
43 953 053
4 852 882 Root1664 633 1 365 12 47 13 24 14 15 &, 42
43 953 053
Mathematica_2014_complete.nb 61
1 039 789 Root1664 633 1 365 12 47 13 24 14 15 &, 43
43 953 053
37 208 Root1664 633 1 365 12 47 13 24 14 15 &, 44
43 953 053,
13 970 301
43 953 05312 538 101 Root1664 633 1 365 12 47 13 24 14 15 &, 4
43 953 053
473 949 Root1664 633 1 365 12 47 13 24 14 15 &, 42
43 953 053
1 176 709 Root1664 633 1 365 12 47 13 24 14 15 &, 43
43 953 053
49 970 Root1664 633 1 365 12 47 13 24 14 15 &, 44
43 953 053,
1 380 375
43 953 0536 926 179 Root1664 633 1 365 12 47 13 24 14 15 &, 4
87 906 106
3 820 771 Root1664 633 1 365 12 47 13 24 14 15 &, 42
43 953 053
55 271 Root1664 633 1 365 12 47 13 24 14 15 &, 43
87 906 106
12 183 Root1664 633 1 365 12 47 13 24 14 15 &, 44
87 906 106,
26 776 516
43 953 05334 154 183 Root1664 633 1 365 12 47 13 24 14 15 &, 4
87 906 106
295 196 Root1664 633 1 365 12 47 13 24 14 15 &, 42
43 953 053
624 585 Root1664 633 1 365 12 47 13 24 14 15 &, 43
87 906 106
29 325 Root1664 633 1 365 12 47 13 24 14 15 &, 44
87 906 106, 1,
35 121 61843 953 053
5 507 986 Root1664 633 1 365 12 47 13 24 14 15 &, 2
43 953 053
4 852 882 Root1664 633 1 365 12 47 13 24 14 15 &, 22
43 953 053
1 039 789 Root1664 633 1 365 12 47 13 24 14 15 &, 23
43 953 053
37 208 Root1664 633 1 365 12 47 13 24 14 15 &, 24
43 953 053,
62 Mathematica_2014_complete.nb
13 970 301
43 953 05312 538 101 Root1664 633 1 365 12 47 13 24 14 15 &, 2
43 953 053
473 949 Root1664 633 1 365 12 47 13 24 14 15 &, 22
43 953 053
1 176 709 Root1664 633 1 365 12 47 13 24 14 15 &, 23
43 953 053
49 970 Root1664 633 1 365 12 47 13 24 14 15 &, 24
43 953 053,
1 380 375
43 953 0536 926 179 Root1664 633 1 365 12 47 13 24 14 15 &, 2
87 906 106
3 820 771 Root1664 633 1 365 12 47 13 24 14 15 &, 22
43 953 053
55 271 Root1664 633 1 365 12 47 13 24 14 15 &, 23
87 906 106
12 183 Root1664 633 1 365 12 47 13 24 14 15 &, 24
87 906 106,
26 776 516
43 953 05334 154 183 Root1664 633 1 365 12 47 13 24 14 15 &, 2
87 906 106
295 196 Root1664 633 1 365 12 47 13 24 14 15 &, 22
43 953 053
624 585 Root1664 633 1 365 12 47 13 24 14 15 &, 23
87 906 106
29 325 Root1664 633 1 365 12 47 13 24 14 15 &, 24
87 906 106, 1,
35 121 61843 953 053
5 507 986 Root1664 633 1 365 12 47 13 24 14 15 &, 1
43 953 053
4 852 882 Root1664 633 1 365 12 47 13 24 14 15 &, 12
43 953 053
1 039 789 Root1664 633 1 365 12 47 13 24 14 15 &, 13
43 953 053
37 208 Root1664 633 1 365 12 47 13 24 14 15 &, 14
43 953 053,
13 970 301
43 953 05312 538 101 Root1664 633 1 365 12 47 13 24 14 15 &, 1
43 953 053
473 949 Root1664 633 1 365 12 47 13 24 14 15 &, 12
43 953 053
Mathematica_2014_complete.nb 63
1 176 709 Root1664 633 1 365 12 47 13 24 14 15 &, 13
43 953 053
49 970 Root1664 633 1 365 12 47 13 24 14 15 &, 14
43 953 053,
1 380 375
43 953 0536 926 179 Root1664 633 1 365 12 47 13 24 14 15 &, 1
87 906 106
3 820 771 Root1664 633 1 365 12 47 13 24 14 15 &, 12
43 953 053
55 271 Root1664 633 1 365 12 47 13 24 14 15 &, 13
87 906 106
12 183 Root1664 633 1 365 12 47 13 24 14 15 &, 14
87 906 106,
26 776 516
43 953 05334 154 183 Root1664 633 1 365 12 47 13 24 14 15 &, 1
87 906 106
295 196 Root1664 633 1 365 12 47 13 24 14 15 &, 12
43 953 053
624 585 Root1664 633 1 365 12 47 13 24 14 15 &, 13
87 906 106
29 325 Root1664 633 1 365 12 47 13 24 14 15 &, 14
87 906 106, 1
EigensystemmC N22.5727, 0.0926728 4.35426 , 0.0926728 4.35426 , 2.9362, 1.3236,0.319936, 0.505167, 0.66707, 1.06911, 1.,2.70105 1.34147 , 0.353528 3.47533 , 1.66167 0.365633 , 0.618335 1.10121 , 1.,2.70105 1.34147 , 0.353528 3.47533 , 1.66167 0.365633 , 0.618335 1.10121 , 1.,0.751065, 0.655195, 0.523278, 1.84717, 1.,0.382319, 0.0247343, 0.289017, 0.0656823, 1.
ComplexNumberPlot1ComplexNumberPlot22.5727, 0.0926728 4.35426 , 0.0926728 4.35426 , 2.9362, 1.3236
64 Mathematica_2014_complete.nb
ManipulateComplexNumberPlotEigenvaluesRandomInteger9, n, n N,PlotRange 20, 20, 20, 20,n, 3, 1, 50, 1, Appearance "Labeled", "Open"
n 3
3
ã Vergleich von Rechenzeiten
EigenvaluesRandomInteger9, 50, 50; Timing0.468, Null
EigenvaluesRandomInteger9, 100, 100; Timing64.719, Null
im ersten Beispiel wird noch exakt gerechnet, was zu sehr langen Rechenzeiten führen
kann,
in allen weiteren Beispielen ist die Rechenzeit sehr kurz und praktisch gleich
EigenvaluesNRandomInteger9, 500, 500; Timing0.172, Null
Mathematica_2014_complete.nb 65
EigenvaluesRandomReal9, 500, 500; Timing0.171, Null
ü Matrix Diagonalisierung
eine quadratische Matrix A ist diagonalisierbar, wenn es eine Matrix X gibt, für die
gilt:
X-1. A . X diag lA
dabei sind l(A) die Eigenwerte und X eine Matrix aus den Eigenvektoren
A =1 23 4
1, 2, 3, 4
EigenvaluesA
12
5 33 ,1
25 33
vecs EigenvectorsA
431
65 33 , 1, 4
31
65 33 , 1
X vecs Transpose
431
65 33 ,
4
31
65 33 , 1, 1
X MatrixForm4
3
1
65 33
4
3
1
65 33
1 1
66 Mathematica_2014_complete.nb
X-1.A.X
2 3
11 4
3
11
4
31
65 33
4
31
65 33
3
11 3
3
11
4
31
65 33 ,
23
11 4
3
11
4
31
65 33
4
31
65 33
3
11 3
3
11
4
31
65 33 ,
2 3
11 4
3
114
31
65 33
4
31
65 33
3
11 3
3
114
31
65 33 ,
23
11 4
3
114
31
65 33
4
31
65 33
3
11 3
3
114
31
65 33
Simplify MatrixForm TraditionalForm1
25 + 33 0
01
25 - 33
DiagonalMatrix MatrixForm TraditionalForm1
25 + 33 0
01
25 - 33
3. Grafik und Manipulate
3.1. Übersicht über die wichtigsten Grafik-Prozeduren
ü 2D Grafik
Plot ListPlot ListLinePlot
ParametricPlot
ContourPlot ListContourPlot
DensityPlot ListDensityPlot
ü 3D Grafik
Plot3D ListPlot3D ListPointPlot3D
ParametricPlot3D
Mathematica_2014_complete.nb 67
3.2. 2D-Grafik
ü Plot
Plotf, x, xmin, xmaxHier ist ein einfacher 2-dim Plot, bei dem alle notwendigen Einstellungen, wie Achsenskalierungen automatisch vorgenommen
werden:
PlotSinx, x, 0, 2
1 2 3 4 5 6
-1.0
-0.5
0.5
1.0
Wie auch bei Berechnungen wird durch das Semikolon (;) die Ausgabe unterdrückt.
PlotSinx, x, 0, 4 ;Mit Plot kann man auch mehrere Funktionen gleichzeitig in ein Diagramm einzeichnen:
Dabei wird eine automatische Skalierung vorgenommen, die die verschiedenen Wertebereiche optimiert.
Die verschiedenen Kurven werden mit unterschiedlichen Farben dargestellt (Blau, Rot, Braun, Grün).
Plotx2, Sinx, Cosx, x, x, 0, 2
1 2 3 4 5 6
10
20
30
40
50
60
Das Aussehen der Plots kann auf vielfältige Weise durch "Optionen" verändert werden. Diese Optionen haben Voreinstellungen,
können aber auch einzeln manuell verändert werden.
Eine Übersicht gibt die Online-Help oder wie folgt mit Information und LongForm oder einfach mit ??Plot:
Information"Plot", LongForm True
68 Mathematica_2014_complete.nb
Plot f , x, xmin, xmax generates a plot of f as a function of x from xmin to xmax.Plot f1, f2, …, x, xmin, xmax plots several functions fi. à
AttributesPlot HoldAll, Protected
OptionsPlot : AlignmentPoint Center, AspectRatio 1
GoldenRatio, Axes True, AxesLabel None,
AxesOrigin Automatic, AxesStyle , Background None, BaselinePosition Automatic,BaseStyle 16, FontFamily Times, Italic, ClippingStyle None, ColorFunction Automatic,ColorFunctionScaling True, ColorOutput Automatic, ContentSelectable Automatic,CoordinatesToolOptions Automatic, DisplayFunction $DisplayFunction, Epilog ,Evaluated Automatic, EvaluationMonitor None, Exclusions Automatic, ExclusionsStyle None,Filling None, FillingStyle Automatic, FormatType TraditionalForm, Frame False,FrameLabel None, FrameStyle , FrameTicks Automatic, FrameTicksStyle ,GridLines None, GridLinesStyle , ImageMargins 0., ImagePadding All,ImageSize 350, ImageSizeRaw Automatic, LabelStyle , MaxRecursion Automatic,Mesh None, MeshFunctions 1 &, MeshShading None, MeshStyle Automatic,Method Automatic, PerformanceGoal $PerformanceGoal, PlotLabel None,PlotPoints Automatic, PlotRange Full, Automatic, PlotRangeClipping True,PlotRangePadding Automatic, PlotRegion Automatic, PlotStyle Thickness0.005,PreserveImageOptions Automatic, Prolog , RegionFunction True &,RotateLabel True, Ticks Automatic, TicksStyle , WorkingPrecision MachinePrecision
?? Plot
Plot f , x, xmin, xmax generates a plot of f as a function of x from xmin to xmax.Plot f1, f2, …, x, xmin, xmax plots several functions fi. à
AttributesPlot HoldAll, Protected
OptionsPlot : AlignmentPoint Center, AspectRatio 1
GoldenRatio, Axes True, AxesLabel None,
AxesOrigin Automatic, AxesStyle , Background None, BaselinePosition Automatic,BaseStyle 16, FontFamily Times, Italic, ClippingStyle None, ColorFunction Automatic,ColorFunctionScaling True, ColorOutput Automatic, ContentSelectable Automatic,CoordinatesToolOptions Automatic, DisplayFunction $DisplayFunction, Epilog ,Evaluated Automatic, EvaluationMonitor None, Exclusions Automatic, ExclusionsStyle None,Filling None, FillingStyle Automatic, FormatType TraditionalForm, Frame False,FrameLabel None, FrameStyle , FrameTicks Automatic, FrameTicksStyle ,GridLines None, GridLinesStyle , ImageMargins 0., ImagePadding All,ImageSize 350, ImageSizeRaw Automatic, LabelStyle , MaxRecursion Automatic,Mesh None, MeshFunctions 1 &, MeshShading None, MeshStyle Automatic,Method Automatic, PerformanceGoal $PerformanceGoal, PlotLabel None,PlotPoints Automatic, PlotRange Full, Automatic, PlotRangeClipping True,PlotRangePadding Automatic, PlotRegion Automatic, PlotStyle Thickness0.005,PreserveImageOptions Automatic, Prolog , RegionFunction True &,RotateLabel True, Ticks Automatic, TicksStyle , WorkingPrecision MachinePrecision
Mathematica_2014_complete.nb 69
pl1 PlotSinx, x, 0, 2 , PlotStyle Thick,
PlotLabel "Die SinusFunktion", AxesLabel "x", "Sinx"
1 2 3 4 5 6x
-1.0
-0.5
0.5
1.0Sinx
Die Sinus-Funktion
ü etwas Plot-Kosmetik
eine sehr große Anzahl von Optionen erlauben vielfältige Verschönerungen der Plots,
z.B. für Präsentationen oder Publikationen
StyleForm[ ] und BaseStyle[ ] erlauben spezielle Font-Wahl
PlotSinx, x, 0, 2 , PlotStyle Red, Dashed, Thick,PlotLabel StyleForm"Die SinusFunktion", "Times", 20,FrameLabel "x", "Sinx",BaseStyle 16, FontFamily "HelveticaOblique",FrameStyle Thickness0.0025,GridLines Automatic, Frame True
0 1 2 3 4 5 6-1.0
-0.5
0.0
0.5
1.0
x
Sin
x
Die Sinus-Funktion
ImageSize:
Die Größe eines Plots ist in den Grundeinstellungen (Option Inspector) festgelegt. Sie kann nachträglich einfach mit der Maus
verändert werden. Sie kann aber auch durch ImageSize (z.B. ImageSizeØ400) eingegeben werden:
70 Mathematica_2014_complete.nb
individuelle PlotStyles:
meist wird man die einfachen voreingestellten Werte verwenden, es geht aber auch sehr individuell:
Farbe: Hue[h] oder RGB[r,g,b] mit h,r,g,b e [0,1] Z.B. Hue[1] (Rot) RGB[0,0,1] (Blau)
Linienart: Dashing[r] oder Dashing[{r1,r2}], wobei r in Einheiten der ImageSize angegeben wird.
Liniendicke: Thickness[r], Achtung: nicht zu groß wählen, z.B. r=0.005
FrameStyle-> erzeugt dickere Achsen
pl2 PlotSinx, x, 0, 2 ,PlotStyle Hue0.9, Dashing0.05, Thickness0.007,GridLines Automatic,
PlotLabel StyleForm"Die SinusFunktion", "Times", 22,FrameLabel "x", "Sinx",BaseStyle 14, FontFamily "HelveticaOblique",Frame True, FrameStyle Thickness0.0025, ImageSize 400
0 1 2 3 4 5 6-1.0
-0.5
0.0
0.5
1.0
x
Sin
x
Die Sinus-Funktion
mit PlotRange werden die Achsen skaliert
im ersten Plot werden PlotRange und PlotStyle automatisch eingestellt
Mathematica_2014_complete.nb 71
pl3 PlotSinx, Cosx, Tanx, Cotx, x, 0, 2 ,PlotRange Automatic, PlotStyle Automatic,PlotLabel "Sin, Cos, Tan, Cot", FrameLabel "x", None,BaseStyle 18, FontFamily "Helvetica", Frame True
0 1 2 3 4 5 6
-3-2-1
01234
x
Sin, Cos, Tan, Cot
ü Dashing
Das standardmäßige Stricheln der Kurven lässt sehr zu wünschen übrig:
PlotSqrtx 0.5, Sqrtx 1,Sqrtx 1.5, Sqrtx 2, Sqrtx 2.5, x, 0, 5,
PlotStyle Dashed, DotDashed, Dotted,FrameStyle Thickness0.0025, Frame True, BaseStyle 16
0 1 2 3 4 50.0
0.5
1.0
1.5
2.0
Im Folgenden werden die Kurven in Publikationsqualität dargestellt:
72 Mathematica_2014_complete.nb
pl3 PlotTanx, x, 0, 2 ,
AxesLabel "x", "tanx", BaseStyle 16,
Ticks 0, 2, , 3 2 , 2 , 2, 0, 2, Frame True
0 1 2 3 4 5 6
-6
-4
-2
0
2
4
6
x
Dafür gibt es die speziellen Optionen für gerahmte Plots : FrameLabel und FrameTicks
FrameLabels haben die gleiche Struktur, FrameTicks sind etwas anders aufgebaut, siehe Beispiel :
pl3 PlotTanx, x, 0, 2 ,
FrameLabel "x", "tanx", BaseStyle 16,
FrameTicks 0, 2, , 3 2 , 2 , 2, 0, 2, Frame True
0 p2
p 3 p2
2 p
-2
0
2
0p2 p
3 p2 2 p
-2
0
2
x
tanx
Mathematica_2014_complete.nb 73
pl3 PlotTanx, x, 0, 2 ,
FrameLabel "x", "tanx", BaseStyle 16, PlotRange 2.5,
FrameTicks 2, 1, 0, 1, 2, None,
0, 2, , 32 , 2 , None, Frame True
0 p2
p 3 p2
2 p
-2
-1
0
1
2
x
tanx
ü Tooltipexpr, labelim nächsten Plot wird die y - Achse neu skaliert und die Linien individuell gewählt
Beachte auch die Funktion Tooltip[ ... ], die die Funktion, bzw. einen Kommentar anzeigt,
sobald man mit der Maus in die Nähe kommt.
pl3 PlotTooltipSinx, Cosx, Tanx, Cotx, x, 0, 2 ,
PlotRange 2, 2, PlotStyle
Black, Thick, Red, Thick, Blue, Thick, Green, Thick,
PlotLabel "Sin, Cos, Tan, Cot", FrameLabel "x", None,
BaseStyle 18, FontFamily "Helvetica", Frame True
0 1 2 3 4 5 6-2
-1
0
1
2
x
Sin, Cos, Tan, Cot
im zweiten Beispiel können eigene Labels vergeben werden:
74 Mathematica_2014_complete.nb
PlotTooltipSinx, "Sinus",
TooltipCosx, "Cosinus", x, 0, 2
1 2 3 4 5 6
-1.0
-0.5
0.5
1.0
PlotTooltipSinx, "Sinus", TooltipCosx, "Cosinus",
x, 0, 2 , AxesOrigin , 1, AspectRatio 0.2,
ImageSize 700, PlotStyle Thickness0.003
0 1 2 3 4 5
-0.5
0.0
0.5
1.0
ã eigene Funktion tooltip
noch flexibler ist ein modifiziertes "tooltip" für die Anwendung auf Listen:
tooltipflist_, clist_ :
TableTooltipflisti, clisti, i, Lengthflist
tooltipSinx, Cosx, "Sinus", "Cosinus" InputForm
{Tooltip[Sin[x], "Sinus"], Tooltip[Cos[x], "Cosinus"]}
Mathematica_2014_complete.nb 75
PlottooltipSinx, Cosx, "Sinus", "Cosinus" Evaluate,
x, 0, 2
1 2 3 4 5 6
-1.0
-0.5
0.5
1.0
ü Show und PlotRange
fa_, x_ :Sina x2
a x2
del1 Plotf2, x, x, 2, 2
-2 -1 1 2
0.1
0.2
0.3
0.4
0.5
0.6
76 Mathematica_2014_complete.nb
del2 Plotf10, x, x, 2, 2, PlotRange All
-2 -1 1 2
0.5
1.0
1.5
2.0
2.5
3.0
Mit der Funktion "Show" können bereits existierende Grafiken mit geänderten Optionen dargestellt werden oder auch verschiedene
Grafiken in ein Bild gezeichnet werden.
Showdel2, PlotRange Automatic
-2 -1 1 2
0.05
0.10
0.15
0.20
del3 Plotf20, x, x, 2, 2, PlotRange All
-2 -1 1 2
1
2
3
4
5
6
Mathematica_2014_complete.nb 77
Showdel1, del2, del3, PlotRange All
-2 -1 1 2
1
2
3
4
5
6
ü ListPlot
ListPloty1, y2, y3, ...oder ListPlotx1, y1, x2, y2, ...
Kennt man von einer Funktion nur einzelne Punkte oder Wertepaare, kann man diese Funktion nicht mit "Plot" zeichnen. Dafür gibt
es die Funktion "ListPlot" mit ähnlichen Optionen wie Plot.
li1 RandomReal0, 1, 100;
ListPlotli1
20 40 60 80 100
0.2
0.4
0.6
0.8
1.0
78 Mathematica_2014_complete.nb
Plot0.5, x, 0, 100
20 40 60 80 100
0.2
0.4
0.6
0.8
1.0
Show,
20 40 60 80 100
0.2
0.4
0.6
0.8
1.0
ein wichtiger PlotStyle für ListPlot ist die Punktdicke PointSize[d]
dabei ist die Größe d in Einheiten des Gesamtplots
lp1 ListPlotli1, PlotStyle PointSize0.03
20 40 60 80 100
0.2
0.4
0.6
0.8
1.0
es können auch festdefinierte Werte mit PointSize verwendet werden :
PointSize[Large], PointSize[Small], PointSize[Tiny],
Mathematica_2014_complete.nb 79
eine weitere Option ist PlotMarkers -> g, s, dabei ist g ein Graphics Objekt und s die
relat. Größe
damit können beliebige andere Symbole erzeugt werden
lp1 ListPlotli1, PlotMarkers
GraphicsOrange, Rectangle1, 1, 1, 1, 0.05
20 40 60 80 100
0.2
0.4
0.6
0.8
1.0
Als weitere Option gibt es im Vergleich zu Plot die Option: PlotJoined->True,
wobei die einzelnen Punkte durch Linien verbunden werden.
Dafür gibt es auch eine eigene Funktion
ListPlotli1, Joined True
20 40 60 80 100
0.2
0.4
0.6
0.8
1.0
80 Mathematica_2014_complete.nb
ListLinePlotli1, Filling Axis
Mit "Show" können nun beide Darstellungen, Linien und Punkte überlagert werden:
Show, lp1
ListPlotTableRandomReal0, 1, 2, 3000,
PlotStyle Red, ThicknessSmall
0.2 0.4 0.6 0.8 1.0
0.2
0.4
0.6
0.8
1.0
Mathematica_2014_complete.nb 81
ü Überlagerung mehrerer Plots im gemeinsamen Koordinatensystem mit Show
ShowPlot2.5, x, 0, 1,
ListPlotTableRandomReal, 2 RandomReal, 100,
PlotRange 0, 4
0.2 0.4 0.6 0.8 1.0
1
2
3
4
bei automatischer Skalierung spielt die Reihenfolge eine entscheidende Rolle:
ShowPlot2.5, x, 0, 1,
ListPlotTableRandomReal, 2 RandomReal, 100
0.2 0.4 0.6 0.8 1.0
1
2
3
4
5
82 Mathematica_2014_complete.nb
ShowListPlotTableRandomReal, 2 RandomReal, 100,
Plot2.5, x, 0, 1
0.2 0.4 0.6 0.8 1.0
2.2
2.4
2.6
2.8
3.0
ü ParametricPlot
ParametricPlotSint, Cost, t, 0, 2
-1.0 -0.5 0.5 1.0
-1.0
-0.5
0.5
1.0
Mathematica_2014_complete.nb 83
ParametricPlotSin7 t Cost, Sin5 t Sint, t, 0, 2
-1.0 -0.5 0.5 1.0
-0.5
0.5
1.0
ü Option: Filling
TablePlotSinx, x, 0, 2 Pi, ImageSize 150, Filling f,
f, Top, Bottom, Axis, 0.3
, ,
,
TablePlotx3, Sin4 x, x, 1, 1, ImageSize 200, Filling f,
f, Axis, 1 2
,
84 Mathematica_2014_complete.nb
ü Epilog
PlotSinx, x, 0, 10, Epilog Text"Sinx", 5, 0.8
2 4 6 8 10
-1.0
-0.5
0.5
1.0Sinx
ListPlotRandomReal0, 1, 100,
Epilog Line0, 0.5, 100, 0.5
20 40 60 80 100
0.2
0.4
0.6
0.8
1.0
3.3. Contour Plots und Density Plots
ü ContourPlot, DensityPlot
fx_, y_ Exp x2 y2 CosArcTanx, y
x2y2 CosArcTanx, y
Mathematica_2014_complete.nb 85
cp ContourPlotfx, y, x, 1, 1,
y, 1, 1, PlotPoints 30, ContourShading False
cp1 ContourPlotfx, y, x, 1, 1, y, 1, 1, PlotPoints 30
86 Mathematica_2014_complete.nb
dp DensityPlotfx, y, x, 1, 1, y, 1, 1,
PlotPoints 30, Mesh False, ColorFunction Hue,
Axes True, Ticks Automatic, Frame False
Es gibt eine Vielzahl von Color Schemes (Farbverläufe), siehe Help
greenblue RGBColor0, , &;
eigene Definition für Farbabstufung
Mathematica_2014_complete.nb 87
ManipulateContourPlotfx, y, x, 1, 1,
y, 1, 1, PlotPoints 30, Contours contours,
ColorFunction colfunc, Axes axes, Ticks Automatic,
Frame False, ContourLabels labels, ContourStyle style,
colfunc, Automatic, "ColorFunction",
JoinAutomatic, Hue, greenblue, ColorData"Gradients",
axes, True, "Axes", True, False,
ControlType Checkbox, ControlPlacement Bottom,
style, Automatic, "Linien", None, Automatic,
ControlType Checkbox, ControlPlacement Bottom,
labels, None, "ContourLabels", None, Automatic, True, All,
ControlPlacement Bottom,
contours, 10, "Contours", 30, 5, 5,ControlType VerticalSlider, ControlPlacement Right,
SaveDefinitions True
ColorFunction Automatic
Contours
Axes
Linien
ContourLabels None Automatic True All
ü Anordnung von Grafiken in Listen und Tabellen: GraphicsRow, GraphicsColumn, GraphicsGrid
einfachste Anordnung als Liste, jedoch ohne weitere Größenänderung
88 Mathematica_2014_complete.nb
cp, dp
,
gemeinsame Darstellung mit GraphicsRow
Mathematica_2014_complete.nb 89
GraphicsRowcp, dp, PlotLabel Expr Cos, ImageSize 400
GraphicsRowcp, dp
90 Mathematica_2014_complete.nb
GraphicsColumncp, dp, ImageSize 200
ü Veranschaulichung komplexer Funktionen
erstes Beispiel: f z = e-
1
z2 mit einer wesentlichen Singularität im Ursprung
Plot3DExp1 x y2 Abs,
x, 2, 2, y, 2, 2, ColorFunction greenblue,
PlotRange 0, 50, ClippingStyle Automatic
Mathematica_2014_complete.nb 91
ContourPlotExp1 x y2 Im, x, 4, 4, y, 4, 4,
ColorFunction "Rainbow", ClippingStyle Automatic, Contours 20
ContourPlotExp1 x y2 Abs, x, 5, 5, y, 5, 5,
ColorFunction "Rainbow", ClippingStyle Automatic, Contours 20
92 Mathematica_2014_complete.nb
ContourPlotExp1 x y2 Im, x, 4, 4, y, 4, 4,
PlotPoints 50, Contours 80,
ContourStyle None, ClippingStyle Automatic,
ColorFunction ColorData"Rainbow"FractionalPart10 &
-4 -2 0 2 4-4
-2
0
2
4
ContourPlotExp1 x y2 Im, x, 4, 4, y, 4, 4,
PlotPoints 50, Contours 100,
ContourStyle None, ClippingStyle Automatic,
ColorFunction ColorData"BrightBands"FractionalPart10 &
-4 -2 0 2 4-4
-2
0
2
4
Mathematica_2014_complete.nb 93
zweites Beispiel: f z = 1
zn-a mit n Polen auf einem Kreis mit Radius a
a 0;
Plot3D1 x y6 a Abs, x, 1, 1, y, 1, 1,
ColorFunction greenblue &, ClippingStyle Automatic
ContourPlot1 x y6 a Im, x, 1, 1, y, 1, 1,
ColorFunction greenblue &, ClippingStyle Automatic
a 0.2;
94 Mathematica_2014_complete.nb
Plot3D1 x y6 a Abs, x, 1, 1, y, 1, 1,
ColorFunction greenblue &, ClippingStyle Automatic
ContourPlot1 x y6 a Im, x, 1, 1, y, 1, 1,
ColorFunction "TemperatureMap", ClippingStyle Automatic
3.4. Plots exportieren
ü Export
per default landen die Plots im aktuellen Arbeitsverzeichnis
Mathematica_2014_complete.nb 95
DirectoryC:\Daten\CTKurs\Aktueller Kurs 2014
FileNamesGauss.dat, Mathematica_2014_compact.pdf, Mathematica_2014_complete.nb, Mathematica_2014.nb,
Mathematica_2014_opensubgroups.nb, Organisation, Output.dat, Temperatur.dat, tmp
man kann Arbeitsverzeichnisse aber auch explizit definieren:
SetDirectory"D:Mathematicaciw"in den meisten Fällen ist wohl das aktuelle Notebook Verzeichnis am sinnvollsten:
SetDirectoryNotebookDirectoryC:\Daten\CTKurs\Aktueller Kurs 2014
FileNamesGauss.dat, Mathematica_2014_compact.pdf, Mathematica_2014_complete.nb, Mathematica_2014.nb,
Mathematica_2014_opensubgroups.nb, Organisation, Output.dat, Temperatur.dat, tmp
Export"cp.pdf", cpcp.pdf
Export"dp.pdf", dpdp.pdf
Export"cp1.pdf", cp1cp1.pdf
plot GraphicsRowcp, dp,
PlotLabel Expr Cos, ImageSize 400;
Export"twoplots.pdf", plottwoplots.pdf
Export"twoplots.jpg", plottwoplots.jpg
Export"twoplots.eps", plottwoplots.eps
96 Mathematica_2014_complete.nb
3.5. Plot-Legenden
ü selbstdefinierte Legende mit Epilog (aus Mathematica Documentation Center)
legendPlotxl_List, d_, args___ : Plotxl, d,
Epilog
InsetPanelGridMapIndexedGraphicsColorData1, First2,
Thick, Line0, 0, 1, 0,
AspectRatio .1, ImageSize 20, 1 &, xl,
Offset2, 2, Scaled1, 1, Right, Top, args
legendPlotSinx, Cosx, Sincx, x, 0, 10
2 4 6 8 10
-1.0
-0.5
0.5
1.0sinxcosxsincx
ü Paket : PlotLegend
Needs"PlotLegends`"
PlotSinx, Cosx, x, 0, 2 Pi,
PlotLegend "sine", "cosine"
1 2 3 4 5 6
-1.0
-0.5
0.5
1.0
cosine
sine
Mathematica_2014_complete.nb 97
PlotSinx, Cosx, x, 0, 2 Pi,
PlotLegend "sine", "cosine", LegendSize 0.6,
LegendPosition 0.9, 0.1, LegendBackground LightYellow
1 2 3 4 5 6
-1.0
-0.5
0.5
1.0
cosine
sine
ShowLegendDensityPlotSinx y, x, 0, , y, 0, , Mesh False,
PlotPoints 30, ColorData"LakeColors"1 1 &,
10, " 1", "1", LegendPosition 1.1, .4
contour1
ContourPlotfx, y, x, 1, 1, y, 1, 1, PlotPoints 30;
98 Mathematica_2014_complete.nb
ShowLegendcontour1,
ColorData"LakeColors"1 1 &,
10, "1", "1", LegendSize 0.55, 1.35,
LegendLabel "Legende",
LegendPosition 1.1, .7
ShowLegendContourPlotfx, y, x, 1, 1,
y, 1, 1, PlotPoints 30, ColorFunction "Rainbow",
Contours 11, ContourLabels Automatic,
ColorData"Rainbow"1 1 &, 9, "0.80",
"0.80", LegendSize 0.55, 1.35,
LegendLabel "Legende",
LegendPosition 1.1, .7
3.6. 3D-Grafik
ü Plot3D
Plot3Df, x, xmin, xmax, y, ymin, ymax
Mathematica_2014_complete.nb 99
Mit "Plot3D" erzeugt man eine Oberflächen-Grafik einer 2-dim Funktion
pl3 Plot3DSinx Siny, x, , , y, ,
pl3 Plot3DSinx Siny, x, , ,
y, , , Mesh False, PlotPoints 100
Mit einer Vielzahl von Optionen lassen sich auch diese 3-dim Grafiken verändern,
siehe Options[Plot3D] oder mit Online-Help.
100 Mathematica_2014_complete.nb
pl4 Plot3DSinx Siny, x, , , y, , ,
AxesLabel "x", "y", " ", AxesStyle Thickness0.006,
AxesEdge Automatic, Automatic, 1, 1,
BoxStyle Dashing0.02, 0.02, PlotLabel "sinxsiny",
BaseStyle 16, FontFamily "Helvetica"
ü ListPlot3D und ListPointPlot3D
data TableSinj^2 i, i, 0, Pi, Pi5, j, 0, Pi, Pi 5;
ListPlot3Ddata, Mesh None,
InterpolationOrder 3, ColorFunction "SouthwestColors"
data1 TableSinj^2 i, i, 0, Pi, 0.1, j, 0, Pi, 0.1;
Mathematica_2014_complete.nb 101
ListPointPlot3Ddata1
10
20
30
10
20
30
-1.0
-0.5
0.0
0.5
1.0
data2 Tablei, j, Sinj^2 i, i, 0, Pi, 0.1, j, 0, Pi, 0.1;
data2 Short, 30 &
0., 0., 0., 0., 0.1, 0.00999983, 0., 0.2, 0.0399893, 0., 0.3, 0.0898785,0., 0.4, 0.159318, 0., 0.5, 0.247404, 0., 0.6, 0.352274, 0., 0.7, 0.470626,0., 0.8, 0.597195, 0., 0.9, 0.724287, 0., 1., 0.841471, 0., 1.1, 0.935616,0., 1.2, 0.991458, 0., 1.3, 0.992904, 0., 1.4, 0.925212, 0., 1.5, 0.778073,0., 1.6, 0.549355, 0., 1.7, 0.248947, 0., 1.8, 0.0982486, 0., 1.9, 0.451466,0., 2., 0.756802, 0., 2.1, 0.954628, 0., 2.2, 0.991869, 0., 2.3, 0.837769,0., 2.4, 0.499642, 0., 2.5, 0.0331792, 0., 2.6, 0.458951, 0., 2.7, 0.845133,0., 2.8, 0.999902, 0., 2.9, 0.849363, 0., 3., 0.412118, 0., 3.1, 0.184165,
30, 3.1, 0., 0.0415807, 3.1, 0.1, 0.0315874, 3.1, 0.2, 0.00159265,3.1, 0.3, 0.0483884, 3.1, 0.4, 0.118131, 3.1, 0.5, 0.206902, 3.1, 0.6, 0.313054,3.1, 0.7, 0.433531, 3.1, 0.8, 0.563327, 3.1, 0.9, 0.694991, 3.1, 1., 0.818277,3.1, 1.1, 0.920128, 3.1, 1.2, 0.985178, 6, 3.1, 1.9, 0.413973,3.1, 2., 0.728969, 3.1, 2.1, 0.941419, 3.1, 2.2, 0.996303, 3.1, 2.3, 0.859749,3.1, 2.4, 0.535228, 3.1, 2.5, 0.0747083, 3.1, 2.6, 0.421612, 3.1, 2.7, 0.822175,3.1, 2.8, 0.998456, 3.1, 2.9, 0.870575, 3.1, 3., 0.449647, 3.1, 3.1, 0.143136
ListPointPlot3Ddata2
0
1
2
3 0
1
2
3
-1.0
-0.5
0.0
0.5
1.0
data3 data2 Flatten, 1 &;
102 Mathematica_2014_complete.nb
ListPointPlot3Ddata3
0
1
2
3 0
1
2
3
-1.0
-0.5
0.0
0.5
1.0
ü ParametricPlot3D
z.B. Phasenraumdiagramm einer gedämpften Schwingung
ParametricPlot3DExp0.1 t Sin2 t, Exp0.1 t Cos2 t, t10, t, 0, 25
-0.50.0
0.5
-0.5
0.0
0.5
1.0
0
1
2
parametrisierte Oberfläche
Mathematica_2014_complete.nb 103
ParametricPlot3DCosu, Sinu Cosv, Sinv, u, 0, 2 , v, ,
Plot zweier Flächen in 3 D
ParametricPlot3D4 3 Cosv Sinu, 4 3 Cosv Cosu, 4 Sinv,
8 3 Cosv Cosu,
3 Sinv, 4 3 Cosv Sinu,
u, 0, 2 Pi, v, 0, 2 Pi, PlotStyle Red, Green
104 Mathematica_2014_complete.nb
3.7. weitere Grafik-Befehle: LogPlot etc.
ü Logarithmische Plots
gx_ : Ifx 0, 1, xx
Plotgx, x, 0, 10
2 4 6 8 10
2μ 107
4μ 107
6μ 107
8μ 107
LogPlotgx, x, 0, 10
2 4 6 8 10
100
104
106
108
1010
Mathematica_2014_complete.nb 105
LogLinearPlotSin1x, x, 0.01, 100
0.1 1 10 100
-0.5
0.0
0.5
1.0
LogLogPlotx3 x13, x, 0.1, 100
0.5 1.0 5.0 10.0 50.0 100.0
100
107
1012
1017
1022
106 Mathematica_2014_complete.nb
ü PolarPlot
PolarPlott, t, 0, 4 2
-20 -10 10 20
-20
-10
10
20
ü RegionPlot
RegionPlotx^2 y^3 2, x, 2, 2, y, 2, 2
Mathematica_2014_complete.nb 107
GraphicsGridRegionPlotSinx Siny 1 4, x, 10, 10, y, 10, 10,
BoundaryStyle Dashed, PlotStyle Yellow,
RegionPlotx^2 y^2 1, x, 1, 1, y, 1, 1, Mesh 10,
MeshShading Automatic, None, None, Automatic,
ColorFunction "DarkRainbow", ImageSize 600
108 Mathematica_2014_complete.nb
ü SphericalPlot3D
SphericalPlot3DAbsSphericalHarmonicY2, 0, theta, phi,
theta, 0, , phi, 0, 2
Mathematica_2014_complete.nb 109
SphericalPlot3DAbsSphericalHarmonicY2, 0, theta, phi,
theta, 0, , phi, 0, 2 , Boxed False, Axes None, Mesh None
ü SurfaceOfRevolution
Plot1
2 x2
x4
2, x, 1.45, 1.45
-1.5 -1.0 -0.5 0.5 1.0 1.5
0.1
0.2
0.3
0.4
0.5
0.6
110 Mathematica_2014_complete.nb
RevolutionPlot3D1
2 x2
x4
2, x, 0.05, 1.4,
ViewPoint 0.521, 0.962, 1.954, BoxRatios 1, 1, 1
ManipulateRevolutionPlot3DSinx a Sinb x,
x, 0, 20, PlotStyle Opacity.3, color, Axes False,
a, 0, 1, b, 0, 10, color, Red
a
b
color
Mathematica_2014_complete.nb 111
3.8. VectorPlot
ü Vektorfeld einer Kraft Fx, yVektorfeld einer Zentralkraft F
r
rvect x, y, zx, y, z
Fvect rvect
x, y, z
VectorPlotTakeFvect, 1, 2, x, 1, 1, y, 1, 1
-1.0 -0.5 0.0 0.5 1.0
-1.0
-0.5
0.0
0.5
1.0
Vektorfeld einer Axialkraft : Fr B
Bvect 0, 0, 1;
Fvect rvect Bvect
y, x, 0
112 Mathematica_2014_complete.nb
VectorPlotTakeFvect, 1, 2, x, 1, 1, y, 1, 1
-1.0 -0.5 0.0 0.5 1.0
-1.0
-0.5
0.0
0.5
1.0
ü Vektorfeld eines Potentials V x, y
Vpotx_, y_ :1
x2 y2
Berechnung des Gradienten in einzelnen Komponenten
Fx_, y_ DVpotx, y, x, DVpotx, y, y
x
x2 y232,
y
x2 y232
Berechnung des Gradienten auf elegante Weise
Fx_, y_ DVpotx, y, x, y
x
x2 y232,
y
x2 y232
Mathematica_2014_complete.nb 113
VectorPlotFx, y, x, 3, 3, y, 3, 3
-3 -2 -1 0 1 2 3
-3
-2
-1
0
1
2
3
VectorPlotFx, y, x, 3, 3, y, 3, 3, VectorPoints 4
-4 -2 0 2 4
-4
-2
0
2
4
114 Mathematica_2014_complete.nb
VectorPlotFx, y, x, 3, 3, y, 3, 3,
VectorPoints 10, VectorScale Large, 0.5, Automatic
-3 -2 -1 0 1 2 3
-3
-2
-1
0
1
2
3
VectorPlotFx, y, x, 3, 3, y, 3, 3,
VectorPoints 10, VectorScale Large, 0.5, None
-3 -2 -1 0 1 2 3
-3
-2
-1
0
1
2
3
Mathematica_2014_complete.nb 115
ü 3D Vektorfeld eines Potentials V x, y, z
Vpotx_, y_, z_ :1
x 12 y2 z2
1
x 42 y2 z2
Fx_, y_, z_ DVpotx, y, z, x, y, z
1 x
1 x2 y2 z232
4 x
4 x2 y2 z232,
y
1 x2 y2 z232
y
4 x2 y2 z232,
z
1 x2 y2 z232
z
4 x2 y2 z232
VectorPlot3DFx, y, z, x, 5, 5, y, 5, 5, z, 5, 5,
VectorPoints 8, VectorScale Small, 0.5, None
-5
0
5
-5
0
5
-5
0
5
3.9. Paket: ErrorBarPlots`
ü ErrorListPlot
Needs"ErrorBarPlots`"
? ErrorBarPlots`*
ErrorBarPlots`
ErrorBar ErrorBarFunction ErrorBarPlot ErrorListPlot
116 Mathematica_2014_complete.nb
im ersten Beispiel sind die Abszissen wieder einfach die natürlichen Zahlen,
die Ordinaten zeigen die i , unabhängig von x !
Der Fehlerbalken wird zufällig ermittelt.
ErrorListPlotTableSqrti, RandomReal0.3, i, 1, 20, 2
2 4 6 8 10
1.5
2.0
2.5
3.0
3.5
4.0
4.5
in dem nächsten Beispiel (Normalfall) wird der Fehler in der Ordinate y einfach als 3. Komponente der Vektoren angegeben
ErrorListPlot1, 1., 0.3, 2, 2, 0.6, 3, 4, 0.3, 4, 8, 1
1.5 2.0 2.5 3.0 3.5 4.0
2
4
6
8
im allgemeinen Fall werden Fehlerbalken mit der Funktion ErrorBar erzeugt.
Damit können zum einen Fehlerbalken in beiden Richtungen angegeben werden
und zum anderen können auch unsymmetrische Fehler angezeigt werden.
Mathematica_2014_complete.nb 117
ErrorListPlot1, 1, ErrorBar0.2, 0.3,
2, 2, ErrorBar0.2, 0.3, 3, 4, ErrorBar0.2, 0.3, 0.5,
4, 8, ErrorBar0.7, 0.4, 1, 0.5,
ErrorBarFunction Automatic
1.5 2.0 2.5 3.0 3.5 4.0
2
4
6
8
3.10. Manipulate
ü so einfach wie eine Tabelle
Manipulate[ ] ist so einfach anzuwenden wie Table[ ]
TableSinx, x, 0, 100, Sin1, Sin2, Sin3, Sin4, Sin5, Sin6, Sin7, Sin8, Sin9, Sin10
ManipulateSinx, x, 0, 10
x
0
im Allgemeinen werden die Parameter kontinuierlich verändert,
in manchen Fällen ist dies aber nicht so sinnvoll
118 Mathematica_2014_complete.nb
ü in diskreten Schritten
Manipulatex, Sinx, x, 0, 10, 1
x
0, 0
ManipulateFactorx^n 1, n, 10, 100, 1
n
1 x 1 x 1 x x2 x3 x4 1 x x2 x3 x4
ü Appearance
ManipulateFactorx^n 1, n, 10, 100, 1, Appearance "Labeled"
n 10
1 x 1 x 1 x x2 x3 x4 1 x x2 x3 x4
ManipulateFactorx^n 1, n, 10, 100, 1, Appearance "Open"
n
10
1 x 1 x 1 x x2 x3 x4 1 x x2 x3 x4
Mathematica_2014_complete.nb 119
ü Table Grids
ManipulateGridTablei, i^m, i, 1, n,
Alignment Left, Frame All, n, 1, 20, 1, m, 1, 100, 1
n
m
1 1
Für die folgenden "manipulierten" Plots wird einheitlich eine etwas kleinere Bildgröße
voreingestellt.
SetOptionsPlot, ParametricPlot, Graphics, ImageSize 300;
ü mehrere Parameter manipulieren
im nachfolgenen Beispiel werden zusätzlich Startparameter definiert :
ManipulatePlotSink x t, x, 0, 10,
k, 2, 1, 3, , 0.2, 0, 5, t, 0, 2
k
w
t
2 4 6 8 10
-1.0
-0.5
0.5
1.0
bei Grafiken ist es oft sinnvoll mit festem PlotRange zu arbeiten:
120 Mathematica_2014_complete.nb
ManipulatePlotSinn1 x Sinn2 x, x, 0, 2 Pi, PlotRange 2,
n1, 14, 1, 20, n2, 2, 1, 20
n1
n2
1 2 3 4 5 6
-2
-1
1
2
ü Radio Buttons und Pop-up Menüs
ManipulatePlotSinn1 x Sinn2 x,
x, 0, 2 Pi, Filling filling, PlotRange 2,
n1, 8, 1, 20,
n2, 13, 1, 20,
filling, None, Axis, Top, Bottom, ControlType RadioButton
n1
n2
filling None Axis Top Bottom
1 2 3 4 5 6
-2
-1
1
2
wenn die Auswahl zu groß wird, erscheint automatisch ein Pop-Up Menü
Mathematica_2014_complete.nb 121
ManipulatePlotSinn1 x Sinn2 x, x, 0, 2 Pi, Filling filling,
PlotRange 2, n1, 1, 20, n2, 1, 20, filling,
None, Axis, Top, Bottom, Automatic, 1, 0.5, 0, 0.5, 1
n1
n2
filling None
1 2 3 4 5 6
-2
-1
1
2
was man aber auch explizit mit ControlType Ø PopupMenu erreichen kann
ü Checkbox für True und False
ManipulatePlotSinn1 x Sinn2 x, x, 0, 2 Pi, Frame frame,
PlotRange 2, n1, 1, 20, n2, 1, 20, frame, True, False
n1
n2
frame
0 1 2 3 4 5 6-2
-1
0
1
2
122 Mathematica_2014_complete.nb
Anfangswerte und Labels
Ein schönes Beispiel mit Lissajous Kurven
app Appearance "Labeled";
ManipulateParametricPlota1 Sinn1 x p1, a2 Cosn2 x p2,
x, 0, 20 Pi, PlotRange 1, PerformanceGoal "Quality",
n1, 1, "Frequency 1", 1, 4, app,
a1, 1, "Amplitude 1", 0, 1, app,
p1, 0, "Phase 1", 0, 2 Pi, app,
n2, 54, "Frequency 2", 1, 4, app,
a2, 1, "Amplitude 2", 0, 1, app,
p2, 0, "Phase 2", 0, 2 Pi, app
Frequency 1 1
Amplitude 1 1
Phase 1 0
Frequency 2 54
Amplitude 2 1
Phase 2 0
-1.0 -0.5 0.5 1.0
-1.0
-0.5
0.5
1.0
die Empfindlichkeit der Regler kann erheblich gesteigert werden :
mit der Alt Taste um Faktor 20, mit Alt+Ctrl um Faktor 400
mit mit Alt+Ctrl+Shift um Faktor 8000
Mathematica_2014_complete.nb 123
weitere Verschönerungen
ManipulateParametricPlota1 Sinn1 x p1, a2 Cosn2 x p2, x, 0, 20 Pi,
PlotRange 1, PerformanceGoal "Quality", ImageSize 200,
Style"Horizontal", 12, Bold, n1, 1, "Frequency", 1, 4,
a1, 1, "Amplitude", 0, 1, p1, 0, "Phase", 0, 2 Pi,
Delimiter, Style"Vertical", 12, Bold,
n2, 54, "Frequency", 1, 4, a2, 1, "Amplitude", 0, 1,
p2, 0, "Phase", 0, 2 Pi, ControlPlacement Left
Horizontal
Frequency
Amplitude
Phase
Vertical
Frequency
Amplitude
Phase
-1.0 -0.5 0.5 1.0
-1.0
-0.5
0.5
1.0
124 Mathematica_2014_complete.nb
ü 2 D Sliders
ManipulateGraphicsLineTableCost, Sint, pt,
t, 2. Pi n, 2. Pi, 2. Pi n, PlotRange 1,
n, 50, 1, 200, 1, pt, 0, 0, 1, 1, 1, 1
n
pt
Mathematica_2014_complete.nb 125
ü Locators
ManipulateGraphicsLineTableCost, Sint, pt, t, 2. Pin, 2. Pi, 2. Pin,
PlotRange 1, n, 30, 1, 200, 1, pt, 0, 0, Locator
n
ã Polynom durch n Punkte
mit Alt - Klick lassen sich Punkte sowohl hinzufügen als auch löschen
126 Mathematica_2014_complete.nb
ManipulatePlotInterpolatingPolynomialpoints, x, x, 2, 2,
PlotRange 4, 4, PlotStyle Red, Thick, ImageSize 350,
points, 1, 2, 0, 2, 1, 3,
Locator , LocatorAutoCreate True
-2 -1 1 2
-4
-2
2
4
eine vollständigere Übersicht über die Möglichkeiten mit Manipulate
und weitere Grafik-Elemente sind in der
Ergänzung zu Mathematica(3) auf der CIW Webseite zu finden.
ü Probleme und Lösungen
das folgende (inaktive) Beispiel zwingt den Mathematica Kernel zu einer ständigen Neu-
berechnung von f xManipulatefx_ : x Sinx; Plotfx, x, 0, xmax, xmax, 1, 10
im zweiten Beispiel ist f x global definiert und erzeugt keine Probleme
fx_ :Sin2 x
x
Mathematica_2014_complete.nb 127
ManipulatePlotfx, x, 0, xmax, xmax, 1, 10
xmax
0.2 0.4 0.6 0.8 1.0
0.2
0.4
0.6
0.8
1.0
? f
Global`f
fx_ : Sin2 xx
Die korrekte Verwendung geschieht mit lokalen Parametern und Funktionen
mit Hilfe von Module und Block Umgebungen.
Darin kann f x lokal definiert werden.
ManipulateModulef, fx_ : x Sinx; Plotfx, x, 0, xmax,
xmax, 1, 10
xmax
0.2 0.4 0.6 0.8 1.0
0.2
0.4
0.6
0.8
128 Mathematica_2014_complete.nb
ManipulateBlockf, fx_ :Sin3 x
3 x; Plotfx, x, 0, xmax,
xmax, 1, 10
xmax
0.2 0.4 0.6 0.8 1.0
0.2
0.4
0.6
0.8
1.0
im nächsten Beispiel hat die globale Variable w nichts mit der lokalen Variablen w im Manipu-
late zu tun,
und kann dort nicht verändert werden
gt_ :Sin t
t
ManipulatePlotgt, t, 0, 10, , 1, 5
w
2 4 6 8 10
0.2
0.4
0.6
0.8
1.0
Mathematica_2014_complete.nb 129
Manipulate, t, gt, , 1, 5
w
1, t, gt
hierbei kann man sich mit einer neuen Variablen, z.B. w1 behelfen
Manipulate, t, gt . 1, 1, 1, 5
w1
1, t, gt
im Control Element w1 kann man die Anzeige auch wieder in w umbenennen
ManipulatePlotgt . 1, t, 0, 10,
1, 1, "", 0.001, 5
w
2 4 6 8 10
0.2
0.4
0.6
0.8
1.0
130 Mathematica_2014_complete.nb
4. Analysis, Gleichungen und Gleichungssysteme, Differentialgleichungen und Bewegungsgleichungen
4.1. Analysis
ü Ableitungen
ã Einfache oder mehrfache Ableitungen Df , x
Eine Funktion y[x] kann einfach mit y', y'', usw (Apostroph) abgeleitet werden.
yx_ : x Logx
y'x1 Logx
y'''''x
6
x4
Die folgenden Ausdrücke sind in StandardForm, z.B.: y ''' Ctrl-Shift-N
yx1 Logx
yx1
x
y3x
1
x2
die zugrunde liegende Funktion ist: Df , x, bzw. Df , x, n und bezeichnet die "partielle
Ableitung"
Dyx, x1 Logx
Dyx, x, 3
1
x2
Mathematica_2014_complete.nb 131
das mathematische Symbol für die partielle Ableitung kann durch Âpd oder mit der
Palette eingegeben werden
fx_ : LegendreP5, x
x fx1
815 210 x2 315 x4
Mit Shift-Ctrl-I (Eingabe Form) Shift-Ctrl-N (Standard Form) und Shift-Ctrl-T (Traditional
Form)
kann man leicht und schnell mal die Darstellung wechseln.
x,5fx945
ã Partielle Ableitungen für mehrdimensionale Funktionen
partielle Ableitung von x2 - y2 nach x
xx2 y22 x
oder nach x und y
Dx^2 y^2, x, y0
in der "Traditional Form" sieht die Eingabe etwas vertrauter aus:
∂2 x2 - y2∂x ∂ y
0
ã Totales Differential und totale Ableitung Dtf , x
ohne 2. Argument liefert Dtf das totale Differential df
Dtfx, yDty f0,1x, y Dtx f1,0x, y
Ergebnis in der "Traditional Form" :
(die TraditionalForm sollte aber besser nicht bei der Eingabe verwendet werden)
Dtfx, y TraditionalForm
„ y f 0,1x, y + „ x f 1,0x, y
zum Beispiel
132 Mathematica_2014_complete.nb
Dtx2 y22 x Dtx 2 y Dty
Ergebnis in der "Traditional Form" :
Dtx2 y2 TraditionalForm
2 x „ x - 2 y „ y
mit einem 2. Argument liefert Dtf , x die totale Ableitung nach x: df dx
Dtx2 y2, x2 x 2 y Dty, x
oder
Dtx2 y2, t2 x Dtx, t 2 y Dty, t
Ergebnis in der "Traditional Form" :
Dtx2 y2, t TraditionalForm
2 x„ x
„ t- 2 y
„ y
„ t
Beispiel: f x, z, t = x2 + z2 nicht explizit zeitabhängig, wie z.B. die meisten Lagrangefunk-
tionen
fx_, z_, t_ : x2 z2
partielle Ableitung:
t fx, z, t0
in der "Traditional Form" :
t fx, z, t TraditionalForm
0
totale Ableitung:
Dtfx, z, t, t2 x Dtx, t 2 z Dtz, t
2 x2 z2
in der "Traditional Form" :
Mathematica_2014_complete.nb 133
Dtfx, z, t, t Simplify TraditionalForm
x„x
„t+ z
„z
„t
x2 + z2
wenn aber die Zeit t explizit angegeben wird, sind partielle und totale Ableitungen bei
Mathematica identisch
totale Ableitung:
erst für eine beliebige Funktion rx, z mit x, z als Funktionen der Zeit t
Dtrxt, zt, t, t TraditionalForm
x£t r1,0,0xt, zt, t + z£t r0,1,0xt, zt, t + r0,0,1xt, zt, t
dann für die Funktion f x, y = x2 + z2 mit x, z als Funktionen der Zeit t
Dtfxt, zt, t, t TraditionalForm
2 xt x£t + 2 zt z£t
2 xt2 + zt2
partielle Ableitung:
t rxt, zt, t Simplify TraditionalForm
x£t r1,0,0xt, zt, t + z£t r0,1,0xt, zt, t + r0,0,1xt, zt, t
t fxt, zt, t Simplify TraditionalForm
xt x£t + zt z£t
xt2 + zt2
soll eine Konstante (z.B. die Masse m) nicht auch differenziert werden, kann man dies als
Option angeben:
Dtm xt, t, Constants mm xt
sonst erhält man einen Zusatzterm:
Dtm xt, t TraditionalForm
m x££t +„m
„ tx£t
in solchen Bewegungsgleichungen kann man aber genauso gut mit der "partiellen Ableitung"
arbeiten
134 Mathematica_2014_complete.nb
Dm xt, tm xt
ü Integrale
ã Unbestimmte Integrale
IntegrateSinx, xCosx
Das Integralzeichen und „x bekommt man mit Âint und ÂddÂ
Sinx x
Cosx
nicht ganz so trivial ist
Logx Sinx 1
x2 Expx x
1
2 x2 x x Cosx 2 x CosIntegralx 2 x ExpIntegralEix 2 Logx 2 x x Logx 2 Sinx x x Sinx
zur Probe kann man wieder differenzieren
x
1
2 x
2
x x Cosx 2 CosIntegralx
2 ExpIntegralEix 2 x Logx 2 x x Logx x Sinx 2 x x Sinx
1
2 x22 x x Cosx 2 x CosIntegralx 2 x ExpIntegralEix
2 Logx 2 x x Logx 2 Sinx x x Sinx
allerdings kann man dies erst nach einer Vereinfachung als ursprüngliche Funktion
wiedererkennen.
Simplify1 x x2 Logx Sinx
x2
ã Bestimmte Integrale
0
Sinx2 x
2
Mathematica_2014_complete.nb 135
Auch uneigentliche Integrale sind möglich (¶ bekommt man mit ÂinfÂ)
1
1
x2x
1
0
Expa x2 x
IfRea 0,
2 a, Integratea x2, x, 0, , Assumptions Rea 0
Mathematica gibt die allgemeinste Lösung des Integrals an, für Spezialfälle müssen Annah-
men über die Parameter angegeben werden
solche Optionen sind nur in der InputForm möglich
IntegrateExpa x^2, x, 0, Infinity, Assumptions Rea 0
2 a
einfacher (aber auch unsicher) ist es, die Fallunterscheidung abzuschalten
IntegrateExpa x^2,
x, 0, Infinity, GenerateConditions False
2 a
mehrdimenionale Integrale
0
1
0
2x Siny y x
1
2
Bei bestimmten Integralen, die über einen einfachen Pol mit Vorzeichenwechsel führen,
kann auch das Cauchy Hauptwertintegral ermittelt werden.
Integrate 1
x 1, x, 0, 3
Integrate::idiv : Integral of1
-1 + xdoes not converge on 0, 3.à
0
3 1
1 xx
136 Mathematica_2014_complete.nb
Plot 1
x 1, x, 0, 3, Filling Axis
Hauptwertintegral (principal value integral):
Integrate 1
x 1, x, 0, 1 eps, Assumptions eps 0
Logeps
hwi Integrate 1
x 1, x, 0, 1 eps, Assumptions eps 0
Integrate 1
x 1, x, 1 eps, 3, Assumptions 0 eps 1
Log 2
eps Logeps
hwi Simplify
Log 2
eps Logeps
hwi PowerExpand
Log2
im Allgemeinen muss jedoch der Grenzfall eps -> 0 berechnet werden
Limithwi, eps 0Log2
in Mathematica genügt dafür die Option PrincipalValue -> True
Integrate 1
x 1, x, 0, 3, PrincipalValue True
Log2
Mathematica_2014_complete.nb 137
Bei Eingebung von zusätzlichen Optionen kann das Integralzeichen nicht benutzt werden.
ã Numerische Integration
in vielen Fällen liefert eine analytische Integration als Ergebnis spezielle Funktionen
IntegrateSinSinx, x, 0, Pi StruveH0, 1
N
1.78649
N, 50 &
1.7864874819500523366874236012519572937614804561287
oder
IntegrateSinSqrtLog1 x, x, 0, Pi
1
4 14 Erf 1
2 Log1 Erfi
2 Log1 1 Sin Log1
N
2.39176 0.
Chop
2.39176
oder auch überhaupt kein Ergebnis
IntegrateSin 1
x2 1, x, 0, 1
0
1
Sin 1
1 x2 x
N
0.698101
N, 30 &
0.698100626829193442752163971945
NIntegrateSin 1
x2 1, x, 0, 1
0.698101
138 Mathematica_2014_complete.nb
NIntegrateSinSinx, x, 0, 1.78649
Der folgende Versuch einer genaueren Darstellung gelingt nicht.
Numerische Ergebnisse können nicht nachträglich erweitert werden.
N, 30 &
1.78649
Bei einer normalerweise 16-stelligen internen Maschinengenauigkeit ergibt sich eine etwa 6-
stellige absolute Genauigkeit des Integrals. Höhere Genauigkeit erzielt man mit
entsprechend höherer WorkingPrecision.
NIntegrateSinSinx, x, 0, Pi, WorkingPrecision 501.7864874819500523366874236012519572937614804561287
Beispiel eines 2-dim Integrals über eine Dreiecksfläche
NIntegrateExpx2 y2, x, 0, 1, y, 0, x0.722623
auch in diesem Fall gibt es eine analytische Lösung mit hypergeometrischen Reihen
0
1
0
x
x2y2y x
1
2HypergeometricPFQ1, 1, 3
2, 2, 1
bei analytischen Lösungen braucht man natürlich keine Workingprecision
N, 1000.7226228066941736144338319192179077041813074327602015236466145905187402161988902478714850361886118942
ü Grenzwerte
Limitxx, x 01
LimitLogx2x
, x
0
Mathematica_2014_complete.nb 139
limxƕ
logx2x
0
LimitExpa x, x Limita x, x
Falls a positiv ist, z.B. bei einer Masse oder einer Wellenzahl etc., kann dies als zusätzliche
Annahme (Assumption) angegeben werden:
LimitExpa x, x , Assumptions a 00
Bei Grenzwerten, die von oben und unten verschieden sind, kann man eine Richtung
angeben
Direction -> 1 bedeutet von links nach rechts, bzw. unten nach oben
Limit1x, x 0, Direction 1
Limit1x, x 0, Direction
LimitSin1x, x 0Interval1, 1
LimitSin1x, x 0
ü Einschub Intervallrechnung
x1 Interval0.1, 0.1Interval0.1, 0.1
x2 2.0 x12
Interval1.95, 2.05
y1 x1x2
Interval0.205, 0.205
140 Mathematica_2014_complete.nb
y1 3 x1
x2
Interval1.41463, 1.58974
2 selbst definierte Funktionen, die Intervallrechnung einfacher machen
makeinta_, _ : Intervala , a makecenterinterv_ : Modulemin1, max1, mid,
min1 Mininterv;
max1 Maxinterv;
mid min1 max1 2;
mid, min1 mid, max1 mid
y1 makecenter
1.50219, 0.0875547, 0.0875547
makeint1.5021888680425266`, 0.08755472170106393`Interval1.41463, 1.58974
ü Reihenentwicklungen
Removefformale Taylor - Entwicklung :
Seriesfx, x, x0, 3
fx0 fx0 x x0 1
2fx0 x x02 1
6f3x0 x x03 Ox x04
auch als Entwicklung in mehreren Dimensionen möglich :
Seriesgx, y, x, x0, 3, y, y0, 2
gx0, y0 g0,1x0, y0 y y0 1
2g0,2x0, y0 y y02 Oy y03
g1,0x0, y0 g1,1x0, y0 y y0 1
2g1,2x0, y0 y y02 Oy y03 x x0
1
2g2,0x0, y0 1
2g2,1x0, y0 y y0 1
4g2,2x0, y0 y y02 Oy y03 x x02
1
6g3,0x0, y0 1
6g3,1x0, y0 y y0 1
12g3,2x0, y0 y y02 Oy y03 x x03
Ox x04
Sinus Taylorreihe
SeriesSinx, x, 0, 8
x x3
6
x5
120
x7
5040 Ox9
Mathematica_2014_complete.nb 141
so wird aus einer Reihe eine normale Funktion :
f0x_ Normal
x x3
6
x5
120
x7
5040
Sinus Taylorreihe um p/2
f1x_ SeriesSinx, x, 2, 8 Normal Simplify
1 1
8 2 x2 1
384 2 x4 2 x6
46 080
2 x8
40 320
N Expand
0.0000247373 0.999843 x 0.000447261 x2 0.167421 x3
0.00083204 x4 0.00770694 x5 0.000324584 x6 0.000311666 x7 0.0000248016 x8
mit Chop kann man kleine Terme eines Ausdrucks vernachlässigen, als Default gilt < 10-10
so wie hier kann man aber eine beliebige Schranke angeben:
f2x_ Chop, 104 &
0.999843 x 0.000447261 x2 0.167421 x3
0.00083204 x4 0.00770694 x5 0.000324584 x6 0.000311666 x7
was aber in diesem Fall nicht sinnvoll wäre, wie man im nächsten Plot sieht
PlotTooltipSinx, f0x, f1x, f2x,
x, 0, 2 , PlotStyle Red, Blue, Green, Cyan
1 2 3 4 5 6
-6
-5
-4
-3
-2
-1
1
142 Mathematica_2014_complete.nb
PlottooltipSinx, f0x, f1x, f2x, Sin, f0, f1, f2 Evaluate, x, 0, 2 , PlotStyle Red, Blue, Green, Cyan
1 2 3 4 5 6
-6
-5
-4
-3
-2
-1
1
im nächsten Beispiel vergleichen wir eine Entwicklung um Null mit einer asymptotischen
Entwicklung um Unendlich
h0x_ :ArcTanx Sinx2
1 x23
h1x_ Seriesh0x, x, 0, 10 Normal
x3 11 x5
3376 x7
4514 453 x9
945
h2x_ Seriesh0x, x, , 10 Normal
3
x10
10
3 x9
3
2 x8
1
x7
2 x6Sinx2
PlotTooltiph0x, h1x, h2x, x, 0, 4, PlotRange 0.2,
PlotStyle Red, Blue, Green
1 2 3 4
-0.2
-0.1
0.1
0.2
Mathematica_2014_complete.nb 143
LogPlotAbsh0x h2xh0x, x, 0, 100
20 40 60 80 100
10-9
10-7
10-5
0.001
SeriesGamma1 x, x, , 10
1Log 1
x xO 1
x11 2 x
2
6 x
2
144 x32
139
2
25 920 x52
571
2
1 244 160 x72
163 879
2
104 509 440 x92
5 246 819
2
37 623 398 400 x112
534 703 531
2
451 480 780 800 x132
4 483 131 259
2
43 342 154 956 800 x152
432 261 921 612 371
2
257 452 400 443 392 000 x172
6 232 523 202 521 089
2
43 252 003 274 489 856 000 x192 O 1
x212
N Expand
1.1. Log 1
x xO 1
x11 2.50663 x
0.208886
x0.00870357
x320.00672109
x520.000575201
x720.00196529
x92
0.000174783
x1120.00148434
x1320.000129638
x1520.00210431
x1720.0001806
x192 O 1
x212
g10x_ Normal;
144 Mathematica_2014_complete.nb
LogPlotGamma1 x, g10x, x, 0, 100
20 40 60 80 100
1027
1054
1081
10108
10135
SeriesSphericalBesselJ3, x, x, 0, 10 Normal
x3
105
x5
1890
x7
83 160
x9
6 486 480
Bie der folgenden Reihenentwicklung um den Pol der Tangensfunktion bei p/2 bekommt man
als Ergebnis eine Laurentreihe
SeriesTanx, x, 2, 10 Normal
1
2 x
1
3
2 x
1
45
2 x
3
2
945
2 x
5
2 x7
47252
2 x9
93 555
ü Laurentreihen und Residuen
Das Residuum einer Funktion ist der -1. Koeffizient ihrer Laurentreihe
laurent a2
x x02
a1x x0
a0 a1 x x0
a2x x02
a1x x0
a0 x x0 a1
Residuelaurent, x, x0a1
zum Beispiel für eine gebrochen rationale Funktion
quot1 1
x x 1 x 22
1
2 x2 1 x x
Partialbruchzerlegung
Mathematica_2014_complete.nb 145
quot1 Apart
1
2 2 x2
3
4 2 x 1
1 x
1
4 x
Residuequot1, x, 0
1
4
Residuequot1, x, 11
Residuequot1, x, 2
3
4
oder für eine beliebige singuläre Funktion
Series 1
Sinx3, x, 0, 5
1
x3
1
2 x17 x
120457 x3
15 1203287 x5
604 800 Ox6
Residue 1
Sinx3, x, 0
1
2
im Folgenden handelt es sich um eine wesentliche Singularität am Ort x = 0
in diesem Fall existiert weder eine Laurentreihe noch ein Residuum
Series 1
x2 , x, 0, 5
1
x2
4.2. Lösungen von Gleichungen und Gleichungssysteme
ü Exakte Lösungen von Gleichungen
In Mathematica werden Gleichungen mit doppeltem Gleichheitszeichen definiert:
eqn1 a x2 b x c 0
c b x a x2 0
146 Mathematica_2014_complete.nb
Algebraische Gleichungen werden bis zum Grad n=4 von Mathematica exakt gelöst mit
Angabe aller Lösungen.
Solveeqn1, x
x b b2 4 a c
2 a, x b b2 4 a c
2 a
Alle Lösungen unter Berücksichtigung von Ausnahmefällen, wie z.B. a=0 findet man mit
Reduceeqn1, x
a 0 && x b b2 4 a c
2 a x b b2 4 a c
2 a
a 0 && b 0 && x c
b c 0 && b 0 && a 0
Solve löst auch Systeme von Gleichungen, die als Liste eingegeben werden
eqn2 a x2 y 1, b y x 15a x2 y 1, x b y 15
solution2 Solveeqn2, x, y
y 1
2
1
a b230
b
1 60 a b 4 a b2
a b2, x
1 1 60 a b 4 a b2
2 a b,
y 1
2 a b215
b
1 60 a b 4 a b2
2 a b2, x
1 1 60 a b 4 a b2
2 a b
Die Lösung lässt sich durch Einsetzen überprüfen
Simplifyeqn2 . solution2True, True, True, True
Man kann aber auch in einem Gleichungssystem Variable eliminieren,
um so Gleichungen mit weniger Unbekannten zu erhalten
Eliminateeqn2, x30 a b y a b2 y2 1 225 a y
Die Funktion Solve arbeitet mit Inversen Funktionen.
Sofern diese existieren, sind auch nichtalgebraische Lösungen möglich.
SolveArcSinx a, xx Sina
Mathematica_2014_complete.nb 147
SolveExpx y 2, x 2 y 1, x, ySolve::ifun :
Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution
information.à
x 1
21
2 1 8 Log2 , y
1
41 1 8 Log2 ,
x 1
21
2 1 8 Log2 , y
1
41 1 8 Log2
SimplifyExpx y 2, x 2 y 1 . True, True, True, True
ReduceExpx y 2, x 2 y 1, x, yC1 Integers &&
x 1
21 1 8 2 C1 Log2 x 1
21 1 8 2 C1 Log2 && y
1 x
2
Bei höherem Polynomgrad gibt es im allgemeinen keine exakten Lösungen mehr.
Solvex5 5 x2 1 0, xx Root1 5 12 15 &, 1, x Root1 5 12 15 &, 2,x Root1 5 12 15 &, 3, x Root1 5 12 15 &, 4, x Root1 5 12 15 &, 5
ü Numerische Lösungen algebraischer Gleichungen
In solchen Fällen helfen dann die numerischen Fähigkeiten von Mathematica. Entweder
NSolve[...] oder N[Solve[...]] oder Solve[...]//N . Die Lösungen sind immer
noch vollständig.
NSolvex5 5 x2 1 0, xx 0.837998 1.51442 , x 0.837998 1.51442 ,x 0.443366, x 0.451384, x 1.66798
ü Numerische Lösungen nichtalgebraischer Gleichungen
Transzendente Gleichungen können natürlich nicht vollständig gelöst werden, da es mitunter une-
ndlich viele Lösungen geben kann.
Hier verwendet man die numerische Funktion "FindRoot", bei der ein Startwert angegeben werden
muss. Mathematica sucht dann die Lösung in der Nähe des Startwertes.
FindRootCosx x, x, 1x 0.739085
FindRootCosa x x, a Sina x 1, x, 1, a, 1x 0.652185, a 1.31916
148 Mathematica_2014_complete.nb
Für das nächste Beispiel gibt es unendlich viele Lösungen, Mathematica findet die Lösung,
welche am nächsten zum Startwert liegt:
FindRootSinx2 0, x, 2x 1.77245
PlotSinx2, x, 0, 5
1 2 3 4 5
-1.0
-0.5
0.5
1.0
Im nächsten Beispiel wird ein Intervall für die Suche angegeben, in dem jedoch keine Null-
stelle liegt:
FindRootSinx2 0, x, 1., .5, 1.5FindRoot::reged :
The point 0.5 is at the edge of the search region 0.5, 1.5 in coordinate 1 and the computed searchdirection points outside the region.à
x 0.5
FindRootSinx2 0, x, 4.2, 4, 4.5x 4.34161
Um eine Lösung auch im Komplexen zu finden, muss man einen komplexen Startwert
angeben:
FindRootSinx2 , x, 1FindRoot::lstol :
The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal
but was unable to find a sufficient decrease in the merit function. You may need
more than MachinePrecision digits of working precision to meet these tolerances.à
x 1.25331
FindRootSinx2 , x, 1 x 1.40864 0.643007
Mathematica_2014_complete.nb 149
4.3. Lösungen von Differentialgleichungen
ü Exakte Lösungen von DGL 1. Ordnung
Removeyim ersten Fall gibt DSolve als Lösung eine Regel für yx
DSolvey'x yx 1, yx, xyx 1 x C1
diese Regel passt jedoch nicht auf y ' xy'x yx 1 .
1 x C1 yx 1
man kann aus der Lösung auch einen Ausdruck (expression) machen
yx . 11 x C1
oder eine Funktion, z.B. f xfx_ yx . DSolvey'x yx 1, yx, x11 x C1
DGL 1. O. als Anfangswertproblem mit y0 = y0
lsg1 DSolvey'x yx 1, y0 y0, yx, xfx_ yx . lsg11yx x 1 x y0
x 1 x y0
im folgenden Beispiel gibt DSolve als Lösung eine Regel für die pure function y
DSolvey'x yx 1, y, xy Functionx, 1 x C1
die pure function lässt sich direkt mit der DGL testen
y'x yx 1 .
True
150 Mathematica_2014_complete.nb
ü Exakte Lösungen von DGL 2. Ordnung
für eine allgemeine DGL 2. O. gibt es 2 freie Konstanten C[1] und C[2], die durch
Anfangswerte, bzw. Randwerte festgelegt werden müssen
DSolveyx yx, yx, xyx x C1 x C2
Ein Anfangswertproblem mit den Startwerten y(0)=1 und y'(0)=2
lsg1 DSolveyx yx, y0 1, y0 2, yx, x
yx 1
2x 1 3 2 x
Lösung als pure function
lsg2 DSolveyx yx, y0 1, y0 2, y, x
y Functionx, 1
2x 1 3 2 x
mit Hilfe von Ersetzungsregeln bekommt man eine funktionelle Form der Lösung,
mit der man beliebig weiterrechnen und plotten kann
fx_ yx . lsg111
2x 1 3 2 x
fx_ yx . lsg211
2x 1 3 2 x
oder einfach
f1 y . lsg21
Functionx, 1
2x 1 3 2 x
Unterschiede zwischen der Lösung als y(x) und als pure function y
yx, yx, yx . lsg11
12x 1 3 2 x, yx, yx
yx, yx, yx . lsg21
12x 1 3 2 x, 3 x
1
2x 1 3 2 x, 1
2x 1 3 2 x
Vergleich Anfangswertproblem mit Randwertproblem
1.) Anfangswertproblem: y0 = y0, y ' 0 = v0
Mathematica_2014_complete.nb 151
Clearg, v0, y0, y1
yt . DSolveyt g, y0 y0, y0 v0, yt, t1 Simplify
g t2
2 t v0 y0
2.) Randwertproblem: yt0 = y0, yt1 = y1
yt . DSolveyt g, yt0 y0, yt1 y1, yt, t1 Simplify
g t t0 t t1 t0 t1 2 t1 y0 t y0 y1 t0 y12 t0 t1
bis auf wenige Ausnahmen sind jedoch die meisten DGLs nicht analytisch lösbar,
hier noch ein paar Beispiele mit Lösung, ausgedrückt durch spezielle Funktionen
DSolveyx a Cosx yx, yx, x
yx C1 MathieuC0, 2 a,x
2 C2 MathieuS0, 2 a,
x
2
DSolveyx x yx 0, yx, xyx AiryAix C1 AiryBix C2
DSolvey3x Expx yx 0, yx, xyx C1 HypergeometricPFQ, 1, 1, x
C2 MeijerG, , 0, 0, 0, x C3 MeijerG, , 0, 0, 0, , x
PlotMeijerG, , 0, 0, 0, x Re, x, 3, 3
-3 -2 -1 1 2 3
-2
2
4
6
8
152 Mathematica_2014_complete.nb
ü DGLs höherer Ordnung als Systeme von gekoppelten DGLs 1. Ordnung
DSolveyx x yx 0, yx, xyx AiryAix C1 AiryBix C2
statt y '' x = f y ', y, x kann man auch ein System von 2 gekoppelten DGL 1. O
definieren:y ' x = gv, y, x = vxv ' x = f v, y, xDSolvey'x vx, v'x x yx 0, yx, vx, xyx AiryAix C1 AiryBix C2, vx AiryAiPrimex C1 AiryBiPrimex C2
statt y ''' x = f y '', y ', y, x kann man auch ein System von 3 gekoppelten DGL 1. O
definieren:y ' x = gv, z, y, x = zxz ' x = hv, z, y, x = vxv ' x = f v, z, y, x
DSolvey3x Expx yx 0, yx, xyx C1 HypergeometricPFQ, 1, 1, x
C2 MeijerG, , 0, 0, 0, x C3 MeijerG, , 0, 0, 0, , x
Das nächste System von 3 gekoppelten DGL wird jedoch von Mathematica nicht mehr
gelöst, obwohl es offensichtlich
eine exakte Lösung gibt. Es kann jedoch numerisch gelöst werden.
DSolvey'x zx, z'x vx, v'x Expx yx 0, y, z, v, x
DSolveyx zx, zx vx, x yx vx 0, y, z, v, x
NDSolvey'x zx, z'x vx, v'x Expx yx,y0 1, z0 0, v0 0, yx, zx, vx, x, 0, 10
yx InterpolatingFunction0., 10., x,zx InterpolatingFunction0., 10., x,vx InterpolatingFunction0., 10., x
ü Numerische Lösungen von Differentialgleichungen
das nächste Beispiel ist eine nichtlineare DGL, die keine analytische Lösung besitzt:
DSolveyx a Sinyx x2, yx, xDSolveyx a x2 Sinyx, yx, x
Mathematica_2014_complete.nb 153
In solchen Fällen hilft die Numerik weiter, mit der sehr viele DGLs bequem gelöst werden
können.
Natürlich müssen dafür alle Parameter durch numerische Konstanten ersetzt werden und
die Lösung kann nur für einen eingeschränkten Bereich berechnet werden.
Für eine graphische Darstellung der Lösung reicht dies im allgemeinen aus, ansonsten
müssen die einzelnen Bereiche nacheinander berechnet werden.
NDSolveyx a Sinyx x2, y0 1, y0 1 . a 1,
yx, x, 0, 20yx InterpolatingFunction0., 20., x
oder auch wieder als pure function
NDSolveyx a Sinyx x2, y0 1, y0 1 . a 1, y, x, 0, 20
y InterpolatingFunction0., 20.,
Die Lösung wird intern als Interpolationspolynom gespeichert, die mit der gewünschten oder
voreingestellten Genauigkeit für den ganzen Definitionsbereich gilt. Mit Hilfe der Erset-
zungsregeln erzeugt man eine normale Funktion g(x), die man danach weiter verwenden
kann, z.B. zum Plotten, Differenzieren oder Integrieren, etc
gx_ yx . 1InterpolatingFunction0., 20., x
Plotgx, x, 0, 20
5 10 15 20
1.5
2.0
2.5
3.0
3.5
4.0
versucht man jedoch die Lösung für wesentlich größere Intervalle zu berechnen, bekomm
man
eine Fehlermeldung, dass die maximale Anzahl von Schritten (10 000) erreicht ist
154 Mathematica_2014_complete.nb
NDSolveyx a Sinyx x2, y0 1, y0 1. a 1, yx, x, 0, 100
NDSolve::mxst : Maximum number of 10000 steps reached at the point x == 34.443368153664494`.à
yx InterpolatingFunction0., 34.4434, x
mit der Option: MaxSteps->100 000 oder auch mehr kann man auch größere Bereiche auf
Kosten längerer Rechenzeiten und Speicherplatz berechnen
NDSolveyx a Sinyx x2, y0 1, y0 1. a 1, yx, x, 0, 100, MaxSteps 100000
yx InterpolatingFunction0., 100., x
beim nächsten (inaktiven) Beispiel ist endgültig Schluss (abhängig vom vorhandenen RAM)
NDSolveyx a Sinyx x2, y0 1, y0 1. a 1, yx,
x, 0, 1000, MaxSteps 10000000 Timing167.719, yx InterpolatingFunction0., 1000., x
bei numerischen Lösungen kann man als gesuchte Funktionen auch deren Ableitungen
gleich mit berechnen lassen
nlsg NDSolveyx x Sinyx , y0 1, y0 1,yx, y'x, y''x, x, 0, 20
yx InterpolatingFunction0., 20., x,yx InterpolatingFunction0., 20., x,yx InterpolatingFunction0., 20., x
Plotyx, y'x, y''x . nlsg1 Evaluate, x, 0, 20
5 10 15 20
-10
-5
5
10
löst man die DGL jedoch für eine pure function, dann hat man dies garnicht nötig,
da die Regel mit pure function auf alle Ableitungen ebenso anwendbar ist
Mathematica_2014_complete.nb 155
nlsg1
NDSolveyx x Sinyx , y0 1, y0 1, y, x, 0, 20y InterpolatingFunction0., 20.,
Plotyx, y'x, y''x . nlsg11 Evaluate, x, 0, 20
5 10 15 20
-10
-5
5
10
4.4. Bewegungsgleichungen mit Newton II (Beispiel Duffing-Oszillator)
ü Potential V(x) = a x^2 + b x^4
Beispiel: Duffing-Oszillator
nichtlineare Schwingungen
Duffinga_, b_, x_ a x2 b x4
a x2 b x4
ã Beispiel: a<0 und b>0
Potx_ : Duffing2, 0.2, x
156 Mathematica_2014_complete.nb
PlotPotx, x, 4.2, 4.2, Frame True,
FrameLabel "x", "Vx", PlotLabel "DuffingOszillator",
PlotStyle Red, BaseStyle 14, FontFamily "CourierBold"
-4 -2 0 2 4-5
0
5
10
15
20
25
x
Vx
Duffing-Oszillator
FindMinimumPotx, x, 25., x 2.23607
ü Kraft = -Gradient (Potential)
Kraft Potx . x xt4 xt 0.8 xt3
ü Lösung der Bewegungsgleichung: x'' = Kraft, bzw. x' = v und v' = Kraft
DSolvex''t Kraft, x'0 0, x0 x0, xt, tDSolve::bvimp :
General solution contains implicit solutions. In the boundary value problem these solutions will be ignored,
so some of the solutions will be lost.à
Für diese nichtlineare DGL ist eine analytische Lösung nicht möglich.
Daher löst man solche DGLs im Allgemeinen numerisch.
Bei einer numerischen Rechnung müssen natürlich auch alle Parameter und Anfangswerte,
bzw. Randwerte explizit mit einem numerischen Wert angegeben werden
NDSolvext vt, vt Kraft, x0 2, v0 0,xt, vt, t, 0, 10
xt InterpolatingFunction0., 10., t,vt InterpolatingFunction0., 10., t
lsg 1;
Mathematica_2014_complete.nb 157
Plotxt . lsg, t, 0, 10, PlotStyle Red, PlotRange 4
2 4 6 8 10
-4
-2
2
4
Im nächsten Beispiel ist die Energie des Teilchen höher als die Potentialbarriere bei x=0
lsg NDSolvext vt, vt Kraft, x0 3.5, v0 0,xt, vt, t, 0, 10
xt InterpolatingFunction0., 10., t,vt InterpolatingFunction0., 10., t
Plotxt . lsg, t, 0, 10, PlotStyle Red, PlotRange 4
2 4 6 8 10
-4
-2
2
4
158 Mathematica_2014_complete.nb
ü Lösung für die Geschwindigkeit v(t)
Plotvt . lsg, t, 0, 10, PlotStyle Blue
2 4 6 8 10
-4
-2
2
4
ü und schließlich die Darstellung im Phasenraum (x(t), v(t))
warum erscheint im 1. Versuch des ParametricPlots keine Figur?
ParametricPlotxt . lsg, vt . lsg,t, 0, 10, PlotStyle Magenta
0.2 0.4 0.6 0.8 1.0
0.2
0.4
0.6
0.8
1.0
xt . lsg, vt . lsg . t 1
0.0481846, 3.32179
bei manchen Funktionen, wie hier bei ParametricPlot muss man genau auf die Listenstruktur
achten
Mathematica_2014_complete.nb 159
xt . lsg1, vt . lsg1 . t 1
0.0481846, 3.32179
alternativ würde aber auch die folgende Schreibweise funktionieren
ParametricPlotxt, vt . lsg, t, 0, 10, PlotStyle Magenta
-3 -2 -1 1 2 3
-4
-2
2
4
xt, vt . lsg . t 1
0.0481846, 3.32179
eine weitere Möglichkeit zur Vermeidung dieses Problems bietet die Funktion: Flatten[...]
damit werden Listenstrukturen vereinfacht
Flatten0.0481846, 3.32179
lsg NDSolvext vt, vt Kraft, x0 3.5, v0 0,xt, vt, t, 0, 10
xt InterpolatingFunction0., 10., t,vt InterpolatingFunction0., 10., t
160 Mathematica_2014_complete.nb
lsg NDSolvext vt, vt Kraft, x0 3.5, v0 0,xt, vt, t, 0, 10 Flatten
xt InterpolatingFunction0., 10., t,vt InterpolatingFunction0., 10., t
ü AspectRatio
ein AspectRatio ∫ 1 fällt bei anharmonischen Bewegungen nicht so sehr auf
ParametricPlotxt, vt . lsg, t, 0, 10, AspectRatio 0.61
-3 -2 -1 1 2 3
-4
-2
2
4
jedoch um so stärker bei harmonischen Schwingungen, hier erwartet man einen perfekten
Kreis
lsg NDSolvext vt, vt Kraft, x0 2.2, v0 0,xt, vt, t, 0, 10;
ParametricPlotxt, vt . lsg, t, 0, 10
Mathematica_2014_complete.nb 161
2.21 2.22 2.23 2.24 2.25 2.26 2.27
-0.10
-0.05
0.05
0.10
162 Mathematica_2014_complete.nb
ParametricPlotxt, vt . lsg, t, 0, 10, AspectRatio 0.61
2.21 2.22 2.23 2.24 2.25 2.26 2.27
-0.10
-0.05
0.05
0.10
den Kreis muss man mit AspectRatio -> 1 erzwingen:
ParametricPlotxt, vt . lsg, t, 0, 10, AspectRatio 1
2.21 2.22 2.23 2.24 2.25 2.26 2.27
-0.10
-0.05
0.05
0.10
im nächsten aufwändigeren Beispiel wird der AspectRatio manuell eingestellt
ü Phasenraumdiagramm mit Manipulate
Darstellung des Phasenraums y x über dem Potential V x mit Manipulate
der Anfangswert x0 ist durch eine grüne Linie und einen grünen Punkt dargestellt
Mathematica_2014_complete.nb 163
ManipulateModulelsg,lsg NDSolvext vt, vt Kraft, x0 x0, v0 0,
xt, vt, t, 0, 20;ShowParametricPlotxt, vt . lsg,
t, 0, 20, PlotRange 4.5, 4.5, 5.5, 5.5 plr,PlotStyle Thick, Red, AspectRatio asp, ImageSize 500,
Prolog Green, Diskx0, Potx0, 0.1, 0.25,Linex0, 9, x0, 9,
PlotPotx, x, 5, 5, ImageSize 500,asp, 0.5, "aspect ratio", 0.3, 1.3, Appearance "Labeled",x0, 2.4, 6, 6, ImageSize Large,plr, 1, 0.3, 3, ControlType VerticalSlider,
ControlPlacement Right
aspect ratio 0.5
x0
-4 -2 2 4
-4
-2
2
4
plr
4.5. Euler-Lagrange-Bewegungsgleichungen (Beispiel Federpendel)
ü Beispiel Federpendel mit Lagrange-Formalismus
Beispiel: Federpendel im homogenen Erdfeld (in 1 Dimension)
Aufstellung von Bewegungsgleichungen mit dem Euler - Lagrange - Formalismus
Numerische Lösung der Bewegungsgleichungen
Grafische Darstellung der Bewegung im Orts - und Phasenraum
164 Mathematica_2014_complete.nb
Eine punktförmige Masse m hängt an einer Feder mit der Federkonstanten c. Die Ruhelänge der Feder
sei L0 (siehe Abb. 1). Durch Einwirkung des Erdfeldes (g = 9.81 m sec2) wird die Feder auf die
Länge L1 gespannt.
Zum Zeitpunkt t = 0 wird der Körper am Ort x = L0 + x0 losgelassen und dadurch in Schwingungen
versetzt. Berechne die Bewegung des Körpers und zeichne den zeitlichen Verlauf x(t) und die Darstel-
lung im Phasenraum x† als Funktion von x.
Abb. 1 : Federpendel im homogenen Erdfeld
Lagrange - Funktion : L = T - V
T : kinetische Energie
V : potentielle Energie
ü kinetische und potentielle Energie
kinetische Energie T: ( hier nur von der Geschwindigkeit v t = x ' t abhängig, nicht aber von x t )
T 1
2m xt2
1
2m xt2
potentielle Energie V: ( hier nur von x t abhängig, nicht aber von x ' t )
V m g xt 1
2c L0 xt2
1
2c L0 xt2 g m xt
Lagrange-Funktion L=T-V:
L T V
1
2c L0 xt2 g m xt 1
2m xt2
Mathematica_2014_complete.nb 165
ü Aufstellen der Bewegungsgleichung
t
Lx t L
x t 0
als erstes soll nur nochmal die Lagrange-Bewegungsgleichung dargestellt werden:
durch Anwendung der Funktion HoldForm oder auch Hold wird der Ausdruck nicht ausgerechnet,
sondern bleibt so wie er eingegeben wird,
nur die Formattierung, hier TraditionalForm, wird ausgeführt
DtDL, x't, t DL, xt 0 HoldForm TraditionalForm„
„ t
∑L
∑ x£t -∑L
∑ xt 0
DtDL, x't, t DL, xt 0g m c L0 xt Dtm, t xt m xt 0
DtDL, x't, t DL, xt 0 TraditionalForm
-c L0 - xt - g m + m x££t +„m
„ tx£t 0
die Masse m und die Federkonsante c sind Konstanten
DtDL, x't, t, Constants m, c DL, xt 0 TraditionalForm
-c L0 - xt - g m + m x££t 0
oder man gibt m und c global das Attribut: Constant
SetAttributesm, c, Constant
DtDL, x't, t DL, xt 0 TraditionalForm-c L0 - xt - g m + m x££t 0
wenn alle Zeitabhängigkeiten explizit angegeben sind, braucht man keine totale Ableitung, es reicht
dann eine partielle Ableitung nach t
DDL, x't, t DL, xt 0 TraditionalForm-c L0 - xt - g m + m x££t 0
bwgl
g m c L0 xt m xt 0
nur zur Demonstration: Darstellung der Gleichung inclusive der Definition auf der linken
Seite:
166 Mathematica_2014_complete.nb
HoldFormDtDL, x't, t DL, xt DtDL, x't, t DL, xt 0 TraditionalForm
„
„ t
∑L
∑ x£t -∑L
∑ xt -c L0 - xt - g m + m x££t 0
ü Lösung der Bewegungsgleichung
In diesem einfachen Beispiel ist eine analytische Lösung möglich,
wenn nicht kann jede DGL mit NDSolve[{...}, x[t], {t,0, tmax}]
auch numerisch gelöst werden.
DSolvebwgl, x'0 0, x0 L0 x0, xt, t
xt c L0 g m g m Cos c t
m c x0 Cos c t
m
c
. c m ^2 PowerExpand
xt g m L0 m 2 g m Cost m x0 2 Cost m 2
hier wird wieder Flatten angewandt, damit die Liste "flach" wird
lsg Simplify Flatten
xt L0 g
2 x0
g
2Cost
ü Einsetzen der Parameter und graphische Darstellung x(t)
parameter g 9.81, 1, L0 5, x0 1g 9.81, 1, L0 5, x0 1
x1 Clear
x1t_ xt . lsg . parameter14.81 8.81 Cost
Ruhelage x1Pi214.81
Mathematica_2014_complete.nb 167
Plotx1t, t, 0, 10, AxesOrigin 0, Ruhelage,PlotRange 25, 0, PlotStyle Red, PlotLabel "Pendelschwingung",
FrameLabel "t", "x t ", Frame True
0 2 4 6 8 100
5
10
15
20
25
t
xt
Pendelschwingung
alternativ unter Verwendung von Epilog:
Plotx1t, t, 0, 10, PlotRange 25, 0,PlotStyle Red, PlotLabel "Pendelschwingung",
FrameLabel "t", "x t ", Frame True,
Epilog Blue, Thick, Line0, Ruhelage, 10, Ruhelage
0 2 4 6 8 100
5
10
15
20
25
t
xt
Pendelschwingung
168 Mathematica_2014_complete.nb
ü Geschwindigkeit x
(t) als Funktion der Zeit t
Plotx1t, t, 0, 10, PlotLabel "Geschwindigkeit: xt"
2 4 6 8 10
-5
5
Geschwindigkeit: x° t
ü Darstellung im Phasenraum x(t), x†(t) als Parameterdarstellung mit Parameter t
ParametricPlotx1t, x1t, t, 0, 10, PlotStyle Red,
AxesOrigin Ruhelage, 0, PlotLabel "Phasenraumdiagramm",
FrameLabel "xt", "xt", Frame True
10 15 20
-5
0
5
xt
x° t
Phasenraumdiagramm
Mathematica_2014_complete.nb 169
5. Programmieren mit Mathematica
5.1. Definition von Funktionen und Prozeduren
ü Übersicht
Prozeduren im herkömmlichen Sinne einer prozeduralen Sprache gibt es nicht.
Letztlich sind alle Definitionen gewöhnliche Regeln.
Die syntaktische Ähnlichkeit mit Prozeduren ist allerdings beabsichtigt.
ü Typische Definition einer Funktion
Clearf1
f1x_ : x2 1
f1a b1 a b2
ü Typische Definition einer Prozedur mit dem Befehl: Module[...]
Polardiagrammr_, phi_, phi0_, phi1_ : Modulex, y,x r Cosphi; y r Sinphi;ParametricPlotx, y,
phi, phi0, phi1, AspectRatio Automatic
Polardiagramm1 Sinphi, phi, 0, 2
-1.0 -0.5 0.5 1.0
0.5
1.0
1.5
2.0
170 Mathematica_2014_complete.nb
Polardiagramm1 Sin5 phi, phi, 0, 2
-1.5 -1.0 -0.5 0.5 1.0 1.5
-1.5
-1.0
-0.5
0.5
1.0
1.5
2.0
diese neue Funktion Polardiagramm tut das gleiche wie die Mathematica-Funktion PolarPlot
5.2. Bedingte Anweisungen
ü Übersicht
If[...] und Switch[...] sind ähnlich wie in C.
Anstelle einer Kette von if..then..else..if.. kann man Which[...] verwenden.
ü If
func1x_ : Ifx 0, 1
x,
oder die sphärische Besselfunktion j0x
j0x_ : Ifx 0, Sinxx
, 1
Mathematica_2014_complete.nb 171
Tablefunc1x, x, 2, 2 typisches
Beispiel für eine Tabelle mit inkrementellen Werten Tablej0x, x, 1, 0, 1.0, 2.0 Tabelle mit beliebigen Werten j0 1, 0, 1.0, 2.0 am einfachsten
erzeugt man diese letztere Tabelle mit Map
12, 1, , 1,
1
2
Sin1, 1, 0.841471, 0.454649
Sin1, 1, 0.841471, 0.454649
ü Switch
func2n_ : Switchn,0, f0x,1, f1x,_, defx
Map[...] bzw. /@ arbeitet immer mit pure functions :
func2 1, n, m, 0, 1, 2, x
defx, defx, defx, x x3
6
x5
120
x7
5040, 1 x2, defx, defx
ü Which
vorzeichenx_ : Whichx 0, 1, x 0, 0, x 0, 1
vorzeichen 5.5, 0, a1, 0, Whicha 0, 1, a 0, 0, a 0, 1
ü Select und Cases
Zum Auswählen aus einer Liste gibt es Select[...] und Cases[...].
Select1, 2, 3, 4, 5, 6, 7, 8, 9, PrimeQ2, 3, 5, 7
oder z. B. die geraden und ungeraden Zahlen mit EvenQ und OddQ
Select1, 2, 3, 4, 5, 6, 7, 8, 9, EvenQ2, 4, 6, 8
Clearf, g
172 Mathematica_2014_complete.nb
Casesf1, g2, fs, f2.5, f_Integerf1
5.3. Schleifen mit For und Do
ü For Schleifen
For[...] ist wie in C. Sollte aber in Mathematica vermieden werden.
s 0;
Fori 1, i 10, i, s s i2s
385
ü Do Schleifen
Viel mehr zu empfehlen ist die Do[ ...] - Schleife mit der typischen Mathematica Syntax.
s 0;
Dos s i2, i, 1, 10s
385
Sowohl bei For als auch bei Do ergeben die Funktionen kein direktes Ergebnis.
Man kann dies aber mit einem Print Befehl erreichen, z.B.
s 0;
Dos s i2; Prints, i, 1, 101
5
14
30
55
91
140
204
285
385
was ist im nächsten Beispiel verkehrt?
s 0;
Dos s i2; Print"i,s ", i, s, i, 1, 10
Mathematica_2014_complete.nb 173
i,s 11
i,s 25
i,s 314
i,s 430
i,s 555
i,s 691
i,s 7140
i,s 8204
i,s 9285
i,s 10385
In vielen Fällen kann auch strukturierte Iteration verwendet werden.
z.B. Sum[f, {i, imin, imax}]
i1
10
i2
385
oder Product[f, {i, imin, imax}]
i1
5
i2
14 400
ü Beispiel: Energieniveaus in der QM im 1-dim. Potentialtopf
ListPlot5, 0, 2, 0, 2, 800, 2, 800, 2, 0, 5, 0,Joined True, PlotStyle Red, Thickness0.01`,AxesOrigin 5, 0, AxesLabel "x", "Potential Vx"
-4 -2 0 2 4x
-800
-600
-400
-200
Potential V x
Mit Stetigkeitsbedingungen der 1. und 2. Ableitung an den Rändern des Topfes findet man nach
einiger Rechnung 2 transzendente Gleichungen für symmetrische und antisymmetrische Lösungen
Cos(k x) und Sin(k x)
174 Mathematica_2014_complete.nb
ã Suche nach Lösungen der transzendenten Gleichungen:
x tan(x) = r2-x2 und x cot(x) = - r2-x2
r 7.244; U0 800 eV;
f1x_ : r2 x2 ;
g1x_ : x Tanx;u1x_ : x Cotx;xs1 1., 4., 7.; xs2 2., 5.; En ;
Plotf1x, g1x, u1x, x, 0, r
1 2 3 4 5 6 7
-10
10
20
Plotf1x, g1x, u1x, x, 0, r,PlotStyle Black, Red, Blue, PlotRange 1, 10
1 2 3 4 5 6 7
2
4
6
8
10
Do x1 FindRootg1x f1x, x, xs1i;
e1 U0 zr2 . z x11, 2; AppendToEn, e1;
If i 3, x2 FindRootu1x f1x, x, xs2i;
e2 U0 zr2 . z x21, 2; AppendToEn, e2 ,
i, 1, 3
Mathematica_2014_complete.nb 175
ColumnEn29.0006 eV115.453 eV257.425 eV450.291 eV680.337 eV
energy TableEnieV
, i, LengthEn;Plotenergy, x, 0, 1,PlotStyle Red, Thickness0.01`, Ticks None, Automatic,AspectRatio 1.3`, AxesLabel " ", "E in eV"
100
200
300
400
500
600
E in eV
5.4. Stückweise definierte Funktionen
ü mit If Switch oder Which
für einfache Beispiele kann man If ..., Switch[...] oder Which ... verwenden
p1x_ : Sinx; p2x_ : x;px_ : Ifx 0, p1x, p2x
solche Konstruktionen arbeiten gut in numerischen Anwendungen
176 Mathematica_2014_complete.nb
Plotpx, px, px, x, 5, 2, PlotStyle Black, Red, Blue
-5 -4 -3 -2 -1 1 2
-1.0
-0.5
0.5
1.0
1.5
2.0
Integratepx, x, 5, 523
2 Cos5
sie sind jedoch nicht für symbolische Anwendungen geeignet
p'xIfx 0, p1x, p2x
p'x EvaluateIfx 0, p1x, p2x
ü mit Piecewise
am besten und allgemeinsten benutzt man dafür die Funktion Piecewise[...]
qx_ Piecewisep1x, x 0, p2x, x 0Sinx x 0x x 00 True
im Falle, dass alle explizit angegebenen Bedingungen "False" sind, wird der letzte Wert 0 ausgegeben.
Diese Darstellung kann auch bei der Eingabe mit Esc und Strg über die Tastatur erreicht werden:
erst "Esc pw Esc" dann "Strg ," , dann weiter mit "Tab" und für weitere Zeilen "Strg Return"
Mathematica_2014_complete.nb 177
qx_ Piecewisep1x, x 0, p2x, 0 x 2, 2 2x, x 2Sinx x 0x 0 x 2
2 2x x 2
0 True
Sinx x 0x 0 x 2
2 2x x 2
0 True
q'xCosx x 01 x 0 0 x 22 2x x 2
Indeterminate True
Plotqx, qx, qx, x, 5, 4,PlotStyle Black, Red, Blue, Exclusions None
-4 -2 2 4
-2
-1
1
2
Integrateqx, x, 5, 52 3 3 3 Cos5
3
im Gegensatz zur vereinfachten Definition mit If[...] etc, wird die Piecewise[...] Konstruktion in
Mathematica weitgehend auch mit anderen Funktionen wie D[...], Integrate[...], Limit[...], DSolve[...]
unterstützt
5.5. Funktionale Operationen
ü Map
Removef, a, bMap f , expr oder f û expr wendet die Funktion f auf alle Elemente von expr an.
178 Mathematica_2014_complete.nb
Mapf, 1, 2, 3f1, f2, f3
f a, b, cfa, fb, fc
Sin a, b, cSina, Sinb, Sinc
für Funktionen mit dem Attribut "Listable" geht dies auch einfacher
Sina, b, cSina, Sinb, Sinc
?? Sin
Sinz gives the sine of z. à
AttributesSin Listable, NumericFunction, Protected
Map ist dagegen allgemeiner, z.B. auch
Sin x ySinx Siny
Anwendungen auf Datenlisten
data3 Tablex, Sinx x, 0.1 RandomReal, x, 1., 51., 0.841471, 0.0926126, 2., 0.454649, 0.0754058,3., 0.04704, 0.0565252, 4., 0.189201, 0.0123594, 5., 0.191785, 0.0491499
im folgenden wird das 3. Element gelöscht:
Drop, 3 & data3
1., 0.841471, 2., 0.454649, 3., 0.04704, 4., 0.189201, 5., 0.191785
das gleiche Resultat wird erzielt, indem man das letzte Element löscht:
Drop, 1 & data3
1., 0.841471, 2., 0.454649, 3., 0.04704, 4., 0.189201, 5., 0.191785
bisher wurde Drop auf die Listen "gemapped", jetzt wird Drop direkt auf die Listen
angewandt:
Drop, 1 &
1., 0.841471, 2., 0.454649, 3., 0.04704, 4., 0.189201
Mathematica_2014_complete.nb 179
Drop, 23., 0.04704, 4., 0.189201
Take, 1, 2 & data3
1., 0.841471, 2., 0.454649, 3., 0.04704, 4., 0.189201, 5., 0.191785
Take, 3 & data3
0.0926126, 0.0754058, 0.0565252, 0.0123594, 0.0491499
Flatten macht die Listenstruktur flach
Take, 3 & data3 Flatten0.0926126, 0.0754058, 0.0565252, 0.0123594, 0.0491499
Flattenliste bringt alles auf eine Ebene
Flatten1, 2, 3, a, b, c, 4, "Hallo"1, 2, 3, a, b, c, 4, Hallo
ü Apply
Apply[f, expr] oder f @@ expr ersetzt den Kopf von expr durch f.
Applyf, 1, 2, 3f1, 2, 3
f a, bfa, b
Plus a, b, ca b c
Times a, b, c, da b c d
Power a, b, c, d, eab
cde
mittell_List : Plus l
Lengthl
180 Mathematica_2014_complete.nb
mittel1, 2, 3, 4, 5, 67
2
mittelc, dc d
2
ü Scan
Scan[f, expr] wendet f auf jedes Element in expr an.
Scan gibt jedoch keinen Wert zurück
Scanf, 1, 2, 3Jedoch kann man es sehr gut mit Print anwenden, da Print seinen eigenen Output erzeugt.
ScanPrint, 1, 2, 31
2
3
ScanPrint^2 &, 2, 3, 44
9
16
ü Through
Through[{f,g,h} [x,y]] wendet eine Liste von Funktionen auf das gleiche Argument an.
(Für weitere Anwendungen, siehe Online Help)
Throughf, g, hx, yfx, y, gx, y, hx, y
ThroughSin, Cos, TanxSinx, Cosx, Tanx
Beispiel: Minimum, Maximum und Dimension einer Liste
liste 2, 1, 6, 4, 0, 3;
min, max, n0 ThroughMin, Max, Lengthliste6, 4, 6
Mathematica_2014_complete.nb 181
ü Nest
Nestf, x, 5fffffx
Nest1 1
1&, x, 5
1 1
1 1
11
11
11
x
NestList erzeugt eine Liste mit allen Unterelementen von Nest
NestListf, x, 3x, fx, ffx, fffx
ü FixedPoint
Fixpunkt Berechnung
FixedPointg, expr, 10ggggggggggexpr
FixedPointCos, 0.10.739085
FixedPointList gibt alle Einzelschritte als Liste an
FixedPointListCos, 0.10.1, 0.995004, 0.544499, 0.855387, 0.655927, 0.792483, 0.702079, 0.763501, 0.72242, 0.750208,0.731547, 0.744142, 0.735669, 0.741382, 0.737536, 0.740128, 0.738383, 0.739558, 0.738766,0.7393, 0.73894, 0.739183, 0.73902, 0.739129, 0.739055, 0.739105, 0.739072, 0.739094,0.739079, 0.739089, 0.739082, 0.739087, 0.739084, 0.739086, 0.739085, 0.739086,0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085,0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085,0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085,0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085,0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085,0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085,0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085
182 Mathematica_2014_complete.nb
ListPlot, PlotStyle Red, PointSize0.010
20 40 60 80
0.739084
0.739086
0.739088
Fixpunkte der Logistischen Abbildung xn+1 = 4 xna- xn, für a œ 0, 1a 0.7; FixedPointList4 a &, 0.2, 1000;
ListPlot, PlotRange 0, 1, PlotStyle Red, PointSize0.005
0 200 400 600 800 1000
0.2
0.4
0.6
0.8
1.0
a 0.8`; FixedPointList4 1 a 1 &, 0.2`, 500;ListPlot, PlotRange 0, 1, PlotStyle Red, PointSize0.005
0 100 200 300 400 500
0.2
0.4
0.6
0.8
1.0
Mathematica_2014_complete.nb 183
a 0.998`; FixedPointList4 1 a 1 &, 0.2, 10000;ListPlot, PlotRange 0, 1, PlotStyle Red, PointSize0.005
0 2000 4000 6000 8000 10 000
0.2
0.4
0.6
0.8
1.0
ü Fold
Cleara, b, c
Foldg, x, a, b, cgggx, a, b, c
Beispiel für das Produkt
FoldTimes, 1, 2, 3, 4, 5, 6720
Beispiel für das Hornersche Schema
Fold1 x 2 &, 0, a, b, c, d, ee x d x c x b a x
FoldList erzeugt eine Liste mit allen Unterelementen von Fold, wie auch bei NestList
FoldListg, x, a, b, cx, gx, a, ggx, a, b, gggx, a, b, c
ü Thread
Mit Thread[...] (thread = einfädeln, durchfädeln) lassen sich Listen umgruppieren, bzw. umsortieren.
Threadk1, 2, 3, a, b, ck1, a, k2, b, k3, c
Threada, b, c 1, 2, 3a 1, b 2, c 3
184 Mathematica_2014_complete.nb
Beispiel mit Vektoren, z.B. bei Bewegungsgleichungen im 3-dimensionalen Raum
F m xt, yt, ztm xt, m yt, m zt
fr k0 Cos, 0, Sin xt, 0, 0k0 Cos xt, 0, k0 Sin
ThreadF frm xt k0 Cos xt, m yt 0, m zt k0 Sin
DSolve, xt, yt, zt, t
xt
t
m m C1
C2 k0 t Cos
, yt C3 t C4, zt C5 t C6 k0 t2 Sin2 m
ü Compile
Compiled Functions sind rein numerische Funktionen, die sehr viel schneller
als normale Funktionen evaluiert werden können.
ã Beispiel : Logistische Abbildung
1. Beispiel ohne Compile
logistic1n_Integer :Modulef, t, x, fx_, t_ Evaluate 3
t
nx 1 x;
FoldListf, 0.223, Rangen
logistic11000000; Timing1.872, Null
2. Beispiel mit Compile
logistic2n_Integer :Modulef, t, x, f Compilex, t, Evaluate 3
t
nx 1 x;
FoldListf, 0.223, Rangen
logistic21000000; Timing0.14, Null
Mathematica_2014_complete.nb 185
ListPlotlogistic2100000,PlotStyle Red, PointSize0.0025, ImageSize 500
20 000 40 000 60 000 80 000 100 000
0.2
0.4
0.6
0.8
1.0
logistic250.223, 0.554467, 0.839913, 0.484052, 0.949034, 0.193476
Logistic Map als Funktion des Parameters m : f x; m = m x1- xhier: Ausschnitt von m œ (3, 4]
186 Mathematica_2014_complete.nb
logisticn_Integer : Modulef, t, x, list,
f Compilex, t, Evaluate 3 t
nx 1 x;
Transpose3 Range0, 1, 1n, FoldListf, 0.223, RangenListPlotlogistic100000, PlotStyle Red, PointSize0.0025,AxesLabel "", "x",ImageSize 500
3.2 3.4 3.6 3.8 4.0m
0.2
0.4
0.6
0.8
1.0
x¶
ã 2. Beispiel : Apfelmännchen
Beispiel aus: Mathematica 6, H.-G. Gräbe, M. Kofler, Pearson Studium Verlag, 2007
ClearApfelCalcApfelCalcz0_Complex, nmax_Integer : Modulen 0, z 0,
WhileAbsz 2 && n nmax, z z2 z0; n; n
c ColorData"TemperatureMap";
ApfelPlotz0_Complex, z1_Complex, nmax_Integer, dx_Real :Moduler0 Rez0, r1 Rez1, i0 Imz0, i1 Imz1,ListDensityPlotTableApfelCalcr i , nmax, i, i0, i1, dx, r, r0, r1, dx,AspectRatio
i1 i0
r1 r0, FrameTicks None, ColorFunction c
Mathematica_2014_complete.nb 187
ApfelPlot2 1.25 , 1.25 1.25 , 20, 0.02
ApfelPlot0.7476 0.0976 ,0.7452 0.0993 , 200, 0.8 105 Timing
16.333,
ClearApfelCalcApfelCalc Compilez0, _Complex, nmax, _Integer,
Modulen 0, z 0. ,WhileAbsz 2 && n nmax, z z2 z0; n; n
CompiledFunctionz0, nmax,Modulen 0, z 0. , WhileAbsz 2 && n nmax, z z2 z0; n; n, CompiledCode
ApfelPlot0.7476 0.0976 ,0.7452 0.0993 , 200, 0.8 105 Timing
1.825,
auch im zweiten Beispiel ist die kompilierte Version um etwa einen Faktor 10 schneller
188 Mathematica_2014_complete.nb
ApfelPlot0.7476 0.0976 , 0.7452 0.0993 , 200, 0.3 105
ã 3. Beispiel : Anwendung auf spezielle Funktionen
PlotMeijerG, , 0, 0, 0, x Re,x, 3, 4, PlotRange All Timing
4.18,
-3 -2 -1 1 2 3 4
-30
-20
-10
MeijerGcomp Compilez0, _Complex,ReMeijerG, , 0, 0, 0, z0
CompiledFunctionz0, ReMeijerG, , 0, 0, 0, z0, CompiledCode
Mathematica_2014_complete.nb 189
PlotMeijerGcompx, x, 3, 4, PlotRange All TimingCompiledFunction::cflist : Nontensor object generated; proceeding with uncompiled evaluation.à
4.322,
-3 -2 -1 1 2 3 4
-30
-20
-10
im ersten Beispiel funktioniert das leider nicht, für viele andere (Standardfunktionen) ist es jedoch möglich
allerdings ist dort der Zeitgewinn auch nicht so bedeutend
Fcomp Compilez0, _Real, Sinhz0 z0
CompiledFunctionz0, Sinhz0z0
, CompiledCode
Fcomp Compilez0, _Real, SinIntegralz0CompiledFunctionz0, SinIntegralz0, CompiledCode
PlotFcompx, x, 10, 10
-10 -5 5 10
-1.5
-1.0
-0.5
0.5
1.0
1.5
DoSinIntegralz0, z0, 10, 10, 104 Timing2.418, Null
DoFcompz0, z0, 10, 10, 104 Timing30.264, Null
190 Mathematica_2014_complete.nb
hier gehts auch wieder nicht Fcomp
Compilez0, _Real, HypergeometricPFQ1, 1, 3, 3, 3, z0CompiledFunctionz0, HypergeometricPFQ1, 1, 3, 3, 3, z0, CompiledCode
ü Inner
Inner ist eine Operation mit Funktionen, vergleichbar mit einem Skalarprodukt
(siehe auch Outer)
grundsätzliches Beispiel
Innerf, a, b, x, y, ggfa, x, fb, y
Beispiel mit g = List
Innerf, a, b, x, y, Listfa, x, fb, y
InnerTooltip, a, b, "1. Beispiel", "2. Beispiel", Lista, b
Anwendung mit Tooltip (siehe Einführung Grafik)
tooltipflist_, nlist_ : InnerTooltip, flist, nlist, List
5.6. Eigene Operatoren definieren
ü z.B. CirclePlus
Eine Reihe von Operatoren wie CirclePlus ∆ , CircleTimes ≈ , SmallCircle ë , Del “ , Square Ñ und
weitere haben in Mathematica keine vorgegebene Bedeutung. Sie können daher für eigene Zwecke
definiert werden, z.B.
∆ ("Esc c+ Esc") für die relativistische Geschwindigkeitsaddition
CirclePlusa_, b_ : a b
1 a b
v1 v2
v1 v2
1 v1 v2
0.01 0.01
0.019998
Mathematica_2014_complete.nb 191
0.5 0.5
0.8
1 1
1
Erweiterung der Operation auf beliebig viele Elemente
v1 v2 v3 v4
v1v2v3v4
Man beachte den 2-fachen Underscore _ _ , dieser steht für ein oder mehrere Elemente. Er wird bei
der Eingabe zu einem längeren Strich zusammengezogen.
CirclePlusa_, b_, c__ :CirclePlusa, CirclePlusb, c Together
v1 v2 v3 v4
v1 v2 v3 v1 v2 v3 v4 v1 v2 v4 v1 v3 v4 v2 v3 v4
1 v1 v2 v1 v3 v2 v3 v1 v4 v2 v4 v3 v4 v1 v2 v3 v4
0.4 0.4 0.4 0.4
0.93473
5.7. Prozedurale Strukturen: Module und Block
ü einfache Strukturen
Die einfachste prozedurale Struktur ist eine Folge von Ausdrücken mit Semikolon getrennt.
Dabei wird das letzte Resultat, das ohne Semikolon geschrieben ist als Ergebnis ausgegeben :
r 3; s Sqrt4 r; r^2 s^234
im folgenden Beispiel werden mit einer runden Klammer 2 Funktionen miteinander
zu einer einfachen Prozedur verbunden:
funcy_ : Print"Das Argument der Funktion ist: ", y;PlotSinx y, x, 0, 2
192 Mathematica_2014_complete.nb
func5Das Argument der Funktion ist: 5
1 2 3 4 5 6
-1.0
-0.5
0.5
1.0
ü Module und Block
Für Prozeduren mit lokalen Variablen verwendet man Module[...] oder Block[...]
Module[{x,y,...}, expr]
Block[{x,y,...}, expr]
wobei "expr" wieder eine beliebige Folge von Ausdrücken sein kann, die mit Semikolon getrennt
werden.
Sie bieten die Möglichkeit, mit lokalen Variablen x,y,... zu arbeiten, die außerhalb des Befehls nicht
definiert sind, bzw. andere Werte besitzen können. Dadurch wird die Programmierung übersichtlicher
und weniger fehleranfällig. Darüber
hinaus können mit expr. verschiedene Befehle zusammengefasst werden.
Die beiden Befehle unterscheiden sich nur darin, dass bei Module auch die Namen lokal sind,
während die Namen bei Block global sind, die Werte sind in beiden Fällen immer lokal.
aus Mathematica tutorial: Blocks compared to Modules:
In writing actual programs, modules are far more common than blocks.
When scoping is needed in interactive calculations, however, blocks are often convenient.
Modulevars, body lexical scoping
Blockvars, body dynamic scoping
Removes, u
u : s2 1
ohne lokale Variable verhalten sich beide genau gleich
Module, u1 s2
Mathematica_2014_complete.nb 193
Block, u1 s2
setzt man u als lokale Variable, dann sind die Ergebnisse sehr verschieden:
Moduleu, uu$418896
im ersten Fall erscheint nur eine interne Variable u$xxxx, die sich bei jedem weiteren Aufruf verändert
Blocku, u1 s2
im zweiten Fall erscheint die globale Variable u = 1+s2
jedoch besteht der Sinn dieser prozeduralen Strukturen gerade darin,
lokale Variable zu definieren, die außerhalb keine Gültigkeit haben und umgekehrt.
Darin unterscheiden sich dann Module und Block:
Blocks 1, u2
Modules 1, u1 s2
im zweiten Beispiel unterscheidet Mathematica zwischen der äußeren und inneren Variablen s
Blocks 1, u s3
Modules 1, u s2 s2
Am besten verwendet man nur Variable und Parameter, die innerhalb des Moduls
bzw. in einer Funktionsdefinition explizit aufgeführt werden:
fmu_ : Modules 1, u s
fma1 a
fbu_ : Blocks 1, u s
fba1 a
194 Mathematica_2014_complete.nb
oder
Moduleu, s 1, u : 1 s2; u s3
Blocku, s 1, u : 1 s2; u s3
ü Beispiele für Module oder Block
ã Fibonacchi Folge
fibn_ :Modulef,f1 f2 1;fi_ : fi fi 1 fi 2;fn
fib1055
ã Euclidscher Algoritmus für den größten gemeinsamen Teiler GGT
ggtm0_, n0_ :Blockm m0, n n0,Whilen 0, m, n n, Modm, n;m
ggt32, 728
Mathematica_2014_complete.nb 195
ü tückisches Beispiel innerhalb von Manipulate
ManipulateModuleg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, xt, t, 0, tmax Flatten;x1t_ xt . lsg1;Plotx1t, t, 0, tmax,
v0, 4, 0, 10, tmax, 10, 1, 100
v0
tmax
2 4 6 8 10
0.2
0.4
0.6
0.8
1.0
196 Mathematica_2014_complete.nb
ManipulateBlockg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, xt, t, 0, tmax Flatten;x1t_ xt . lsg1;Plotx1t, t, 0, tmax,
v0, 4, 0, 10, tmax, 10, 1, 100
v0
tmax
2 4 6 8 10
-1.0
-0.5
0.5
1.0
ManipulateBlockg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, xt, t, 0, tmax Flatten;x1t_ xt . lsg1;xt, lsg1, x10 ColumnForm,
v0, 4, 0, 10, tmax, 10, 1, 100
v0
tmax
xtxt InterpolatingFunction0., 10., 3, 11, 2, 369, 4, 0, 0, 0, 0, 0., 0.0000256540.
das Problem hängt mit der Regelanwedung: x1t_ = xt . lsg1 zusammen
Mathematica_2014_complete.nb 197
ManipulateModuleg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, xt, t, 0, tmax Flatten;x1t_ xt . lsg1;xt, lsg1, x10 ColumnForm,
v0, 4, 0, 10, tmax, 10, 1, 100
v0
tmax
x$934t$934x$934t$934 InterpolatingFunction0., 10., 3, 11, 2, 369, 4, 0, 0, 0, 0, 0., 0.0x$9340
Lösung mit pure function
ManipulateModuleg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, x, t, 0, tmax Flatten;x1t_ xt . lsg1;xt, lsg1, x10 ColumnForm,
v0, 4, 0, 10, Appearance "Labeled",tmax, 10, 1, 100
v0 4
tmax
x$951t$951x$951 InterpolatingFunction0., 10., 3, 11, 2, 369, 4, 0, 0, 0, 0, 0., 0.000025650.
198 Mathematica_2014_complete.nb
ManipulateModuleg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, x, t, 0, tmax Flatten;x1t_ xt . lsg1;Plotx1t, t, 0, tmax,
v0, 4, 0, 10, tmax, 10, 1, 100
v0
tmax
2 4 6 8 10
-1.0
-0.5
0.5
1.0
für Module ist auch die folgende Lösung mit Verzögerung bei der Regelzuweisung
möglich:
Mathematica_2014_complete.nb 199
ManipulateModuleg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, xt, t, 0, tmax Flatten;x1t_ : xt . lsg1;Plotx1t, t, 0, tmax,
v0, 4, 0, 10, tmax, 10, 1, 100
v0
tmax
2 4 6 8 10
-1.0
-0.5
0.5
1.0
und bei der Regelzuweisung direkt in der Plot-Funktion funktioniert schließlich auch die
ursprüngliche Form
200 Mathematica_2014_complete.nb
ManipulateModuleg 9.81, l 1, eq1, lsg1, x, x0, x1, t,eq1 l x''t g Sinxt 0, x0 0, x'0 v0;lsg1 NDSolveeq1, xt, t, 0, tmax Flatten;Plotxt . lsg1, t, 0, tmax,
v0, 4, 0, 10, tmax, 10, 1, 100
v0
tmax
2 4 6 8 10
-1.0
-0.5
0.5
1.0
ü Beispiel: Kurvendiskussion (ohne lokale Variable)
kdf_, a_, b_ : Module, Print"Die 1. Ableitung ist :", fx;Print"Die 2. Ableitung ist :", fx;Print"Die 3. Ableitung ist :", f3x;Print"Die Nullstellen sind :", Solvefx 0, x;Print"Die Stellen mit f'x0 sind :", Solvefx 0, x;Print"Die Stellen mit f''x0 sind :", Solvefx 0, x;Print"Die Stammfunktion von f ist :", fx x;Plotfx, x, a, b
fx_ : x3 x
kdf, 3, 3
Mathematica_2014_complete.nb 201
Die 1. Ableitung ist :1 3 x2
Die 2. Ableitung ist :6 x
Die 3. Ableitung ist :6
Die Nullstellen sind :x 1, x 0, x 1
Die Stellen mit f'x0 sind :x 1
3, x
1
3
Die Stellen mit f''x0 sind :x 0
Die Stammfunktion von f ist :x2
2x4
4
-3 -2 -1 1 2 3
-20
-10
10
20
Aufruf mit einer "pure function"
kd2 2 &, 3, 3
202 Mathematica_2014_complete.nb
Die 1. Ableitung ist :2 2 x2
x2
Die 2. Ableitung ist :2
x2 2 x2
x3
Die 3. Ableitung ist :6
x26 2 x2
x4
Die Nullstellen sind :x 2 , x 2
Die Stellen mit f'x0 sind :x 2 , x 2 Die Stellen mit f''x0 sind :
Die Stammfunktion von f ist :x2
2 2 Logx
-3 -2 -1 1 2 3
-5
5
ü Beispiel: Prozedur zur Erzeugung einer Kurvenschar (mit lokalen Variablen)
amplv0_, tmin_, tmax_, color_ : Modulex, t, res, lsg,res NDSolvext xt 0, x0 0, x0 v0,xt, t, tmin, tmax; lsg res;Plotxt . lsg, t, tmin, tmax, PlotStyle color
a1 ampl0.5, 0, 10, Red;a1 ampl0.5, 0, 10, Red;a2 ampl1.0, 0, 10, Blue;a3 ampl3.0, 0, 10, Green;
Mathematica_2014_complete.nb 203
ShowTableai, i, 1, 3
2 4 6 8 10
-0.4
-0.2
0.2
0.4
5.8. Regeln und Rekursionen
ü Anwendung von Regeln
Die grundlegende Arbeitsweise des Evaluators besteht darin, für den zu evaluierenden Ausdruck
Regeln zu finden, deren linke Seite anwendbar ist.
Dies geschieht auf Verlangen bei der Substitution...
term . term neu
neu
hx, y, z . y alpha
hx, alpha, z
rekursive Regel, z.B. für Fakultät
fac5 . fac0 1, facn_ n facn 15 fac4
mit //. wird die Regel beliebig häufig angewandt, bis alles aufgelöst ist
fac5 . fac0 1, facn_ n facn 1120
das nächste Beispiel lässt sich aber auch nach beliebiger Anzahl nicht auflösen,
daher ist irgendwann Schluss und es erscheint eine Fehlermeldung
fac5.0 . fac0 1, facn_ n facn 1ReplaceRepeated::rrlim : Exiting after fac5. scanned 65536 times.à0. fac65 531.
..oder automatisch, wenn Regeln global definiert werden.
204 Mathematica_2014_complete.nb
loga_ b_ : loga logb
log2 x y2log2 logx logy2
loga_n_ : n loga
log2 logx 2 logy
ü Rekursionen
ã ungewollte, falsche Rekursionen
in Mathematica kann man sehr leicht eine ungewollte Rekursion starten, wenn man Pro-
grammiermethoden aus C, FORTRAN
oder anderen numerischen Computersprachen übernimmt
Daher ist standardmäßig ein Rekursionslimit bei 256 gesetzt. Diesen kann man mit
$RecursionLimit=nnnn erweitern
p p 1
$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
255 Hold1 p
Clearp
p pp 1$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
General::stop : Further output of $RecursionLimit::reclim will be suppressed during this calculation.à
$Aborted
fn_ fn1 fn1
$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
General::stop : Further output of $RecursionLimit::reclim will be suppressed during this calculation.à
$Aborted
Mathematica_2014_complete.nb 205
Eine Rekursion muss immer verzögert definiert werden. Außerdem braucht sie einen
Punkt, an dem sie gestoppt,
bzw. aufgelöst wird
ã Fibonacci Reihe
Fibonacci1055
The Fn satisfy the recurrence relation Fn Fn1 Fn2 with F1 F2 1.
fn_ : fn1 fn2f1 f2 1;
f3
2
f10
55
f20 Timing0.031, 6765
f30 Timing1.045, 832 040
f32 Timing2.714, 2 178 309
ü Rekursive Funktionen mit "Gedächtnis"
im vorherigen Fall stiegen die Rechenzeiten mit wachsendem n enorm an,
im nächsten Fall merkt man kaum eine Verzögerung
Removeg
gn_ : gn gn1 gn2g1 g2 1;
g3
2
206 Mathematica_2014_complete.nb
g20 Timing0., 6765
g30 Timing0., 832 040
g100 Timing0., 354 224 848 179 261 915 075
g1000 Timing$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
$RecursionLimit::reclim : Recursion depth of 256 exceeded.à
0.016, 33 449 372 971 981 195 681 356 806 732944 396 691 005 381 570 580 873 Holdg7461 g7462 54 122 222 371 037 658 776 676 579 571 233 761 483 351 206 693 809 497 Holdg7471 g7472
normalerweise ist bei 256 Iterationen das Limit erreicht
mit $RecursionLimit kann es aber bei Bedarf auch wesentlich höher gesetzt werden
$RecursionLimit 10000;
Removeg
$RecursionLimit 256;
für diesen speziellen Fall ein Beispiel aus Gräbe/Kofler, Mathematica 6
mit der sehr effektiven Matrix Multiplikation: MatrixPower[...]
matfibn_ : MatrixPower1, 1, 1, 0, n.1, 02, 1
matfib100 Timing0., 354 224 848 179 261 915 075
matfib1000 Timing0.,43 466 557 686 937 456 435 688 527 675040 625 802 564 660 517 371 780 402 481 729089 536 555 417 949 051 890 403 879 840 079 255 169 295 922 593 080 322634 775 209 689 623 239 873 322 471 161 642996 440 906 533 187 938 298 969 649 928 516 003 704 476 137 795166 849 228 875
5.9. Mustererkennen
ü verschiedene Muster (Pattern)
Ein Muster (Pattern) ist ein Ausdruck, der besondere Musterobjekte enthalten kann. Das Musterobjekt
Blank[ ] oder _ steht für beliebige Ausdrücke.
Blank[h] passt auf einen Ausdruck mit Kopf h.
BlankSequence[ ] und BlankNullSequence[ ] passen auf Folgen von Ausdrücken
Mathematica_2014_complete.nb 207
_
_expr
__
__expr
___
___expr
_.
_ : a
symb_
symb_expr
symb__
symb__expr
symb___
symb___expr
symb_.
ü Muster für Ausdrücke des Typs t_ , t__ , t___ oder nur _ , __ , ___
Removef, a, b, c, dZur Illustrierung werden wir jeweils die Muster in einer Regel verwenden.
Die Leerstelle _ steht für irgend etwas, aber nur ein einzelnes Symbol oder eine Zahl, keine leere
Menge
fx, fy, hz, fx, y, fx, y, z, f . f_ uu
uu, uu, hz, fx, y, fx, y, z, f
Der für die Leerstelle eingesetzte Ausdruck erhält den Namen t, der dann auf der rechten Seite verwen-
det wird.
Standardfall bei Funktionsdefinitionen, wie oben nur wenn es passt, dann erhält es den Namen t
fx, fy, hz, fx, y, fx, y, z, f . ft_ tx, y, hz, fx, y, fx, y, z, f
Die doppelte Leerstelle __ steht für irgendeine Reihe mit ein oder mehreren Elementen
fx, fy, hz, fx, y, fx, y, z, f . f__ uuuu, uu, hz, uu, uu, f
Die dreifache Leerstelle ___ steht für irgendeine Reihe mit null oder mehreren Elementen
fx, fy, hz, fx, y, fx, y, z, f . f___ uuuu, uu, hz, uu, uu, uu
fx, fy, hz, fx, y, fx, y, z, f . ft___ tx, y, hz, x, y, x, y, z,
208 Mathematica_2014_complete.nb
Das Muster _:a steht für irgend etwas mit dem Defaultargument a
fx, fy, hz, fx, y, fx, y, z, f . ft_: a t2
x2, y2, hz, fx, y, fx, y, z, a2
Dieses "Muster" passt nur auf sich selbst! Es ist gar kein Muster im eigentlichen Sinn.
fx, fy, hz . fx xx, fy, hz
Tritt eine Mustervariable zweimal auf, so muss jedes Mal dasselbe ersetzt werden
fa, b, f2, 2, f3, 3.0 . fx_, x_ gxfa, b, g2, f3, 3.
ü Mustererkennen für Ausdrücke mit Default-Argumenten
das Muster _. heisst Default
das Muster _: heisst Optional
bei einer Summe: x_ + y_. ist der Default-Wert y = 0
f, fa, fa b, fd c . fx_ y_. pqx yf, pqa, pqa b, pqc d
fx_. y_. : x
bei einem Produkt: x_ y_. ist der Default-Wert y = 1
fa, fa b, fb a, fa b c . fx_ y_. pqxypqa, pqa b, pqa b, pqa b c
ebenso bei einem Exponenten ist der Default-Wert y = 1
fa, fab, fabc . fx_ y_. pqxypqa, pqab, pqabc
bei einem Muster x_:2 ist der optionale (default) Wert x = 2
Removeff, fa, fa b . fx_: 2 x
2 , a , a b
Mathematica_2014_complete.nb 209
Removeff, fa, fa b, fa, b, c . fx_, y_: x, yf, a, , a b, , fa, b, c
ü praktische Beispiele zur Mustererkennung
Beispiel 1: vereinfachte Taylorreihe, default: x0 = 0 und bis Ox6
PotenzReihef_, x_: x, x0_: 0, nm_: 6 : Seriesf, x, x0, nm
PotenzReiheSinx
x x3
6
x5
120 Ox7
PotenzReiheSinx, x, 1.00.841471 0.540302 x 1. 0.420735 x 1.2 0.0900504 x 1.3 0.0350613 x 1.4 0.00450252 x 1.5 0.00116871 x 1.6 Ox 1.7
PotenzReiheSinx, x, 1.0, 3 Normal Expand0.0295164 1.11162 x 0.150584 x2 0.0900504 x3
Beispiel 2: Im ersten Fall passt die Regel nur auf erste Element, im zweiten Fall auf die ersten 3
Elemente
1 x2 y2, 1 x2 y2, 2 x2 2 y2, 2 x2 y2 . x2 y2 z2
1 z2, 1 x2 y2, 2 x2 2 y2, 2 x2 y2
1 x2 y2, 1 x2 y2, 2 x2 2 y2, 2 x2 y2 . a_. x2 a_. y2 a z2
1 z2, 1 z2, 2 z2, 2 x2 y2
Beispiel 3: Wurzel-Regel für positive reelle Zahlen (ähnlich wie PowerExpand)
SqrtRules x_ y_ x y ,1
y_
1
y,
x_
y_
x
y;
z a b x
z b x y Mathematica kann diesen
Ausdruck nicht allgemein vereinfachen a b x z
b x y z
210 Mathematica_2014_complete.nb
z a b x
z b x y. SqrtRules
hier wird die Regel nur einmal angewandt a b x z
b x y z
z a b x
z b x y. SqrtRules
hier wird die Regel nacheinander beliebig oft angewandt
a
y
z a b x
z b x y PowerExpand
PowerExpand funktioniert sehr ähnlich als Funkion a
y
ü Mustererkennen für Ausdrücke eines Typs: _expr
Das Muster Blank[expr], oder _expr, passt nur Ausdrücke mit Kopf expr.
expr kann als Datentyp angesehen werden.
hier passt nur das 2. Beispiel fa, f2, f3.5, f1 I . fx_Integer x2
fa, 4, f3.5, f1
hier passt nur das 3. Beispiel fa, f2, f3.5, f1 I . fx_Real x2
fa, f2, 12.25, f1
hier passt nur das 4. Beispiel,
Complex schließt Real nicht ein fa, f2, f3.5, f1 I . fx_Complex x2
fa, f2, f3.5, 2
Mathematica_2014_complete.nb 211
auch Rational gilt als eigener ZahlenTyp f2
3, f a
b, f2, f3.5, f1 I . fx_Rational x2
49, f a
b, f2, f3.5, f1
ü Prädikate im Mustererkennen
Ein Muster der Form pattern?test passt nur, falls test[expr] den Wert True ergibt,
wobei expr der zu vergleichende Ausdruck ist.
Typische Verwendungsweise:
fx_Integer?Positive : x
f berechnet die Wurzel nur für positive ganze Zahlen
f1, f0, f1, fI, f0.5, f1 I, f3
1, f0, f1, f, f0.5, f1 , 3
gx_?NonNegative : x
g ist wie f aber es berechnet die Wurzel auch für x0
g 1, 0, 1, I, 0.5, 1 I, 3
1, 0, g1, g, 0.707107, g1 , 3
ü Nebenbedingungen ; Prädikate werden nur auf eine Mustervariable angewendet. Kompliziertere Bedingungen können auf
der rechten Seite der Regel angegeben werden. Die Nebenbedingung wird evaluiert, nachdem ein
Ausdruck in das Muster passt. Nur wenn das Resultat True ist, wird die Regel auch angewendet.
gx_, y_ : xy ; x y && y 0
g2, 3, g3, 3, g2, 18, g3, 3, g2, 1
5.10. Testen von Eigenschaften
Es gibt in Mathematica eine Reihe von Funktionen zum Testen von Eigenschaften von Ausdrücken.
Diese Funktionen haben Namen, die mit Q enden, um anzuzeigenm dass sie eine Frage (Question)
stellen.
Z.B. IntegerQ, NumericQ, NumberQ, EvenQ, OddQ, PrimeQ, etc
212 Mathematica_2014_complete.nb
IntegerQ 1, 3, 2., a12,2
3, 2
True, True, False, False, False, False
NumericQ 1, 3, 2., a12,2
3, 2
True, True, True, False, True, True
NumberQ 1, 3, 2., a12,2
3, 2
True, True, True, False, True, False
EvenQ 1, 2, 3, 4, 5.0, 6.False, True, False, True, False, False
PrimeQ 1, 2, 3, 129, 1001False, True, True, False, False
eine mögliche Anwendung, um sicher zustellen, dass in einer Rechnung eine Integerzahl gerade ist
evenn_ : IfOddQn, n 1, n
even 1, 2, 3, 4, 52, 2, 4, 4, 6
im nächsten Beispiel werden die Elemente auf ein Muster getestet und alle erfolgreichen Tests gezählt
RandomInteger1, 100, 1072, 47, 45, 9, 77, 5, 72, 32, 1, 10
Count, _?EvenQ4
Count, _?PrimeQ2
Mathematica_2014_complete.nb 213
6. Datenmanipulation, Fit, Interpolation und Approximation
6.1. Einlesen und Darstellen von externen Daten
ü Datensatz
Beispiel: Datensatzes mit kleinen Störungen ("Rauschen")
data TableSinx RandomReal0, 0.1, x, 0, 6, 0.10.0825544, 0.163566, 0.239017, 0.345698, 0.398644, 0.572659, 0.606469, 0.68598,0.777996, 0.787632, 0.863598, 0.919373, 1.02618, 1.02711, 1.00927, 1.04052, 1.05209,1.05081, 1.07049, 0.994893, 0.912323, 0.883008, 0.890584, 0.767463, 0.772529,0.611174, 0.588121, 0.490046, 0.380289, 0.279813, 0.175576, 0.0748045, 0.0153216,0.0756752, 0.245055, 0.313519, 0.439217, 0.460886, 0.55753, 0.626692,0.677752, 0.794561, 0.787415, 0.901321, 0.916947, 0.911875, 0.898283,0.962855, 0.913565, 0.980257, 0.903149, 0.87447, 0.845363, 0.746447,0.734175, 0.702508, 0.551038, 0.465536, 0.434261, 0.335448, 0.230161
ü Save und Get
Bei Save werden die Daten mit den Symbol-Definitionen abgespeichert.
Dabei wird der vorherige Inhalt nicht gelöscht. Die neuen Daten werden nur angehängt.
FileNames".m"
DeleteFile"datafile.m", "datafile2.m"DeleteFile::nffil : File not found during DeleteFiledata-file.m, data-file2.m.à$Failed
Daten in Datei "data-file.m" abspeichern.
Achtung, Arbeitsverzeichnis beachten! Siehe SetDirectory[....] im Setup
Save"datafile.m", data
Cleardata
data
data
In dieser Form lassen sich die Werte mit Get[...], bzw. (<<) wieder einlesen:
214 Mathematica_2014_complete.nb
FilePrint"datafile.m"data = {0.08255438190891276, 0.16356592973216594, 0.23901658543147525, 0.34569823196491734, 0.3986437930799907, 0.5726588649180878, 0.6064687099397117, 0.6859796411047101, 0.7779956480016579, 0.787631756197625, 0.8635976256838903, 0.9193732265821211, 1.0261832525678865, 1.0271134317599477, 1.009265056154205, 1.0405232000729634, 1.0520881969827225, 1.0508123832518974, 1.0704896506942732, 0.9948925049107791, 0.9123232947327311, 0.8830076154702863, 0.890583832679871, 0.7674631037102468, 0.7725292355700342, 0.6111743196459553, 0.5881211084824195, 0.4900463224085726, 0.38028935593197133, 0.27981300310687507, 0.17557568486973388, 0.07480448434623381, -0.015321569524412479, -0.07567524749162255, -0.24505496234113125, -0.3135186077471239, -0.43921671342038615, -0.46088575462280507, -0.5575299461244073, -0.626692310755502, -0.6777517777009796, -0.794560535171678, -0.7874148128029235, -0.9013213898896779, -0.9169466955810635, -0.9118751717884706, -0.8982831097810591, -0.9628553443996499, -0.9135649043898822, -0.9802569193072758, -0.9031488763169222, -0.8744700483554118, -0.8453631469168371, -0.746447119968858, -0.7341748391122989, -0.7025084912877297, -0.5510384093235097, -0.4655359361228191, -0.43426111638940623, -0.33544815706677555, -0.23016142512519794}
Get"datafile.m"0.0825544, 0.163566, 0.239017, 0.345698, 0.398644, 0.572659, 0.606469, 0.68598,0.777996, 0.787632, 0.863598, 0.919373, 1.02618, 1.02711, 1.00927, 1.04052, 1.05209,1.05081, 1.07049, 0.994893, 0.912323, 0.883008, 0.890584, 0.767463, 0.772529,0.611174, 0.588121, 0.490046, 0.380289, 0.279813, 0.175576, 0.0748045, 0.0153216,0.0756752, 0.245055, 0.313519, 0.439217, 0.460886, 0.55753, 0.626692,0.677752, 0.794561, 0.787415, 0.901321, 0.916947, 0.911875, 0.898283,0.962855, 0.913565, 0.980257, 0.903149, 0.87447, 0.845363, 0.746447,0.734175, 0.702508, 0.551038, 0.465536, 0.434261, 0.335448, 0.230161
data
0.0825544, 0.163566, 0.239017, 0.345698, 0.398644, 0.572659, 0.606469, 0.68598,0.777996, 0.787632, 0.863598, 0.919373, 1.02618, 1.02711, 1.00927, 1.04052, 1.05209,1.05081, 1.07049, 0.994893, 0.912323, 0.883008, 0.890584, 0.767463, 0.772529,0.611174, 0.588121, 0.490046, 0.380289, 0.279813, 0.175576, 0.0748045, 0.0153216,0.0756752, 0.245055, 0.313519, 0.439217, 0.460886, 0.55753, 0.626692,0.677752, 0.794561, 0.787415, 0.901321, 0.916947, 0.911875, 0.898283,0.962855, 0.913565, 0.980257, 0.903149, 0.87447, 0.845363, 0.746447,0.734175, 0.702508, 0.551038, 0.465536, 0.434261, 0.335448, 0.230161
ü ReadList[...]
Datenfile aus einem anderen Programm oder mit dem Editor erzeugt:
einzelne Spalten durch Leerzeichen getrennt, keine Kommas:
FilePrint"Temperatur.dat" 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
Mathematica_2014_complete.nb 215
Beispiel: Temperaturverlauf als Funktion der Tageszeit
Einlesen mit der Funktion ReadList:
tempdat ReadList"Temperatur.dat", Real, Real0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
ü Import[...]
andere Möglichkeiten zum Einlesen von Datenfiles mit: Import[...]
datenx Import"Temperatur.dat"0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
ü OpenRead[...] flexible Daten-Importation
oder OpenRead, wenn der Datenfile z.B. strukturiert ist und auch Textinformationen enthält.
FilePrint"Temperatur1.dat"Temperaturverlauf eines Julitages in Mainz Uhrzeit MESZ Temperatur 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
datafile1 "Temperatur1.dat"
datei OpenReaddatafile1;titel1 Readdatei, String, Stringlist1 ReadListdatei, Real, RecordLists TrueClosedateiTemperatur1.dat
Temperaturverlauf eines Julitages in Mainz, Uhrzeit MESZ Temperatur
0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
Temperatur1.dat
Vorsicht bei Files mit Leerzeilen,
diese werden nicht standardmäßig als eigene Strings erkannt!
216 Mathematica_2014_complete.nb
FilePrint"Temperatur2.dat"Temperaturverlauf eines Julitages in Mainz
Uhrzeit MESZ Temperatur 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
datafile1 "Temperatur2.dat";
datei OpenReaddatafile1;titel1 Readdatei, String, String, Stringlist1 ReadListdatei, Real, RecordLists TrueClosedateiTemperaturverlauf eines Julitages in Mainz, Uhrzeit MESZ Temperatur,
0.00000000000000E0000 2.20000000000000E0001
2., 21., 4., 20., 6., 19., 8., 20., 10., 23., 12., 27.,14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
Temperatur2.dat
Leerzeilen muss man entsprechend berücksichtigen
oder man verwendet die Option: NullRecords -> True
Außerdem sollten keine Kommas als Trennzeichen verwendet werden.
datafile1 "Temperatur2.dat";
datei OpenReaddatafile1;titel1 Readdatei, String, String, String, NullRecords Truelist1 ReadListdatei, Real, RecordLists TrueClosedateiTemperaturverlauf eines Julitages in Mainz, , Uhrzeit MESZ Temperatur
0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
Temperatur2.dat
Mathematica_2014_complete.nb 217
ListPlotlist1, PlotRange 18, 34
5 10 15 20
25
30
Soll nur ein Teil des Datenfiles gelesen werden, oder befindet sich am Ende des Files
wieder ein Text (Kommentar) muss die Anzahl der Elemente angegeben werden
datafile1 "Temperatur3.dat";
datei OpenReaddatafile1;titel1 Readdatei, String, String, String, NullRecords Truelist1 ReadListdatei, Real, RecordLists TrueClosedateiTemperaturverlauf eines Julitages in Mainz, , Uhrzeit MESZ Temperatur
Read::readn : Invalid real number found when reading from Temperatur3.dat.à
0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23., 12., 27.,14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24., $Failed
Temperatur3.dat
datafile1 "Temperatur3.dat";
datei OpenReaddatafile1;titel1 Readdatei, String, String, String, NullRecords Truelist1 ReadListdatei, Real, 26, RecordLists TrueClosedateiTemperaturverlauf eines Julitages in Mainz, , Uhrzeit MESZ Temperatur
0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
Temperatur3.dat
218 Mathematica_2014_complete.nb
ü Import[...] mit nachträglicher Auswahl durch Take, Part, Drop, etc.
data5 Import"Temperatur2.dat"Temperaturverlauf, eines, Julitages, in, Mainz, , Uhrzeit, MESZ, Temperatur,0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23., 12., 27.,14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
list2 Takedata5, 4, 160., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
list3 Partdata5, 4 ;; 100., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23., 12., 27.
Wenn die externen Daten nicht durch Leerzeichen oder Tabs getrennt sind, sondern durch Kom-
mas,
ist es besser, die Kommas vorher mit einem Texteditor zu entfernen!
6.2. Datenausgabe in externe Dateien
ü Übersicht
Zum Schreiben von Daten in externe Files gibt es ähnliche Prozeduren, z.B. Export[...]
oder auch wesentlich flexibler OpenWrite[...], OpenAppend[...] und
WriteString[...].
(siehe Mathematica-Help)
ü einfaches Schreiben mit Export[...]
Export"Output.dat", list1Output.dat
FilePrint"Output.dat"0. 22.2. 21.4. 20.6. 19.8. 20.10. 23.12. 27.14. 31.16. 33.18. 32.20. 29.22. 26.24. 24.
Mathematica_2014_complete.nb 219
ü Spezielle Formattierungen mit OpenWrite[...]
tab1 PaddedFormTableFormlist1, TableSpacing 0, 2, 8, 20.00 22.002.00 21.004.00 20.006.00 19.008.00 20.00
10.00 23.0012.00 27.0014.00 31.0016.00 33.0018.00 32.0020.00 29.0022.00 26.0024.00 24.00
Export"Output.dat", tab1Output.dat
Export erzeugt Dateien mit Mathematica Strukturen
FilePrint"Output.dat"PaddedForm[TableForm[{{0., 22.}, {2., 21.}, {4., 20.}, {6., 19.}, {8., 20.}, {10., 23.}, {12., 27.
OpenWrite erzeugt einfache ASCII Dateien, die von vielen Programmen weiter verwendet werden
können
file OpenWrite"Output2.dat";WriteStringfile, " Temperaturverlauf in Mainz\n\n"WriteStringfile, " Uhrzeit Temperatur\n"WriteStringfile, tab1Closefile;
FilePrint"Output2.dat" Temperaturverlauf in Mainz
Uhrzeit Temperatur 0.00 22.00 2.00 21.00 4.00 20.00 6.00 19.00 8.00 20.00 10.00 23.00 12.00 27.00 14.00 31.00 16.00 33.00 18.00 32.00 20.00 29.00 22.00 26.00 24.00 24.00
220 Mathematica_2014_complete.nb
6.3. Datenmanipulation (strukturelle Änderung von Datensätzen)
ü mit Transpose
Zerlegung der Liste in Vektoren h, temp
tempdat
0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
Transposetempdat0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.,22., 21., 20., 19., 20., 23., 27., 31., 33., 32., 29., 26., 24.
h 10., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.
temp 222., 21., 20., 19., 20., 23., 27., 31., 33., 32., 29., 26., 24.
oder auch ganz einfach:
h, temp Transposetempdat0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.,22., 21., 20., 19., 20., 23., 27., 31., 33., 32., 29., 26., 24.
h
0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.
umgekehrt: Erzeugung eines Datensatzes aus Vektoren:
Transposeh, temp0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
weitere Standardfunktionen: Take, Part, Span, Rest, Drop, Append, Prepend, Insert,
Delete, ReplacePart, Join, Union, ... siehe unter Help!
testdata 1, 197, 12, 3, 367, 32, 4, 435, 41, 7, 569, 741, 197, 12, 3, 367, 32, 4, 435, 41, 7, 569, 74
Mathematica_2014_complete.nb 221
MatrixForm1 197 123 367 324 435 417 569 74
3. Reihe der Matrix
testdata34, 435, 41
Parttestdata, 34, 435, 41
2. Spalte der Matrix
testdataAll, 2197, 367, 435, 569
Teilmatrix aus 1.-2. Spalte
ü Part and Span ;;
dataxy testdataAll, 1 ;; 21, 197, 3, 367, 4, 435, 7, 569
ü Take and Drop with Map û
dataxy Take, 1, 2 & testdata1, 197, 3, 367, 4, 435, 7, 569
dataxy Drop, 1 & testdata1, 197, 3, 367, 4, 435, 7, 569
ü Applyf , expr, 1 ûûû
1, 2 & testdata1, 197, 3, 367, 4, 435, 7, 569
222 Mathematica_2014_complete.nb
6.4. Minimum und Maximum Suche, lokal und global
ü 1-dim Beispiele
ã Minimum einer 1 - dim Funktion
Plot2 x^2 3 x 5, x, 5, 5
-4 -2 2 4
10
20
30
40
50
60
70
Minimize2 x^2 3 x 5, x
318, x 3
4
MinValue2 x^2 3 x 5, x31
8
ArgMin2 x^2 3 x 5, x3
4
numerische Variante
NMinimize2 x^2 3 x 5, x3.875, x 0.75
Mathematica_2014_complete.nb 223
ã Minimum einer transzendenten Funktion mit "constraints"
Plotx Cosx, x, 10, 20
-10 -5 5 10 15 20
-15
-10
-5
5
10
15
Minimize geht nur für algebraische Funktionen
Minimizex Cosx, xMinimizex Cosx, x
NMinimize geht für beliebige Funktionen
Zur Bestimmung eines globalen Minimums oder Maximums muss der Bereich allerdings
eingeschränkt werden
NMinimizex Cosx, x0.561096, x 0.860334
Einschränkung mit "constraint": im Bereich 0 bis 15
NMinimizex Cosx, 0 x 15, x9.47729, x 9.52933
Einschränkung mit Anfangsintervall für Minimumsuche, hier [9,10]
NMinimizex Cosx, x, 9, 109.47729, x 9.52933
die Minimumsuche bleibt jedoch nicht auf das Intervall beschränkt
NMinimizex Cosx, x, 1, 23.28837, x 3.42562
224 Mathematica_2014_complete.nb
ü 2-dim Beispiele
ã Minimum und Maximum einer 2-dim Funktion
fx_, y_ : x y 3^2 1
Plot3Dfx, y, x, 3, 3, y, 5, 5
Minimizefx, y, x, y1, x 1, y 3
Maximizefx, y, x, yMaximize::natt : The maximum is not attained at any point satisfying the given constraints. à
, x Indeterminate, y Indeterminate
ã Minimum einer 2 - dim algebraischen Funktion mit "constraints"
Minimizex 2 y, x^2 y^2 1, x, y
5 , x 4
5 5 , y
2
5
ü NMaximize mit constraints
fn_, x_, y_ : 16 x 1 x y 1 y Sinn x Sinn y2
Mathematica_2014_complete.nb 225
ã Maximum für n = 1
Plot3Df1, x, y, x, 0, 1, y, 0, 1
NMaximizef1, x, y, x, yNMaximize::cvdiv : Failed to converge to a solution. The function may be unbounded.à
1.782341025, x 792.35, y 735.665
NMaximizef1, x, y, 0 x 1, 0 y 1, x, y1., x 0.5, y 0.5
ã Maximum für n = 3 (mehrere lokale Maxima)
Plot3Df3, x, y, x, 0, 1, y, 0, 1, PlotRange All
226 Mathematica_2014_complete.nb
NMaximizef3, x, y, 0 x 1, 0 y 1, x, y0.371886, x 0.5, y 0.205463
ã Maximum für n = 13 (sehr viele lokale Maxima)
Plot3Df13, x, y, x, 0, 1, y, 0, 1, PlotRange All
NMaximizef13, x, y, 0 x 1, 0 y 1, x, y0.673248, x 0.653037, y 0.653037
ü NMaximize mit unterschiedlichen Methoden
Für die Suche nach dem absoluten Maximum bietet Mathematica verschiedene Methoden an
NMaximizef13, x, y, 0 x 1, 0 y 1, x, y, Method Automatic0.673248, x 0.653037, y 0.653037
Method Ø "RandomSearch"
NMaximizef13, x, y, 0 x 1, 0 y 1,x, y, Method "RandomSearch"
0.673248, x 0.653037, y 0.653037
Method Ø{"RandomSearch", "SearchPoints" Ø 200, "RandomSeed" Ø 7}
NMaximizef13, x, y, 0 x 1, 0 y 1, x, y,Method "RandomSearch", "SearchPoints" 200, "RandomSeed" 7
1., x 0.5, y 0.5
Mathematica_2014_complete.nb 227
Method Ø"NelderMead"
NMaximizef13, x, y, 0 x 1, 0 y 1,x, y, Method "NelderMead"
0.673248, x 0.653037, y 0.653037
Method Ø"SimulatedAnnealing"
NMaximizef13, x, y, 0 x 1, 0 y 1,x, y, Method "SimulatedAnnealing"
0.673248, x 0.653037, y 0.653037
Method Ø "DifferentialEvolution"
NMaximizef13, x, y, 0 x 1, 0 y 1,x, y, Method "DifferentialEvolution"
1., x 0.5, y 0.5
am aufwändigsten, aber auch sichersten ist die Methode "RandomSearch" mit einer großen Anzahl
von "SearchPoints"
im Zweifel ist es immer besser, verschiedene Verfahren zu vergleichen
6.5. Statistische Analysen, Fits
ü Einfacher Linearer Fit mit Fit[...]
ã mit der Standardfunktion Fit[data, func, var] bekommt man als Ergebnis die gewünschte Fit-Funktion
Wir betrachten den folgenden Datensatz:
data TableNx Exp2 x, x, 100.135335, 0.0366313, 0.0148725, 0.0080511, 0.00544799,0.00442383, 0.0041909, 0.00453742, 0.00552666, 0.00747951
228 Mathematica_2014_complete.nb
dataPlot ListPlotdata, AxesOrigin 0, 0
2 4 6 8 10
0.02
0.04
0.06
0.08
0.10
0.12
0.14
Mit Fit[...](Least Squares Fit) können die Daten nach der Methode der
kleinsten Quadrate angepasst werden.
Das Ergebnis von Fit[...] ist die Fit-Funktion.
Es wird jedoch nichts über die Güte des Fits ausgesagt. Das kann man dann einfach in einem Plot
beurteilen.
1. Polynom-Fit: a + b x + c x2
fit1 Fitdata, 1, x, x2, x0.140872 0.0439157 x 0.00320296 x2
2. Fit mit Exponentialfunktion (immer noch linear!)
fit2 Fitdata, 1, x2, Expx, x0.00352578 0.36731 x 0.000124671 x2
3. Für einige Fälle kann auch ein nichtlinearer Fit durchgeführt werden,
hier e^(a + b x + c x^2)
fit3 ExpFitLogdata, 1, x, x2, x0.9597351.3141 x0.0933464 x
2
Vergleich der 3 Fits mit den Daten: fit1: schwarz, fit2: blau, fit3: rot
Mathematica_2014_complete.nb 229
ShowdataPlot, PlotTooltipfit1, fit2, fit3, x, 1, 10,PlotStyle Black, Blue, Red
2 4 6 8 10-0.01
0.01
0.02
0.03
0.04
0.05
hier erscheint die rote Kurve (Exponential-Fit) am besten
ShowdataPlot, Plotfit1, fit2, fit3 Tooltip, x, 1, 10,PlotStyle Black, Blue, Red, PlotRange All,
PlotRange All
2 4 6 8 10
0.02
0.04
0.06
0.08
0.10
0.12
0.14
hier erscheint die blaue Kurve (Parabel+Exp) am besten
ü Einfacher Linearer oder Nichtlinearer Fit mit FindFit[...]
ã mit FindFit[data, expr, pars, vars] bekommt man als Ergebnis die Fitparameter mit ihren numerischen Werten
erstes Beispiel (fit1) mit Parabel-Fit
FindFitdata, a b x c x2, a, b, c, xa 0.140872, b 0.0439157, c 0.00320296
FindFit kann auch nichtlineare Fits durchführen (z.B. fit3)
230 Mathematica_2014_complete.nb
FindFitdata, Expa b x c x2, a, b, c, xFindFit::cvmit : Failed to converge to the requested accuracy or precision within 100 iterations.à
a 17.7605, b 19.4236, c 1.87475
allerdings sind nichtlineare Fits immer etwas schwerer und oft nicht eindeutig,
es führt jedoch zu guten Lösungen, wenn man geeignete Startwerte angeben kann:
FindFitdata, Expa b x c x2, a, 1, b, 1, c, 0, xa 0.523988, b 1.59654, c 0.117488
im Anschluss an FindFit[...] erzeugt man die Fit-Funktion mit einer Regelzuweisung:
fit4 Expa b x c x2 . 0.5239881.59654 x0.117488 x
2
ShowdataPlot, Plotfit3, fit4, x, 1.0, 10, PlotRange All,
PlotStyle Red, Green, PlotRange All
2 4 6 8 10
0.02
0.04
0.06
0.08
0.10
0.12
0.14
Mathematica_2014_complete.nb 231
ShowdataPlot,Plotfit2, fit3, fit4, x, 1.0, 10, PlotRange All,
PlotStyle Blue, Red, Green, PlotRange All
2 4 6 8 10
0.02
0.04
0.06
0.08
0.10
0.12
0.14
nun erscheint die grüne Kurve (nichtlinerer Exponential-Fit) am besten
zum Suchen von geeigneten Startwerten eines nichtlinearen Fits ist ein Plot mit Manipulate sehr
gut geeignet.
232 Mathematica_2014_complete.nb
ManipulateShowdataPlot,PlotExpa b x c x2, x, 1.0, 10, PlotRange All,
PlotStyle Red, Green, PlotRange All,a, 0, 2, 2, Appearance "Labeled",b, 0, 2, 2, Appearance "Labeled",c, 0, 2, 2, Appearance "Labeled", SaveDefinitions True
a 0
b 0
c 0
2 4 6 8 10
0.2
0.4
0.6
0.8
1.0
ã Abweichung als Summe der Quadrate
i=1
n
yi - f xi2
xi Range10yi data
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
0.135335, 0.0366313, 0.0148725, 0.0080511, 0.00544799,0.00442383, 0.0041909, 0.00453742, 0.00552666, 0.00747951
abweichungxi_, yi_, fit_ :Moduleyt, yt fit . x xi; Plus yi yt2
Mathematica_2014_complete.nb 233
abweichungxi, yi, fit1abweichungxi, yi, fit2abweichungxi, yi, fit3abweichungxi, yi, fit40.00335038
0.000146187
0.000519765
0.0000202158
der letzte (nichtlineare) Fit ist deutlich am besten, auch Fit2 ist besser als Fit3,
der Parabel-Fit (Fit1) ist am schlechtesten
ü Nachtrag zum Paket: ErrorBarPlots` : ErrorListPlot und ErrorBar
Needs"ErrorBarPlots`"
?ErrorBarPlots`*
ErrorBarPlots`
ErrorBar ErrorBarFunction ErrorBarPlot ErrorListPlot
im ersten Beispiel sind die Abszissen wieder einfach die natürlichen Zahlen,
die Ordinaten zeigen die i , unabhängig von x !
Der Fehlerbalken wird zufällig ermittelt.
ErrorListPlotTableSqrti, RandomReal0.3, i, 1, 20, 2
2 4 6 8 10
1.5
2.0
2.5
3.0
3.5
4.0
4.5
in dem nächsten Beispiel (Normalfall) wird der Fehler in der Ordinate y einfach als 3. Kompo-
nente der Vektoren angegeben
234 Mathematica_2014_complete.nb
ErrorListPlot1, 1., 0.3, 2, 2, 0.6, 3, 4, 0.3, 4, 8, 1, 5.2, 5, 2
2 3 4 5
2
4
6
8
im allgemeinen Fall werden Fehlerbalken mit der Funktion ErrorBar erzeugt.
Damit können zum einen Fehlerbalken in beiden Richtungen angegeben werden
und zum anderen können auch unsymmetrische Fehler angezeigt werden.
ErrorListPlot1, 1, ErrorBar0.2, 0.3,2, 2, ErrorBar0.2, 0.3, 3, 4, ErrorBar0.2, 0.3, 0.5,4, 8, ErrorBar0.7, 0.4, 1, 0.5,
ErrorBarFunction Automatic
1.5 2.0 2.5 3.0 3.5 4.0
2
4
6
8
ü Linearer Fit mit Fehler-Gewichten
daten
1, 1.5, 0.5, 2, 2.2, 0.4, 3, 2.3, 0.15, 4.5, 3.5, 0.7;
Zum Plotten von Datenpunkten mit Fehlerbalken muss das Standard-Paket "ErrorBarPlots`"
geladen werden:
Needs"ErrorBarPlots`"
Mathematica_2014_complete.nb 235
errplot ErrorListPlotdaten, PlotRange 0, 5, 0, 4.2
0 1 2 3 4 50
1
2
3
4
Zum Fitten benötigt man die Daten in der Form eines 2-spaltigen Datensatzes {x,y} und eines
Vektors {s}
dataxy datenAll, 1 ;; 21, 1.5, 2, 2.2, 3, 2.3, 4.5, 3.5
error datenAll, 30.5, 0.4, 0.15, 0.7
einfache lineare Fits ohne Berücksichtigung der Fehler, bzw. ohne Gewichte
fit1 Fitdataxy, 1, x, x0.957009 0.540187 x
fit2 Fitdataxy, 1, x, x2, x1.29347 0.230506 x 0.0556437 x2
236 Mathematica_2014_complete.nb
pl1 Showerrplot, Plotfit1, fit2, x, 0, 5,PlotLabel "ohne Fehlergewichte"
0 1 2 3 4 50
1
2
3
4ohne Fehlergewichte
ü Berechnung des Chi-Quadrat:
c2 = i=1
n yi - f xi2
si2
Das folgende Modul berechnet sowohl das c2 für Datensätze mit Fehlerangaben als auch die
einfache quadratische Abweichung für Datensätze ohne Fehlerangaben.
chiquadratdaten_, fit_ : Modulexi, yi, di, yt,xi datenAll, 1; yi datenAll, 2;di IfDimensionsdaten2 3, datenAll, 3, 1;
yt fit . x xi; Plus yi yt2
di2
chiquadratdaten, fit13.61521
chiquadratdataxy, fit10.116075
chiquadratdaten, fit21.87371
chiquadratdataxy, fit20.0923612
Mathematica_2014_complete.nb 237
Reduziertes Chi-Quadrat bzw. Chi-Quadrat pro Freiheitsgrad ( c2/d.o.f. )
Anzahl der Freiheitsgrade = Anzahl der Datenpunkte - Anzahl der Parameter
chiquadratdaten, fit1Lengthdaten 2
Beispiel für 4 Datenpunkte und 2 Parameter 1.8076
chiquadratdaten, fit2Lengthdaten 3
Beispiel für 4 Datenpunkte und 3 Parameter 1.87371
Obwohl die Abweichung im zweiten Fit kleiner ist als im ersten,
ist das reduzierte Chi-Quadrat im ersten Fall kleiner!
ü Linearer Fit mit LinearModelFit[data, func, var]
zuerst noch einmal zum Vergleich ohne Gewichte, das ergibt das gleiche Ergebnis wie bei Fit[...]
lm1 LinearModelFitdataxy, 1, x, x
FittedModel 0.957009+ 0.540187 x
die funktionale Form erhält man durch
Normallm10.957009 0.540187 x
Zum Berechnen von Funktionswerten oder z.B. zum Plotten kann man aber direkt das Ergebnis von
LinearModelFit verwenden
lm111.4972
zum Plotten der Fitkurve gemeinsam mit den Daten verwendet man meistensShowPlot ..., ListPlot ...alternative Plot-Methode mit Epilog:
238 Mathematica_2014_complete.nb
Plotlm1x, x, 0, 5,Epilog Red, PointSize0.02, Point dataxy
1 2 3 4 5
1.5
2.0
2.5
3.0
3.5
weitere Informationen über den Fit, z.B. Fehleranalyse:
Chi-Quadrat, Fitparameter, Parameter-Tabelle mit Fehlern, Kovarianzmatrix, Korrelations-
matrix, etc
(siehe Online Help für LinearModelFit)
sehr viele Eigenschaften des Fits bekommt man mit der Syntax: lm1".. properties .."
lm1"EstimatedVariance" 2Freiheitsgrad,hier unrealisch klein, da keine Fehler verwendet werden. In
diesem Fall wird der Fehler automatisch als 1.0 angenommen 0.0580374
fit1 lm1"BestFit"0.957009 0.540187 x
lm1"BestFitParameters"0.957009, 0.540187
lm1"ParameterTable"
Estimate Standard Error t Statistic P-Value
1 0.957009 0.272598 3.5107 0.072431x 0.540187 0.0931584 5.79859 0.0284767
Mathematica_2014_complete.nb 239
lm1"ParameterConfidenceIntervalTable"
Estimate Standard Error Confidence Interval
1 0.957009 0.272598 -0.215884, 2.1299x 0.540187 0.0931584 0.139359, 0.941015
lm1"CovarianceMatrix" MatrixForm0.0743095 0.0227810.022781 0.00867849
lm1"CorrelationMatrix" MatrixForm1. 0.897076
0.897076 1.
linearer Fit mit Parabelform ohne Gewichte, bzw. Fehlerangaben
lm2 LinearModelFitdataxy, 1, x, x2, x
FittedModel 1.29347+ 0.230506 x+ 0.0556437 x2
fit2 lm2"BestFit"1.29347 0.230506 x 0.0556437 x2
pl1 Showerrplot, Plotfit1, fit2, x, 0, 5,PlotLabel "ohne Fehlergewichte"
0 1 2 3 4 50
1
2
3
4ohne Fehlergewichte
Vergleich der Parameter-Tabellen
240 Mathematica_2014_complete.nb
Gridlm1"EstimatedVariance", " ", lm2"EstimatedVariance",
lm1"ParameterTable", " ", lm2"ParameterTable"0.0580374 0.0923612
EstimaÖ StandÖ t P-ValÖ
1 0.957Ö 0.272Ö 3.5107 0.072Ö
x 0.540Ö 0.093Ö 5.798Ö 0.028Ö
EstimÖ StandÖ t P-ValÖ
1 1.293Ö 0.747Ö 1.729Ö 0.333Ö
x 0.230Ö 0.622Ö 0.370Ö 0.774Ö
x2 0.055Ö 0.109Ö 0.506Ö 0.701Ö
der 2. Fit ist aus statistischen Gründen schlechter als der 1. Fit, obwohl er vielleicht besser aussieht
!!!
Beachte insbesondere das c2 und die Standard-Fehler.
dann mit Gewichten aus den Fehlerbalken
Gewichte 1
error2
4., 6.25, 44.4444, 2.04082
lm1a LinearModelFitdataxy, 1, x, x, Weights Gewichte
FittedModel 1.08944+ 0.423259 x
Hier der Vergleich: links der ungewichtete Fit und rechts der fehlergewichtete Fit:
Mathematica_2014_complete.nb 241
Grid"BestFit", lm1"BestFit", lm1a"BestFit","EstimatedVariance",lm1"EstimatedVariance", lm1a"EstimatedVariance",
"BestFitParameters", lm1"BestFitParameters",lm1a"BestFitParameters",
"ParameterTable", lm1"ParameterTable",lm1a"ParameterTable",
"CorrelationMatrix", lm1"CorrelationMatrix" MatrixForm,lm1a"CorrelationMatrix" MatrixForm
, Frame AllBestFit 0.957009 0.540187 x 1.08944 0.423259 x
EstimatedVariance 0.0580374 0.55727
BestFitParameters 0.957009, 0.540187 1.08944, 0.423259
ParameterTable
EstiÖ StanÖ t P-VÖ
1 0.95Ö 0.27Ö 3.51Ö 0.07Ö
x 0.54Ö 0.09Ö 5.79Ö 0.02Ö
EstiÖ StanÖ t P-VÖ
1 1.08Ö 0.43Ö 2.51Ö 0.12Ö
x 0.42Ö 0.15Ö 2.81Ö 0.10Ö
CorrelationMatrix1. 0.897076
0.897076 1.1. 0.973458
0.973458 1.
lm2a LinearModelFitdataxy, 1, x, x2, x, Weights Gewichte;
pl2 Showerrplot, Plotlm1ax, lm2ax, x, 0, 5,PlotLabel "mit Fehlergewichten";
242 Mathematica_2014_complete.nb
GraphicsRowpl1, pl2, ImageSize 600
0 1 2 3 4 50
1
2
3
4ohne Fehlergewichte
0 1 2 3 40
1
2
3
4mit Fehlergewichten
Im gewichteten Fit wird der 3. Datenpunkt mit dem kleinsten Fehler bevorzugt,
Datenpunkte mit großen Fehlern bekommen dagegen ein geringes statistisches Gewicht.
ü wichtigste Ergebnisse des LinearModelFit
BestFit Fitfunktion
EstimatedVariance reduziertes Chi-Quadrat
BestFitParameters Fit Parameter
ParameterTable:
Estimate Wert des Parameters
StandardError Fehler des Parameters für einen Confidence Level CL=0.68 (wert ±
fehler)
ü weitere Optionen für Ergebnis-Ausgabe
CovarianceMatrix Kovarianz-Matrix
CorrelationMatrix Korrelations-Matrix
ParameterConfidenceIntervals Konfidenzintervall der Parameter
ParameterConfidenceRegion Konfidenzregion
und vieles mehr, siehe Online Help von LinearModelFit oder NonlinearModelFit
ü Beispiel: Linearer Fit mit 4 Punkten
daten 0, 0, 0.3, 1, 1.5, 0.5, 2, 2, 0.5, 3, 2.5, 0.5;
Mathematica_2014_complete.nb 243
ErrorListPlotdaten, AxesOrigin 0.2, 0
0.0 0.5 1.0 1.5 2.0 2.5 3.0
0.5
1.0
1.5
2.0
2.5
3.0
dataxy datenAll, 1 ;; 2;
Gewichte 1 datenAll, 32;
nlm LinearModelFitdataxy, 1, x, x, Weights Gewichte
FittedModel 0.133663+ 0.871287 x
"EstimatedVariance", "BestFit", "ParameterTable"
0.742574, 0.133663 0.871287 x,
Estimate Standard Error t Statistic P-Value
1 0.133663 0.240622 0.555492 0.6344x 0.871287 0.154579 5.63651 0.0300638
ü Fehlerbänder
Fehlerband mit 50 % Confidence Level
nlm"MeanPredictionBands", ConfidenceLevel 0.5
0.133663 0.871287 x 0.816497 0.0578987 0.0496275 x 0.0238947 x2 ,
0.133663 0.871287 x 0.816497 0.0578987 0.0496275 x 0.0238947 x2
Fehlerband mit 68 % Confidence Level
nlm"MeanPredictionBands", ConfidenceLevel 0.68
0.133663 0.871287 x 1.31158 0.0578987 0.0496275 x 0.0238947 x2 ,
0.133663 0.871287 x 1.31158 0.0578987 0.0496275 x 0.0238947 x2
Fehlerband mit 99 % Confidence Level
244 Mathematica_2014_complete.nb
nlm"MeanPredictionBands", ConfidenceLevel 0.99
0.133663 0.871287 x 9.92484 0.0578987 0.0496275 x 0.0238947 x2 ,
0.133663 0.871287 x 9.92484 0.0578987 0.0496275 x 0.0238947 x2
Fehlerbänder mit 50, 68, 90, 95, 99 und 99.9 % Confidence Level
bands50x_, bands68x_, bands90x_,bands95x_, bands99x_, bands999x_
Tablenlm"MeanPredictionBands", ConfidenceLevel cl,cl, .5, .68, .9, .95, .99, .999;
ShowListPlotdataxy,Plotnlmx, bands90x, bands95x, bands99x, bands999x,x, 0, 4, Filling 2 1, 3 2, 4 3, 5 4
68% Confidence Level: 68% aller Datenpunkte sollten im Fehlerband liegen
normales 1s Kriterium
ShowListPlotdataxy,Plotnlmx, bands68x, x, 0, 4, Filling 2 1
95% Confidence Level: 95% aller Datenpunkte sollten im Fehlerband liegen
2s Kriterium
Mathematica_2014_complete.nb 245
ShowListPlotdataxy,Plotnlmx, bands95x, x, 0, 4, Filling 2 1
ü Nichtlinearer Fit mit FindFit[...]
data 10, 59.14, 1.25, 55.6, 1.00, 51.00,.75, 46.84, .5, 35.89, .4, 29.21, .3, 19.7,.2, 10., .1, 2.67;
lpl1 ListPlotdata, AxesOrigin 0, 0
2 4 6 8 10
10
20
30
40
50
60
Clearr
fx_ : c r2 1 Exp xr2
Einfacher nichtlinearer Fit mit FindFit ohne zusätzliche Optionen
nfit FindFitdata, fx, c, 70., r, .5, xc 77.0881, r 0.475636
246 Mathematica_2014_complete.nb
ü Nichtlinearer Fit mit NonlinearModelFit[data, func, pars, var]
fx . nfit54.7881 1 4.42029 x2
nlm NonlinearModelFitdata, fx, c, 70., r, .5, x
FittedModel 54.7881 1-‰-4.42029 x2
die Ergebnisse sind identisch!
nlm"EstimatedVariance", "BestFit", "ParameterTable"6.84047, 54.7881 1 4.42029 x2,
Estimate Standard Error t Statistic P-Value
c 77.0881 6.19237 12.4489 4.96759μ 10-6
r 0.475636 0.0220855 21.5361 1.17316μ 10-7
pl2 Plotnlmx, x, 0, 10, PlotRange All;
Showlpl1, pl2, PlotRange All
2 4 6 8 10
10
20
30
40
50
60
ü Beispiel: Gaußverteilung mit statistischen Fehlern
gaussdat ReadList"Gauss.dat", Real, Real;
X gaussdatAll, 1;Y gaussdatAll, 2; Y ;
Mathematica_2014_complete.nb 247
pl5 ErrorListPlotTransposeX, Y, ,PlotStyle Red, PointSize0.013
20 40 60 80 100
200
400
600
800
wi 1
2; Gewichte
Clearn0, x0, del
nlresult NonlinearModelFitgaussdat, n0 Exp x x0
del
2
,n0, 1000, x0, 60, del, 50, x,
Weights wi
FittedModel 851.487 ‰-0.00254226á1à2
"EstimatedVariance", "BestFit", "ParameterTable"0.818393, 851.487 0.00254226 49.4886x2,
Estimate Standard Error t Statistic P-Value
n0 851.487 5.45278 156.156 2.55743μ 10-118
x0 49.4886 0.0735273 673.065 8.70761μ 10-180
del 19.8331 0.0736596 269.253 3.25409μ 10-141
"CovarianceMatrix", "CorrelationMatrix"29.7328, 0.00169644, 0.231792,
0.00169644, 0.00540626, 0.0000397405, 0.231792, 0.0000397405, 0.00542574,1., 0.00423127, 0.577101, 0.00423127, 1., 0.00733763, 0.577101, 0.00733763, 1.
MatrixForm "CovarianceMatrix", "CorrelationMatrix"
29.7328 0.00169644 0.231792
0.00169644 0.00540626 0.00003974050.231792 0.0000397405 0.00542574
,1. 0.00423127 0.577101
0.00423127 1. 0.007337630.577101 0.00733763 1.
248 Mathematica_2014_complete.nb
Showpl5, Plotnlresultx, x, 0, 100, PlotRange All
20 40 60 80 100
200
400
600
800
Alle Angaben und Details über den NonlinearModelFit sind wie beim LinearModelFit (siehe Help)
ü Beispiel: Allgemeiner Fit mit Fehlern in x und y
Hierbei werden die Fehler in x sx) nach y zum Fehler in y sy) projiziert:
c2 = i=1
n yi - f xi2
syi2 + f ' xisxi2
Da a priori die Funktion f(x) und damit auch ihre Ableitung f'(x) noch nicht bekannt sind, führt man eine
Iteration durch,
die im Allgemeinen schnell konvergiert.
daten4 1, 0.2, 1.5, 0.5, 2, 0.8, 3.0, 0.5,4, 0.5, 2, 1.0, 6, 1.2, 2.5, 0.5, 7.5, 1.5, 1.5, 0.3;
Xa, Xa, Ya, Ya Transposedaten41, 2, 4, 6, 7.5, 0.2, 0.8, 0.5, 1.2, 1.5, 1.5, 3., 2, 2.5, 1.5, 0.5, 0.5, 1., 0.5, 0.3
datenplot TableXai, Yai,ErrorBarXai, Yai, i, 1, LengthXa
1, 1.5, ErrorBar0.2, 0.5, 2, 3., ErrorBar0.8, 0.5, 4, 2, ErrorBar0.5, 1.,6, 2.5, ErrorBar1.2, 0.5, 7.5, 1.5, ErrorBar1.5, 0.3
Mathematica_2014_complete.nb 249
pldat ErrorListPlotdatenplot, PlotRange 0, 5
0 2 4 6 8
1
2
3
4
5
dataxy TransposeXa, Ya1, 1.5, 2, 3., 4, 2, 6, 2.5, 7.5, 1.5
mx m1, m2, m3, m4, m5 die Steigung der "wahren" Funktion ist erstmal unbekannt
m1, m2, m3, m4, m5
Gewichte :1
Ya2 mx Xa2
ã 0. Iteration
mx 0
Gewichte
0
4., 4., 1., 4., 11.1111
nlm LinearModelFitdataxy, 1, x, x2, x, Weights Gewichte
FittedModel 0.876173+ 1.0577 x- 0.130321 x2
250 Mathematica_2014_complete.nb
nlm"EstimatedVariance", "BestFit", "ParameterTable"1.27205, 0.876173 1.0577 x 0.130321 x2,
Estimate Standard Error t Statistic P-Value
1 0.876173 0.931536 0.940568 0.446214x 1.0577 0.602277 1.75617 0.221142x2 -0.130321 0.0676832 -1.92546 0.194037
fitfunc1x_ nlm"BestFit"0.876173 1.0577 x 0.130321 x2
Showpldat, Plotfitfunc1x, x, 0, 9
0 2 4 6 8
1
2
3
4
5
ã 1. Iteration
mx fitfunc1'XaGewichte jetzt ändern sich die Gewichte 0.797058, 0.536416, 0.015131, 0.506154, 0.897117
3.63092, 2.30333, 0.999943, 1.61573, 0.526082
nlm LinearModelFitdataxy, 1, x, x2, x, Weights Gewichte
FittedModel 0.833421+ 1.01433 x- 0.125448 x2
fitfunc2x_ nlm"BestFit"0.833421 1.01433 x 0.125448 x2
Mathematica_2014_complete.nb 251
Showpldat, Plotfitfunc1x, fitfunc2x, x, 0, 9
0 2 4 6 8
1
2
3
4
5
ã 2. Iteration
mx fitfunc2'XaGewichte jetzt haben sich die
Gewichte nur noch geringfügig geändert 0.763429, 0.512533, 0.0107397, 0.491053, 0.867398
3.65881, 2.39165, 0.999971, 1.67439, 0.560899
nlm LinearModelFitdataxy, 1, x, x2, x, Weights Gewichte
FittedModel 0.82936+ 1.02343 x- 0.12665 x2
fitfunc3x_ nlm"BestFit"0.82936 1.02343 x 0.12665 x2
252 Mathematica_2014_complete.nb
Showpldat,Plotfitfunc1x, fitfunc2x, fitfunc3x, x, 0, 9
0 2 4 6 8
1
2
3
4
5
GraphicsGridShowpldat, Plotfitfunc1x, x, 0, 9,Showpldat, Plotfitfunc1x, fitfunc2x, x, 0, 9,Showpldat, Plotfitfunc1x, fitfunc3x, x, 0, 9,
ImageSize 800
0 2 4 6 8
1
2
3
4
5
0 2 4 6 8
1
2
3
4
5
Die 1. und 2. Iteration sind grafisch nicht mehr zu unterscheiden!
nlm"EstimatedVariance", "BestFit", "ParameterTable"0.981426, 0.82936 1.02343 x 0.12665 x2,
Estimate Standard Error t Statistic P-Value
1 0.82936 1.02596 0.808372 0.503745x 1.02343 0.767239 1.33392 0.313846x2 -0.12665 0.0989389 -1.28008 0.328926
Mathematica_2014_complete.nb 253
ü Beispiel: Fits an 2 Funktionen mit einem gemeinsamen Parametersatz z.B. Real- und Imaginärteil einer komplexen Funktion
ã Pseudo-Daten mit relativen Abweichungen und relativen Fehlern
ax_ : 3 c1 5 c2 x
bx_ : c1 c2 x2
f1x_ : 1
100ax2 bx2
f2x_ : 1
10ax bx
c10 1.0; c20 3.0; 0 0.35;
data1 Tablex, f1x RandomRealNormalDistribution0, 0 Absf1x ,
0 Absf1x . c1 c10, c2 c20,x, .9, .9, 0.2
data2 Tablex, f2x RandomRealNormalDistribution0, 0 Absf2x ,
0 Absf2x . c1 c10, c2 c20,x, .9, .9, 0.2
0.9, 1.19061, 0.370893, 0.7, 0.667032, 0.263015,0.5, 0.198199, 0.157743, 0.3, 0.0496677, 0.0583871,0.1, 0.0237638, 0.0625208, 0.1, 0.0330805, 0.161118, 0.3, 0.910598, 0.263741,0.5, 1.11724, 0.367604, 0.7, 2.8655, 0.472786, 0.9, 3.11345, 0.579665
0.9, 1.8026, 0.428875, 0.7, 0.265238, 0.207801,0.5, 0.117014, 0.117394, 0.3, 0.272311, 0.115818,0.1, 0.185725, 0.133506, 0.1, 0.593223, 0.231239, 0.3, 0.563615, 0.258976,0.5, 0.566381, 0.179322, 0.7, 0.177899, 0.278794, 0.9, 1.88175, 0.537623
GraphicsRowErrorListPlotdata1, ErrorListPlotdata2, ImageSize 600
-0.5 0.5
1
2
3
-0.5 0.5
-2
-1
1
2
254 Mathematica_2014_complete.nb
gemeinsame Fitfunktion durch ERweiterung um einen zusätzlichen Parameter
x1, y1, 1 Transposedata1;x2, y2, 2 Transposedata2;
dataxy
JoinTranspose0 x1 1, x1, y1, Transpose0x2 2, x2, y21, 0.9, 1.19061, 1, 0.7, 0.667032, 1, 0.5, 0.198199, 1, 0.3, 0.0496677,1, 0.1, 0.0237638, 1, 0.1, 0.0330805, 1, 0.3, 0.910598, 1, 0.5, 1.11724,1, 0.7, 2.8655, 1, 0.9, 3.11345, 2, 0.9, 1.8026, 2, 0.7, 0.265238,2, 0.5, 0.117014, 2, 0.3, 0.272311, 2, 0.1, 0.185725, 2, 0.1, 0.593223,2, 0.3, 0.563615, 2, 0.5, 0.566381, 2, 0.7, 0.177899, 2, 0.9, 1.88175
wghts 1 Join1, 22
7.26949, 14.4557, 40.1884, 293.337, 255.83, 38.5225, 14.3763, 7.40013, 4.47374, 2.97609,5.43674, 23.1582, 72.5624, 74.5504, 56.1049, 18.7016, 14.9101, 31.0982, 12.8657, 3.45974
fitfunck_, x_ :f1x k 1f2x k 20 True
fitfunck_, x_ :
Piecewisef1x, k 1, f2x, k 2, 0, True
fitfunc1, x1
1003 c1 5 c2 x2 c1 c2 x22
fitfunc2, x1
103 c1 5 c2 x c1 c2 x2
fitfunc3, x0
ã Nichtlinearer Fit mit dem gemeinsamen Datensatz
nlm NonlinearModelFitdataxy, fitfunck, x,c1, 0, c2, 1, k, x, Weights wghts;
nlm"EstimatedVariance"0.930352
nlm"BestFitParameters"c1 1.17968, c2 3.13994
Mathematica_2014_complete.nb 255
bestfk_, x_ nlm"BestFit"1
1003.53905 15.6997 x2 1.17968 3.13994 x22 k 1
1
103.53905 15.6997 x 1.17968 3.13994 x2 k 2
0 True
nlm"ParameterTable"
Estimate Standard Error t Statistic P-Value
c1 1.17968 0.0762907 15.463 7.74258μ 10-12
c2 3.13994 0.125879 24.9441 2.06258μ 10-15
nlm"CorrelationMatrix" MatrixForm1. 0.433266
0.433266 1.
GraphicsRowShowPlotbestf1, x, x, 1, 1, ErrorListPlotdata1,ShowPlotbestf2, x, x, 1, 1,ErrorListPlotdata2, ImageSize 600
-1.0 -0.5 0.5 1.0
0.51.01.52.02.53.03.5
-1.0 -0.5 0.5
-1
1
2
nlm"StandardizedResiduals" ListPlot, Filling Axis &
256 Mathematica_2014_complete.nb
6.7. Interpolation
ü Polynominterpolation
Beispiel: Temperaturverlauf
Interpolation aus 5 Elementen der ursprünglichen Liste:
Die beiden Funktionen Part([[...]]) und Take[...] sind dafür am besten geeignet:
tempdat
0., 22., 2., 21., 4., 20., 6., 19., 8., 20., 10., 23.,12., 27., 14., 31., 16., 33., 18., 32., 20., 29., 22., 26., 24., 24.
tempdat1 tempdat1, 4, 7, 10, 130., 22., 6., 19., 12., 27., 18., 32., 24., 24.
tempdat1 tempdat1 ;; 13 ;; 30., 22., 6., 19., 12., 27., 18., 32., 24., 24.
tempdat1 Taketempdat, 1, 13, 30., 22., 6., 19., 12., 27., 18., 32., 24., 24.
ListPlottempdat1, PlotRange 16, 35, AxesOrigin 0, 18
5 10 15 20
20
25
30
35
ipol1 InterpolatingPolynomialtempdat1, x24. 24. x 0.0833333 0.0277778 0.0100309 0.000128601 6. x 12. x 0. x
Expand22. 2.36111 x 0.398148 x2 0.0154321 x3 0.000128601 x4
Mathematica_2014_complete.nb 257
ShowListPlottempdat1, PlotRange 15, 35,Plotipol1, x, 0, 24
0 5 10 15 20
20
25
30
35
ü Stückweise stetige Interpolation mit Interpolation[data]
ifunc Interpolationtempdat1InterpolatingFunction0., 24.,
ShowListPlottempdat1, PlotRange 15, 35,Plotipol1, ifuncx, x, 0, 24
0 5 10 15 20
20
25
30
35
Lineare Interpolation
mit der Option: InterpolationOrder Ø 1
ifunc1 Interpolationtempdat1, InterpolationOrder 1InterpolatingFunction0., 24.,
258 Mathematica_2014_complete.nb
ShowListPlottempdat1, PlotRange 15, 35,Plotipol1, ifunc1x, x, 0, 24
0 5 10 15 20
20
25
30
35
ã 1. und 2. Ableitungen der stückweise stetigen Interpolationsfunktion
Plotifunc'x, ifunc''x, x, 0, 24
5 10 15 20
-3
-2
-1
1
normalerweise ist der Interpolationsgrad von 3. Ordnung (kubische Polynome)
man kann jedoch auch andere Ordnungen vorgeben, z.B. lineare Interpolation!
ü Interpolation mit Splines
Needs"Splines`"
spl1 SplineFittempdat1, CubicSplineFunctionCubic, 0., 4.,
Die Spline-Interpolation im Package: SplineFit erzeugt eine Parameterdarstellung {x(t), y(t)},
also keine Funktion y(x)!
Mathematica_2014_complete.nb 259
ShowListPlottempdat, PlotRange 15, 35,ParametricPlotspl1t, t, 0, 4
0 5 10 15 20
20
25
30
35
Vergleich der verschiedenen Interpolationsarten (Spline ist am besten!):
ShowListPlottempdat, PlotRange 15, 35,Plotipol1, ifunc1x, x, 0, 24, PlotStyle Blue, Green,ParametricPlotspl1t, t, 0, 4, PlotStyle Red
0 5 10 15 20
20
25
30
35
ü Interpolation mit einem Polynom 10. Ordnung
Beispiel einer Resonanzkurve
data1 Tablex, 1
1 x2, x, 5, 5, 1
5, 1
26, 4, 1
17, 3, 1
10, 2, 1
5,
1, 1
2, 0, 1, 1, 1
2, 2, 1
5, 3, 1
10, 4, 1
17, 5, 1
26
260 Mathematica_2014_complete.nb
ListPlotdata1, AxesOrigin 6, 0
-4 -2 0 2 4
0.2
0.4
0.6
0.8
1.0
ipol InterpolatingPolynomialdata1, x Expand
1 149 x2
2212181 x4
11 05083 x6
3400
7 x8
5525
x10
44 200
ShowListPlotdata1,AxesOrigin 5, 0, Frame True, AspectRatio 1.2,
PlotRange 0.3, 1.3, Plotipol, x, 5, 5
-4 -2 0 2 4
0.0
0.5
1.0
Mathematica_2014_complete.nb 261
ü stückweise stetige Interpolation mit kubischen Polynomen (keine Splines)
ifunc3 Interpolationdata1InterpolatingFunction5, 5,
ShowListPlotdata1, Frame True,
AxesOrigin 5, 0, AspectRatio 1.0,
PlotRange 0, 1.1, Plotifunc3x, x, 5, 5
-4 -2 0 2 40.0
0.2
0.4
0.6
0.8
1.0
262 Mathematica_2014_complete.nb
ã Ableitungen der Interpolationsfunktion
ShowListPlotdata1, Frame True, AspectRatio 1.2,PlotTooltipifunc3x, "InterpolationsFunktion",
Tooltipifunc3'x, "1. Ableitung",Tooltipifunc3''x, "2. Ableitung",
x, 5, 5, PlotRange All
-4 -2 0 2 4-1.0
-0.5
0.0
0.5
1.0
Hier hat die InterpolatingFunction nicht einmal eine stetige 1. Ableitung!
Die beste Interpolation liefern in diesem Falle wieder die Splines
mit einer stetigen und glatten 1. Ableitung (siehe Übungsaufgabe).
ü neu ab Vers. 7 : Method->Spline
ifunc3 Interpolationdata1, Method SplineInterpolatingFunction5, 5,
Mathematica_2014_complete.nb 263
ShowListPlotdata1, Frame True,
AxesOrigin 5, 0, AspectRatio 1.0,
PlotRange 0, 1.1, Plotifunc3x, x, 5, 5
-4 -2 0 2 40.0
0.2
0.4
0.6
0.8
1.0
ShowListPlotdata1, Frame True, AspectRatio 1.2,PlotTooltipifunc3x, "InterpolationsFunktion",
Tooltipifunc3'x, "1. Ableitung",x, 5, 5, PlotRange All
-4 -2 0 2 4
-0.5
0.0
0.5
1.0
264 Mathematica_2014_complete.nb
ShowListPlotdata1, Frame True, AspectRatio 1.2,PlotTooltipifunc3x, "InterpolationsFunktion",
Tooltipifunc3'x, "1. Ableitung",Tooltipifunc3''x, "2. Ableitung",
x, 5, 5, PlotRange All
-4 -2 0 2 4
-1.0
-0.5
0.0
0.5
1.0
mit der Spline-Methode ist auch die 1. Ableitung stetig und glatt
ü mehrdimensionale Interpolation
f0W_, th_ : 5.0 Costh ° W 1000
f2W_, th_ : f0W, th
bei ListInterpolation werden das Feld und das zugehörige Gitter getrennt angegeben
fint2 ListInterpolationTablef2W, th,W, 1100, 1200, 10, th, 0, 180, 10, 1100, 1200, 0, 180
InterpolatingFunction1100., 1200., 0., 180.,
bei Interpolation werden die Daten mit der Struktur: x1, y1, ..., f1, x2, y2, ..., f2, ...eingegeben
daher ist bei Verwendung einer mehrdimensionalen Tabelle ein Flatten-Befehl notwendig
Mathematica_2014_complete.nb 265
tab1
TableW, th, f2W, th, W, 1100, 1200, 50, th, 0, 180, 901100, 0, 0.06, 1100, 90, 0.05, 1100, 180, 0.04,1150, 0, 0.04, 1150, 90, 0.0333333, 1150, 180, 0.0266667,1200, 0, 0.03, 1200, 90, 0.025, 1200, 180, 0.02
tab2 TableW, th, f2W, th,W, 1100, 1200, 50, th, 0, 180, 90 Flatten, 1 &
1100, 0, 0.06, 1100, 90, 0.05, 1100, 180, 0.04,1150, 0, 0.04, 1150, 90, 0.0333333, 1150, 180, 0.0266667,1200, 0, 0.03, 1200, 90, 0.025, 1200, 180, 0.02
fint2a InterpolationTableW, th, f2W, th,W, 1100, 1200, 10, th, 0, 180, 10 Flatten, 1 &
InterpolatingFunction1100., 1200., 0., 180.,
die Interpolation ergibt bei beiden Funktionen die selben Ergebnisse
f21120, 90, fint21120, 90, fint21120, 900.0416667, 0.0416667, 0.0416667
ManipulateGraphicsGridPlotf2w, th, fint2w, th, fint2w, th, th, 0, 180,
PlotAbsf2w, th fint2w, th, th, 0, 180,PlotAbsf2w, th fint2aw, th, th, 0, 180,
ImageSize 600, w, 1150, 1120, 1200, Appearance "Labeled",
ImageSize Large, SaveDefinitions True
w 1150
50 100 150
0.030
0.032
0.034
0.036
0.038
0.040
50 100 150
5.μ10-8
1.μ10-7
1.5μ10-7
2.μ10-7
2.5μ10-7
50 100
5.μ10-8
1.μ10-7
1.5μ10-7
2.μ10-7
2.5μ10-7
ü mehrdimensionale Interpolation mit Parametern
f3W_, th_, a_, b_ :a 5.0 Costh ° W 1000.0 b 2.0 Sinth ° W 1000.02
266 Mathematica_2014_complete.nb
fint3 ListInterpolationTablef3W, th, a, b,W, 1100, 1200, 10, th, 0, 180, 10, 1100, 1200, 0, 180
InterpolatingFunction1100., 1200., 0., 180.,
f31180, 90, a, b Nfint31180, 90 Simplify0.0277778 a 0.0000925926 b
0.0277778 a 0.0000925926 b
f31185, 90, a, b Nfint31185, 90 Simplify0.027027 a 0.0000876552 b
0.0270269 a 0.0000876531 b
f31185, 93, a, b Nfint31185, 93 Simplify0.0267441 a 0.0000876152 b
0.026744 a 0.0000876125 b
6.8. Diskrete Approximation
ü Padé-Approximation
Die Padé-Approximation ist eine Entwicklung nach gebrochen-rationalen Funktionen p(x)/q(x).
Besonders deutlich ist der Vorteil gegenüber einer Taylorreihe bei Funktionen mit Polen. Im folgen-
den Beispiel wird der Tangens um x=0 mit einer Padé-Approximanten der Ordnung n=2 im Zähler
und m=4 im Nenner an
pad PadeApproximantTanx, x, 0, 2, 4x
1 x2
3
x4
45
Fq2_ : M2
M2 q2 1
q2M
Log q2
M2
SetDelayed::write : Tag List in mx££t, m y££t, m z££tq2_ is Protected.à$Failed
Mathematica_2014_complete.nb 267
PadeApproximantFq2, q2, q2p, 0, 1m xt, m yt, m ztq2p1
q2q2p m xt,m yt,m ztq2pm xt,m yt,m ztq2p
Im Vergleich dazu die Taylorreihe bis zur Ordnung n=8:
SeriesTanx, x, 0, 8
x x3
32 x5
1517 x7
315 Ox9
taylor Normal
x x3
32 x5
1517 x7
315
Die Padé-Aproximation [2,4] ist bis zur Ordnung n+m=2+4=6 mit der Taylorreihe identisch:
Seriespad, x, 0, 8
x x3
32 x5
157 x7
135 Ox9
Der Vergleich zeigt ganz deutlich den Vorteil der Padé-Approx. am Pol:
PlotTanx, taylor, pad, x, 0, 2 , PlotStyle
Black, Thickness0.001, Blue, Red, Thickness0.001
1 2 3 4 5 6
-200
-100
100
200
300
400
Approximation einer endlichen Funktion, z.B. Cosinus
pad1 PadeApproximantCosx, x, 0, 2, 21
5 x2
12
1 x2
12
268 Mathematica_2014_complete.nb
tay1 NormalSeriesCosx, x, 0, 4
1 x2
2x4
24
PlotCosx, tay1, pad1, x, 0, ,PlotStyle Black, Blue, Red, PlotRange 1.5, 1.5
0.5 1.0 1.5 2.0 2.5 3.0
-1.5
-1.0
-0.5
0.5
1.0
1.5
Eine deutliche Verbesserung erzielt man bei einer Entwicklung um einen Punkt in der Mitte des
betrachteten Intervalls:
pad2 PadeApproximantCosx, x,
2, 2, 2
2 x
1 1
6
2 x2
tay2 NormalSeriesCosx, x,
2, 4
2 x
1
6
2 x
3
Die folgende Funktion ökonomisiert die Padé-Approximation, indem sie die hohe Genauigkeit im
Zentrum zugunsten einer deutlichen Verbesserung an den Rändern opfert:
Needs"FunctionApproximations`"
eco EconomizedRationalApproximationCosx, x, 0, , 2, 2
2 x
7
2402
2 x 7 4
2x
46080
1 7 2
240
1
6
2 x2
Mathematica_2014_complete.nb 269
PlotCosx, tay2, pad2, eco, x, 0, ,PlotStyle Black, Blue, Red, Purple, PlotRange 1.5, 1.5
0.5 1.0 1.5 2.0 2.5 3.0
-1.5
-1.0
-0.5
0.5
1.0
1.5
Die Güte der Approximation lässt sich nur noch in der Darstellung des Fehlers erkennen
PlotCosx tay2, Cosx pad2, Cosx eco, x, 0, ,PlotStyle Blue, Red, Purple, Thickness0.005,Frame True, PlotRange 0.05, 0.05
0.0 0.5 1.0 1.5 2.0 2.5 3.0
-0.04
-0.02
0.00
0.02
0.04
ü Numerische Aproximation
Die Funktion RationalInterpolation[...] arbeitet ähnlich wie die Funktion EconomizedRationalAp-
proximation[...], jedoch mit einem numerischen Algorithmus. Daher sind die Koeffizienten der
gebrochen-rationalen Funktion auch nicht exakt, sondern in Maschinengenauigkeit gegeben:
ri1 RationalInterpolationCosx, x, 2, 2, x, 0, 1.00915 0.642447 x 9.949191017 x2
1 0.498596 x 0.158708 x2
Die Fehler der beiden Methoden sind im Mittel etwa gleich:
270 Mathematica_2014_complete.nb
PlotCosx eco, Cosx ri1,x, 0, , PlotStyle Purple, Brown
0.5 1.0 1.5 2.0 2.5 3.0
-0.015
-0.010
-0.005
0.005
0.010
0.015
Mit Hilfe der Funktion MiniMaxApproximation[...] wird der relative Fehler optmiert, indem die
Interpolationspunkte variiert werden:
MiniMaxApproximationCosx, x, 0, 3.2, 2, 2MiniMaxApproximation::extalt :
The extrema of the error do not alternate in sign. It may be that MiniMaxApproximation has lost track of the
extrema by going too fast. If so try increasing the values in the option Brake. It may
be that the WorkingPrecision is insufficient. Otherwise there is an extra extreme
value of the error, and MiniMaxApproximation cannot deal with this problem.à
0., 0.34276, 1.79417, 1.79417, 2.85973, 3.2, 1.0099 0.660848 x 0.0118379 x2
1. 0.508126 x 0.156399 x2,
0.00990048, 0.0129834, 0.0501346, 0.0501346, 0.0128681, 0.00999542
Diese Funktion ist numerisch jedoch etwas kritisch, z.B. sollten Nullstellen im Intervall
herausgenommen werden und auch die Intervallgrenzen und der Grad der Näherung sollten ggf.
variiert werden.
MiniMaxApproximationCosxx
2
, x, 0, 3.2, 2, 3
0., 0.20063, 0.778979, 1.60412, 2.42726, 3.00149, 3.2,
0.636531 0.311754 x 0.0987459 x2
1 0.15025 x 0.0474581 x2 0.000356391 x3, 0.000138709
Das Ergebnis ist eine Liste:
1. Element: Interpolationspunkte
2. Element: Interpolationsfunktion
3. Element: maximaler Fehler im betrachteten Intervall
Die Funktion erhält man daher als 1. Unterelement im 2. Element:
mma 2, 1 x
2;
Mathematica_2014_complete.nb 271