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
Hilbertraum IR (
height1.45ex width.9ptC
),
Orthonormalbasis
,
Operatoren über diesem Hilbertraum
(Operatoren = lineare Abbildungen
)
Operator :
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.
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]=
In[9]:= project[a_, a_] := 1
Out[9]=
In[10]:= project[a_, b_] := 0
Out[10]=
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 ?
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).