Eigenvalue problems
Written by D Ködderitzsch
1 Symmetry adapted basis functions
Define matrix element
--> |
tmatele(j,k):= %e^(2*%pi*%i*(j-1)*(k-1)/3)$ t1 : [tmatele(1,1),tmatele(2,1),tmatele(3,1)]; |
--> | t2 : [tmatele(1,2),tmatele(2,2),tmatele(3,2)]; |
Try to bring it into polar form
--> | t3 : polarform([tmatele(1,3),tmatele(2,3),tmatele(3,3)]); |
Now let's normalize the vector
--> | t1n : t1/sqrt(conjugate(t1).t1); |
--> | t2n : t2/(sqrt(conjugate(t2).t2)); |
Pretty obfuscated - let's try to make it look more aesthetic.
--> | t2n : t2/expand(sqrt(conjugate(t2).t2)); |
--> | t3n : t3/expand((sqrt(conjugate(t3).t3))); |
Define transformation matrix (also display it in polar form)
--> |
tmat : expand(transpose(matrix (t1n,t2n,t3n))); polarform(%); |
Invert it
--> | expand(invert(tmat)); |
Check unitary property
--> | expand(conjugate(transpose(tmat)).tmat); |
2 Solving the eigenvalue problem
Define Hamiltion mattrix
--> |
h0mat : matrix( [%alpha,%beta,%beta], [%beta,%alpha,%beta], [%beta,%beta,%alpha] ); |
Work with the "eigen" package that contains predefined functions
--> | load(eigen)$ |
Eigenvalues
--> | eigenvalues(h0mat); |
Eigenvectors
--> | eigenvectors(h0mat); |
Normalized eigenvectors
--> | uniteigenvectors(h0mat); |
Let's apply our similarity transformation from above
--> | expand(conjugate(transpose(tmat)).h0mat.tmat); |
Pretty neatly :-)
3 Let's have some fun with user defined functions
Simplify the normalisation of a vector
--> | cnorm(v) := expand(v/sqrt(conjugate(v).v)); |
--> |
tmatele(j,k):= %e^(2*%pi*%i*(j-1)*(k-1)/3)$ t2 : [tmatele(1,2),tmatele(2,2),tmatele(3,2)]; |
--> | cnorm(t2); |