Mathematica

Einleitung

Was ist Mathematica:
(i) Nummerisches und symbolisches Rechenprogramm
(ii) Datenvisualisierungsprogramm
(iii) höhere Programiersprache, etc.

Struktur:
(1) Kernel
(2) Front end (notebook)

Hilfe:
Help-window (Tour)
News group und web sites
http://www.wolfram.com
http://www.mathsource.com
comp.soft-sys.math.mathematica
http://www.mathematica.ch
Bücher (Wolframs Buch ist über das Help Menü zugänglich)
http://store.wolfram.com/catalog/books/              zum Beispiel:
	An Introduction to Programming with Mathematica
	 by Richard J. Gaylord, Samuel N. Kamin, and Paul R. Wellin
	Programming in Mathematica by  Roman Maeder
	 Introduction to Scientific Programming: Computational Problem Solving Using Mathematica and C
	 by Joseph L. Zachary
Starten des Kernel: (shift-return oder Enter)

1+1

Einige einfache Befehle

=  Definition      					Beispiel: In[1]:= 3	
										In[2]:= f = 3	
:= verzögerte Definition  
==   ist gleich 
=!=  ist ungleich
(* ... *)  zwischen diesen Klammern kann man man Komentare setzen
+  Addition
-  Subtraktion
*  Multiplikation (kann weggelassen werden) Beispiel: 2 x = x + x
   Achtung:  x2  ist der Name der Variablen  x2, und nicht   2 x  !!!
             2x  ist 2*x
/  Division                           Beispiel:  a/b
^  Exponentiation                     Beispiel:  x^2  = x*x
%  vorheriger output
%% vorvorheriger output
%4 output von Out[4]
;  Unterdrückung von output
I  = Sqrt[-1] = imaginäre Einheit
Pi = 3.14159...   
(  )  runde Klammern um Terme anzuordnen
								Beispiel: (a + b)(a - b)
[  ]  eckige Klammern für Argumente in Funktionen		
								Beispiel: f[x], Sin[x], h[x,y]
{  }  geschwungene Klammern für Listen   			
								Beispiel: {a,b,c}, {x,0,2Pi}
Clear["@"]

2x

%/. x->2

Mathematica als Taschenrechner

1/2 + 1/3

%

f = %

f

%4

2^1000

(2/5)^5+((((2/5)))^5)

0.2^5

N[%9]

N[%9, 20]

%9 //N

%

%7 + %8

f = x

f^2 + 2f

f = Pi

1.1 f

N[Pi]

Cos[Pi/6]

Cos[Pi/8]

N[%, 25]

Cos[%]

Exp[I Pi/4]

N[%]

(1 + I)/Sqrt[2]

%^4

N[%%]

2 π + Pi

N[%,100]

f=%;

f

(E^2)

InputForm[%]

Einige einfache symbolische Rechnungen

f = (a + b) (a - b)

g = Expand[f]

Factor[g]

g/(a - b)

Factor[%]

g = (a^3 - b^3)/(a - b)

Simplify[g]

Factor[g]

g = (a^7 - b^7)/(a - b)

Simplify[g]

Factor[g]

Vor ca. 100 Jahren wurde durch folgendes Beispiel widerlegt, dass bei der Zerlegung von (a^n-b^n) nur 
Einsen als Koeffizienten in den Faktoren auftreten können

Factor[(a^105)-(b^105)]

h = g /. b -> 3

g

x = 3

f = (x + a)^2

Clear[x];  f = (x + a)^2

Expand[f]

Übung:

(1)	Man dividiere  x^9 - a^9   durch   x - a;  und stelle das Ergebnis als Polynom dar.

(2)	Man zerlege f = 24 - 14 x - 13 x^2 + 2 x^3 + x^4   in Faktoren und bringe das Resultat anschliessend
	auf die ursprüngliche Form

(3)	Man berechne den Binomialkoeffizienten direkt	(({{12}, {n}}))
	oder mittels der Entwicklung von (x + y)^12.

Graphik

Einfache Plots

