Einführung in Mathematica

Literatur and Links :

Hyperlink["Wolfram References","http://reference.wolfram.com/mathematica/guide/Mathematica.html"]

Hyperlink["B.Baltes-Götz: Einführung in Mathematica 5.0 Skript URZ-Trier","http://www.uni-trier.de/urt/user/baltes/docs/mathe/v5/mathe5.pdf"]

Hyperlink["James M. Feagin - Quantum Methods with Mathematica", "http://www.amazon.de/gp/product/0387953655/ref=dp_proddesc_1?ie=UTF8&n=52044011"]

Hyperlink["Strnadl - Symbolische Mathematik in der Theoretischen Physik", "http://www.qudev.ethz.ch/phys4/mathematica-fs09/mathematica_strnadl.pdf"]

Funktionalität:

Vielseitiges Frontend zur Eingabe, Programmierung, Dokumentation, Präsentation

Tips zur Verwendung

Befehle können durch Drücken von Shift - Enter in einer Program - Zelle ausgeführt werden.

3+4

Integrate[(x^2),x]

Esc - Taste zur Eingabe von Symoblen, z.b. Esc - p - Esc ergib π

π

Esc-int-Esc ergibt ∫ und Esc-dd-Esc ergibt d

∫(x^2)\[DifferentialD]x

Alt-<Zahl> mit Auswahl auf rechten Rand der Zelle wandelt Aussehen der Zellen in Dokumentation oder ausführbaren Code um.

f[x]

Die Hilfefunktion ist wie üblich über F1 aufrufbar.

Plus
Integrate
Sum
Series

Symbolische Programmierung

Variablendeklaration

myvar=5

myvar

Durch anfügen eines Strichpunkts wird das Ausgabeecho unterdrückt.

myvar2=23;

Variablen können wie üblich addiert, subtrahiert, dividiert, ... werden

myvar2+myvar

myvar2/myvar

% bezeichnet das Resultat der letzten Ausgabe:

myvar +myvar2/3
%+3

Listen

mylist={1,2,45,5,3}

myvarlist={x1,x2,x3,x4}

mystringlist={"Das","ist","eine","Liste","aus","Zeichenketten"}

mygraphicslist={Graphics3D[{Green,Cuboid[]}],Graphics[{Pink,Rectangle[]}],Graphics[{Blue,Disk[]}]}

primeList=Table[Prime[n],{n,1,200}]

doubleslist=Table[{x,(x^2)},{x,0,10}]

Viele Funktionen können unmittelbar auf eine Liste angewendet werden und werden dann auf für jedes Listenelement ausgeführt.

mylist
mylist+3
mylist/20
mylist^2

Listen können wieder Listen enthalten :

mysublist={1,2,{91,32},{3,2,{3,2}}}

mysublist2={{1,mylist},{2,mygraphicslist}}

