next up previous contents
Nächste Seite: 6.3 Operator Overloading Aufwärts: 6 Objektorientierte Methoden Vorherige Seite: 6.1 Konzepte   Inhalt

Unterabschnitte

6.2 Objekte

Es gibt keine Datentypen (,,everything is an expression``).

Head[.] fungiert als ,,Pseudotyp``. In[1]:= Head[5]
Out[1]= Integer

In[2]:= Head[4.2]
Out[2]= Real

In[3]:= Head[{A,1}]
Out[3]= List

In[4]:= Head[Pi]
Out[4]= Symbol

Objekte existieren auch innerhalb von Mathematica:
{...} oder Graphics[...]

Ein Objekt ist

Warum dann überhaupt Objekte?

Man definiert Methoden, die

Beispiel

Lineare Operatoren

Hilbertraum IR$^3$ ( height1.45ex width.9ptC$^3$),
Orthonormalbasis $\{\vert a_1\rangle, \vert a_2\rangle, \vert a_3\rangle\}$,
$\langle a_i\vert a_j\rangle = \delta_{ij}$
Operatoren über diesem Hilbertraum
(Operatoren = lineare Abbildungen $\hbox{\rlap{I}\kern.16em R}^3 \to \hbox{\rlap{I}\kern.16em R}^3$)

Operator $A$:
$A\vert a_1\rangle \mapsto \vert a_2\rangle$
$A\vert a_2 \rangle \mapsto \vert a_1\rangle + \vert a_3\rangle$
$A\vert a_3 \rangle \mapsto \vert a_2\rangle$

In[5]:= Op[{a1, a2, a3}, {a2, a1+a3, a2}]
Out[5]= Op[{a1, a2, a3}, {a2, a1+a3, a2}]

Op[] alleine ist sinnlos, daher sind ,,sinnvolle Methoden`` gesucht.

Matrixdarstellung des Operators

In[6]:= ToMatrix[op:Op[basic_List,image_List]] := Outer[project, basis,image]
Out[6]=

In[7]:= project[a_, b_ + c__] := project[a,b] + project[a,c]
Out[7]=

In[8]:= project[a_, n_ a_ ] := n
Out[8]=
$(\langle a\vert\lambda a\rangle=\lambda\langle a\vert a\rangle=\lambda)$

In[9]:= project[a_, a_] := 1
Out[9]=

In[10]:= project[a_, b_] := 0
Out[10]=
$\langle b+c\vert a\rangle$ funktioniert noch nicht.

In[11]:= project[b_ +c_, a_] := project[b,a] + project[c,a]
Out[11]=
oder in reellen Hilberträumen (keine komplexe Konjugation notwendig) SetAttributes[project, Orderless]

In[12]:= Outer [project, {a1, a2, a3}, {a2, a1+a3, a2}]
Out[12]= {{0, 1, 0}, {1, 0, 1}, {0, 1, 0}}

Ist der Operator hermitesch $(A = A^T)$? In[13]:= HermiteQ[ Op[ b_List, i_List] ] :=
Module[ m=ToMatrix[ Op[b, i] ], Conjugate[Transpose[m]] == m ]

Out[13]=

Komplizierte Ausdrücke müssen unter Umständen noch ,,händisch`` vereinfacht werden (Expand, Simplify).


next up previous contents
Nächste Seite: 6.3 Operator Overloading Aufwärts: 6 Objektorientierte Methoden Vorherige Seite: 6.1 Konzepte   Inhalt
Werner Scholz 2000-06-21