Plot[x^3 - x + 1, {x,-2,2}]

ParametricPlot[ {Cos[t]^2,Sin[t]^3}, {t,0,2Pi}]

Plot3D[ Sin[x y], {x,-2,2}, {y,-2,2}]

ParametricPlot3D[{2 Cos[t] Cos[p],3 Cos[t] Sin[p],4 Sin[t]},{t,0,π},{p,0,2 π}]

Show[%,ViewPoint->{1,.5,-3}]

3-Soliton Lösung

m=(({{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}))+(({{(1/2)E^(-2x +8t), (1/3)E^(-3x +36t), (1/4)E^(-4x +112t)}, {(1/3)E^(-3x +36t), (1/4)E^(-4x +64t), (1/5)E^(-5x +140t)}, {(1/4)E^(-4x +112t), (1/5)E^(-5x +140t), (1/6)E^(-6x +216t)}}));

w3=- 2 D [Log[Det[m]],{x,2}];

Simplify[w3]

w[x_,t_]:=-(576 (E^(8 t+2 x)) ((E^(560 t))+12960000 (E^(20 x))+6480000 (E^(16 (4 t+x)))+38880000 (E^(16 (13 t+x)))+907200 (E^(10 (28 t+x)))+15000 (E^(8 (36 t+x)))+97200 (E^(8 (42 t+x)))+90000 (E^(8 (54 t+x)))+75 (E^(4 (88 t+x)))+50 (E^(504 t+2 x))+1800 (E^(496 t+4 x))+4800 (E^(344 t+6 x))+28800 (E^(488 t+6 x))+90000 (E^(128 t+12 x))+2430000 (E^(224 t+12 x))+2160000 (E^(272 t+12 x))+720000 (E^(72 t+14 x))+17280000 (E^(216 t+14 x))+25920000 (E^(56 t+18 x))))/((((E^(288 t))+43200 (E^(12 x))+10800 (E^(8 (8 t+x)))+7200 (E^(6 (36 t+x)))+900 (E^(4 (56 t+x)))+72 (E^(280 t+2 x))+600 (E^(72 t+6 x))+21600 (E^(8 t+10 x))))^2)

kdv[v_]:= D[v,t]- 6 v D[v,x] + D[v,{x,3}]

kdv[w[x,t]]

Simplify[%]

Manipulate[Plot[-w[x,t],{x,-10,10},PlotRange->{0,20}],{t,-0.2,0.2,0.02}]

Differentiation

D[ Sin[a x], x]

D[ Sin[ax], x]

D[ Sin[a x], {x,3}]

D[ Sin[a x] Cosh[b y], {x,3}, {y,5}]

(1)	Man leite  f = x^2 - 5x + 1  nach x ab .
(2)	Man leite die Funktionen {E^(2a x^2) Cos[c x], Tan[E^(3 x)], Sin[a x] Cos[b y]}  nach x ab .
(3)	Man leite (x/2)^2 (y/3)^4   nach  x   und  y  ab.

Integration

Unbestimmtes Integral:

Integrate[ Exp[a x], x]

Integrate[ Exp[-a x] Cos[b y], x, y]

∫(1/((x^4)-1))\[DifferentialD]x

Bestimmtes Integral:

Integrate[ Sin[a x], {x,0,Pi/2}]

Together[%]

Simplify[%]

NIntegrate[Sin[3x], {x,0,0.45}]

Übung:

Man berechne folgendes Integral auf mehrere Arten und vergleiche die Resultate 
	  ∫01 x20 ex dx  
	a) Numerische Integration.
	b) Analytische Integration, und dann Einsetzen der Randwerte mit einer Genauigkeit von 20 Stellen.
	c) Reihenentwicklung (10 Terme) und gliedweiser Integration.

Listen und Matrizen

Vektoren werden in  Mathematica als Listen betrachtet

u={1,2}; v={3,4};

und können wie üblich addiert werden

3 u+2 v

Analog werden Matrizen dargestellt

M={{1,2},{3,4}}

Für die Matrizenmultiplikation benutzt man das Zeichen ``.''