Zugriff auf einzelne Listenelemente mit [[<index>]] (oder zur besseren Übersichtlichkeit mit Esc-[[-Esc: [[]])

mysublist2[[2]]

mysublist2[[2,2]]

mysublist2[[2,2,1]]

mysublist2[[1,5]]

Header eines Ausdrucks (Expression) :

mysublist[[0]]

FullForm[mysublist]

Funktionen

Funktionen werden durch einen Namen und eine beliebige Anzahl von Parametern in eckigen Klammern gefogt von "=" definiert.

f[x_]=x^2;

f[10]

{f[1],f[2],f[3],f[4]}
Table[f[i],{i,1,4}]

g[x_, y_] = x + y;
g[3, 1]

g[{3, 1}]

wird erst nach Definition erkannt:

g[{x_,y_}]=x+y;

g[{3,1}]

Intern wird eine Datenbank mit allen Zuweisungen verwaltet und sequentiell bei Aufruf einer Funktion abgefragt.

f[x]=x+3;
f[3]=3;

Das kann gelegentlich zu unerwarteten Ergebnissen führen.

{f[1],f[2],f[3],f[4]}

{f [x],f[y]}

Abrufen der Zuweisungstabelle über ? (kurze Form) und ?? (lange Form):

?f

?Sin

??Sin

Kurzformen von Befehlen (Symbolische Notation) :

?f ist äquivalent zu Information[f]

Information[f]

(Sqrt[mylist])
Sqrt[mylist]

Unmittelbare (=) i. G. zu verzögerte (:=)Zuweisung:

Die Auswertung einer Funktion erfolgt entweder sofort beim Auswerten der Zelle, oder es wird nur die Zuweisung gespeichert und die Auswertung erfogt erst bei Aufruf der Funktion.

(* Unmittelbare Zuweisung - Immediate assignment *)
myrand1[x_]=x Random[];

(* Verzögerte Zuweisung Delayed assignment *)
myrand2[x_]:=x Random[];

Table[myrand1[3],{x,1,10}]
Table[myrand2[3],{x,1,10}]

{ListPlot[Table[myrand1[3],{x,1,20}]],ListPlot[Table[myrand2[3],{x,1,30}]]}

Löschen von Zuweisungen :

Clear[f]

?f

Remove[f]
?f

verschiedene Notationen :

Sqrt[3]

Präfixnotation :

Sqrt@3

Postfixnotation :

3//Sqrt

Infixnotation für Argumente mit 2 Parametern:

3~g~4
g[3,4]

Ersetzungsregeln

{x,x^2,x^4,2,y}/.{x->2}

myvarlist
myvarlist/.{x1->3}

myvarlist/.{x1->x2}

Liste von Regeln

myrulelist={x1->x2,x2->x3,x3->1};

myvarlist/.myrulelist

Wiederholtes Ersetzen :

myvarlist//.myrulelist

Liste selbst bleibt unverändert :

myvarlist

Verzögertes Ersetzen :

{x1,x2,x1}/.{x1->RandomReal[]}
{x1,x2,x1}/.{x1:>RandomReal[]}

Beispiel :

(* Laden des Packages ' PhysicalConstants' mit Definitionen von den wichtigsten Naturkonstanten *)
<< PhysicalConstants`

SpeedOfLight

boltzmannfaktor[ω_,T_]=Exp[-((ℏ ω)/(kb T))];

boltzmannfaktor[3, 300]

boltzmannfaktor[3 (10^13)/Second,300 Kelvin]/.{ kb -> BoltzmannConstant,ℏ->PlanckConstant/(2π)}

Vielzahl integrierter mathematischer Funktionen, Algorithmen

z.B. für 
Matrizenrechnung/Lineare Algebra
Gleichungssystemen
Analysis
Optimierungsaufgaben
Statistik
 ...

Algebra

Listen stellen Vektoren und Matrizen beliebiger Dimension dar.

vec={1,3,5}
mat={{1,0,1},{2,3,3},{1,9,3}}

Bessere Darstellung:

MatrixForm[vec]
MatrixForm[mat]

Matrizen- und Vectoroperationen:

Dot[] oder .

Dot[vec,vec]//MatrixForm
vec.vec

mat.mat//MatrixForm
mat *mat//MatrixForm
mat.vec//MatrixForm
mat*vec//MatrixForm

Achtung:

vec1={2,4,1}//MatrixForm
mat.vec1

funktioniert nicht da

vec1//FullForm

weitere Befehle:

Norm[vec]
MatrixPower[mat,3]
Inverse[mat]
Transpose[mat]
Eigenvalues[mat]//N

Analysis :

Differentialrechnung

f[x_]=x^2;

D[f[x],x]
D[f[x],{x,2}]

D[g[x,y],x,y]

h[x_,y_]:=x^3+y^2+3x y
D[h[x,y],x,y]

Integralrechnung

Unbestimmte Integrale :

∫f[x]\[DifferentialD]x

Integrate[1/(x^3+1),x]
%/.x->3

Bestimmte Integrale

Integrate[f[x],{x,0,3}]

Symbolische Form: Eingabe mit Esc - int - Esc, Esc - dd - Esc und Ctrl - _ bzw. Ctrl - % für die Integrationsgrenzen

(∫_0^3)1/(x^3+1)\[DifferentialD]x

Symbolische vs. Numerische Berechnung

(∫_0^3)1/(x^3+1)\[DifferentialD]x
N[(∫_0^3)1/(x^3+1)\[DifferentialD]x]

Numerische Berechnungen sind im allgemeinen schneller als symbolische, jedoch natürlich nicht mehr exakt.

NIntegrate[x/(((x^3+1))^3),{x,0,3}]//Timing
Integrate[x/(((x^3+1))^3),{x,0,3}]//Timing
%//N

Visualisierung und Graphik

Plots  analytischer Funktionen:

Beispiel photoelektrischer Effekt :

hb=PlanckConstant/Joule /Second;
ec=ElectronCharge/Coulomb;

(* max kinetische Energie der Elektonen - W in Elektronvolt *)
Clear[ekinmax]
ekinmax[ν_,W_]:=(hb ν/ec-W )/;(hb ν/ec >W )
ekinmax[ν_,W_]:=0

Plot[ekinmax[ν (10^12),2.46],{ν,0,2000}]

Etwas verschönern:

(* für Lithium W=2.46 eV*)
aplot=Plot[ekinmax[ν (10^12),2.46],{ν,0,2000},PlotRange->{-2.5,4},BaseStyle->{FontFamily->"Arial",FontSize->12},Frame->True,FrameLabel->{"ν [(10^12)Hz]","(Subscript[E, kin, max]) [eV]"}]

Beispiel Compton - Effekt :

me=ElectronMass/Kilogram;
c=SpeedOfLight/Meter Second;

Dlambda[ϕ_]:=(hb/(me c))(1-Cos[ϕ])

Plot[Dlambda[ϕ/180 π]/(10^(-10)),{ϕ,0,360},BaseStyle->{FontFamily->"Arial",FontSize->12},Frame->True,FrameLabel->{"ϕ [°]","λ [Å]"}]

3 D Plot - Beispiel Planckes Strahlungsgesetz mit Energiedichte

kb=BoltzmannConstant/Joule Kelvin;

planck[ω_,T_]:=(((ω^3) ℏ)/((c^3) (-1+(E^((ω ℏ)/(kb T)))) (π^2)))/.ℏ->hb/(2π)

Plot3D[planck[ω (10^12),T ](10^9),{ω,0,10 (10^2)},{T,0,1000},PlotRange->All,ColorFunction->"ThermometerColors",AxesLabel->{"ω [\!\(\*SuperscriptBox[\(10\), \(\(12\)\(\\ \)\)]\)rad/s]","T [K]","u [\!\(\*FractionBox[\(J\\ s\), \(mrad\\ \*SuperscriptBox[\(cm\), \(3\)]\)]\)]"},BaseStyle->{FontSize->12,FontFamily->"Arial"}]

Visualisierung von Listen :

ListPlot[primeList,Frame->True,FrameLabel->{"nr","prime"},BaseStyle->{FontSize->12,FontFamily->"Arial"}]

Beispiel photoelektrischer Effekt:

(* für Lithium W=2.46 eV*)
lidata=Table[{i,ekinmax[i*(10^12),2.46 ]+RandomReal[0.1]},{i,0,1000,20}]

lplot=ListPlot[lidata,Frame->True,FrameLabel->{"ν [(10^12) Hz]","(Subscript[E, kin, max]) [eV]"},PlotRange->{-2.5,2},BaseStyle->{FontSize->12,FontFamily->"Arial"}]

Kombinieren von Graphen :

ekinmax2[ν_,W_]:=(hb ν/ec-W )

Plot[ekinmax2[ν (10^12),2.46],{ν,0,1000}]
Show[aplot,lplot,%]

Datenmanipulation

COBE MicrowaveBackground - Ein perfekter Schwarzer Körper

importfile=NotebookDirectory[]<>"cmb.txt";
cobedata=Import[importfile,"Data"];

cobedata

cobetemperature=cobedata[[All,{1,2}]];
cobetemperaturefreq={100c#[[1]] (10^(-9)),#[[2]]}&/@cobetemperature;
datapointplot=ListPlot[cobetemperaturefreq,PlotRange->All,Frame->True,FrameLabel->{"ν [GHz]","u(ν) [MJy (st^(-1))]"},BaseStyle->{FontFamily->"Arial",FontSize->12}]

Zugriff zu Datenbanken mit Daten zu Elementen, Isotopen, Wetter, Astronomische Daten, Genome, ..

ElementData[1,"AtomicWeight"]

meltingpoints=Table[Tooltip[ElementData[i,"MeltingPoint"],ElementData[i]],{i,1,103}]

ListPlot[meltingpoints]

Wetterdaten :

today=DateList[][[{1,2,3}]]

DateListPlot[WeatherData["LSZH","Temperature",today],Joined->True]

Dynamische Interaktivität im Frontend

Manipulate[
Plot[planck[ω (10^12),T ](10^9),{ω,0,10 (10^2)},PlotRange->All,ColorFunction->"ThermometerColors",FrameLabel->{"ω [\!\(\*SuperscriptBox[\(10\), \(\(12\)\(\\ \)\)]\)rad/s]","u "},BaseStyle->{FontSize->12,FontFamily->"Arial"},Frame->True,PlotPoints->40,FrameTicks->{Automatic,None}],{T,10,1000}]

Schnittstellen zu externen Programmen (C, .Net, Java, ...)