M .v

Die häufigsten Matrizenoperation sind

Der Befehl MatrixForm stellt Listen in Matrixform dar

MatrixForm[M]

Um einzelne Elemente aus einer Matrix zu bekommen benutzt man den Part-operation (wie bei allen Listen)

M[[1]]

M[[1]]

M[[1]][[2]]

Matrizen können mt Hilfe folgender Operationen erzeugt werden

Zum Beispiel

Table[i+j,{i,3},{j,3}] //MatrixForm

Zusätzlich kann man  Table und Array  zur Erzeugung von Matrizen beliebier Dimension benutzt werden.

Array[a,{3}]

Table[f[i,j,k],{i,2},{j,2},{k,2}]

Übung:

Man berechne die Determinante, die Inverse, die charkteristische Werte und die 
	charakteristische Gleichung der folgenden Matrix
		 {{1, 0, -4}, {0, 5, 4}, {-4,  4, 3}}. 
	und faktorisiere das charakteristische Polynom.

Gleichungssysteme

Lineare reguläre Systeme

sys = {5 x + 1 y == 3, 4 x - 3 y == 2}

Solve[ sys, {x,y}]

sol = % // Flatten

sys /. sol

Solve[ {5 x + 1 y == 3., 4 x - 3 y == 2}, {x,y}]

ma = {{5,1}, {4, -3}} ; MatrixForm[ma]
b  = {3,2}
mx = {x,y}
ma . mx  == b

ma . mx  == b //Thread

Inverse[ma] . b

Singuläre Systeme

Solve[ {x - y == 1, 3 x - 3 y == 3}, {x,y} ]

Solve[ {x - y == 1, 3 x - 3 y == 2}, {x,y} ]

Solve[Abs[x/2-1]==x,x]

Quadratische Gleichung

eqn= (x^2)+ 2 a x + b==0

Man beachte dass der Set operator (=) schwächer bindet als der Equal operator (==).

sol=Solve[eqn,x]

Das Ergebnis ist als Liste von Regeln gegeben. Durch Einsetzen kann das Ergebnis verifiziert werden.

Simplify[eqn /. sol]

Übung

(1)	Man löse das folgende lineare Gleichungssytem:
	x + y + z = 1,  	x + 2y + 3z = 4,   x + 3y + 6z = 10.

(2)	Man löse das folgende lineare Gleichungssytem auf zwei Arten:
	a x + b y   =  e,   c x  +  d y  =  f.

Funktionen

Unterstrichene  ("_") Variable sind Platzhalter. Die anderen Variable sind global definiert.

Clear[f,x,y,c];
f[x_,y_] = x^2 + y^ 2 - c

In dieser Funktion sind   x   und   y  Platzhalter,  c  ist global.  Es ist wichtig, dass noch keine Zuweisungen zu den Variablen der Funktion gemacht wurden.

f[a,b]

f[2,5]

c = 13.3

f[2,5]

f[a,b]

Clear[c]
f[a,b]

f[x_] = x^3 + x - 1

Eine Funktion kann auch rekursiv definiert werden. EIn Beispiel dafür sind die  Legendre Polynome  Pn(x)  die folgende Rekursion erfüllen

                           (n + 1) Pn+1(x) - (2 n + 1) x Pn(x)  +  n Pn-1(x)  =  0

und wie folgt erzeugt werden können.

p[0,x] = 1;  p[1,x] = x;
p[n_Integer,x]:=
p[n,x]=((2n-1)/n x) p[n-1,x] + p[n-2,x] (n-1)/n;

p[5,x]//Apart

p[.5,x]

Rekursionen können auf zweierlei Art definiert werden. Das zweite Beispiel unten ist ein Beispiel für dynamische Programmierung und ist auch wesentlich schneller. Die folgende Rekursion erzeugt die Fibonacci-Zahlen

Clear[fib];  fib[0]=fib[1]=1;
fib[n_]:=fib[n-1]+fib[n-2];
nt = Table[{k,fib[k]}//Timing,{k,2,25}]; nt[[Range[1,20]]]

tp=Table[{nt[[k,2,1]],nt[[k,1]]},{k,Length[nt]}]

ListPlot[tp,PlotRange->All,AxesLabel->{"n","time [s]"},PlotLabel->"time needed to compute the n-th Fibonacci number\n\n"]

Clear[fib]; fib[0]=fib[1]=1;
fib[n_]:=fib[n]=fib[n-1]+fib[n-2] ;
dt = Table[{k,fib[k]},{k,2,200}]//Timing ;  dt[[1]]

dm=Table[{k,Fibonacci[k]},{k,2,200}]//Timing; dm[[1]]

Nebenbedingungen

können in Funktion mittels    /; eingeführt werden; eine  weitere Methode sind Verzweigungen mittels If[] und Which[]...

p[x_]:=(x^2)/;x>0;p[x_]:=-(x^2)/;x≤0

{p[1],p[.5], p[0], p[-.5],p[-1]}

Clear[f,n]

f[(n_?Positive)?IntegerQ] = n!
	f[n_] := Print["f expects a positive integer argument"]

f[3]

f[-4]

f[2.2]

Substitutionen

Substitutionen werden nach folgenden Regeln durchgeführt

exp   /. 	var -> value

	 exp   /.	list

			list = {var1 -> val1, var2 -> val2, ... }

Beispiele

h = z

h1 = h /. z -> 44

h

h1

Clear[x,y,f]
f[x_,y_] = x^2 + y^ 2 - c

h = f[x,y]

h1 = h /. c -> 13.3

h

h1

h2 = h1 /. {x -> a, y -> b}

x = 4
y = 5

h

h1

h2

f[p,q]

f[x,y]

Substitutionen mit Bedingungen

Clear[m,n,k]

Gamma[m+(5/2)]/.Gamma[n_+k_/;OddQ[2 k]]->(((2 k+2 n-2)!! (Sqrt[π]))/(2^(k-(1/2)+n)))

% /. m -> 4

%% /. m -> 4.3

Differentialgleichungen

'    (Apostroph)  bezeichnet die Ableitung (oder D[y[x],x])

Clear[x,y]

DSolve[ y''[x] + k y[x] == 0, y[x], x]

DSolve[ y''[x] + 2 y'[x]/x - l (l + 1)/x^2 y[x] + 
		k^2 y[x] == 0, y[x], x]

sol=DSolve[{x'[t]==1+((x[t])^2),x[0]==1},x[t],t]

x[t_]= x[t] /. Flatten[sol]

Sound

Play[Sin[1000/t],{t,0,2}]

Logik

Dieses kleine Programm ist aus der news group kopiert (Juli 2000)

kart[n_]:=kart[n]=Flatten[Table[Flatten[Append[{i},kart[n-1][[j]]]],{i,0,1},{j,1,2^(n-1)}],1];kart[1]={0,1};
wahrheitstafel[f_,var_List]:=Module[{n=Length[var],t={0->True,1->False}},TableForm[Table[Append[kart[n][[i]]/.t,f/.Table[var[[j]]->kart[n][[i,j]]/.t,{j,1,n}]],{i,1,2^n}],TableHeadings->{None,Append[var,Formel]}]]

aussage[p_, q_, r_] := ...  <--- hier können sie Ihre Aussage einsetzen

Beispiel  16

p... Paul sagt die Wahrheit, m... Max sagt die Wahrh., n... Norbert sagt die Wahrh.

aussage2[p_,m_,n_]:=(p==¬m∧m==¬n∧n==(¬m∧¬p) )

wahrheitstafel[aussage2[p,m,n],{p,m,n}]

Beispiel  17

jo... John ist der Täter, p... Pat ist der Täter, t... Tom ist der Täter

aussage4[jo_,p_,t_]:=((p∨t)\[Implies]¬jo)∧( (¬jo∨¬ t)\[Implies]   p)∧ (t \[Implies]jo)

wahrheitstafel[aussage4[jo,p,t],{jo,p,t}]