move python scripts
This commit is contained in:
		
							
								
								
									
										40
									
								
								maxwell/misc/eigenvalues.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								maxwell/misc/eigenvalues.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
#! /usr/bin/env python3
 | 
			
		||||
import numpy as np
 | 
			
		||||
 | 
			
		||||
A = np.array([[0, 0, 0], [0, 0, -1], [0, -1, 0]])
 | 
			
		||||
B = np.array([[0, 1, 0], [1, 0, 0], [0, 0, 0]])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def similarity_transform(matrix):
 | 
			
		||||
    L, S = np.linalg.eig(matrix)
 | 
			
		||||
    L = np.diag(L)
 | 
			
		||||
    S = S.transpose()
 | 
			
		||||
    assert np.allclose(np.matmul(S.transpose(), np.matmul(L, S)), matrix)
 | 
			
		||||
    return L, S
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def plusminus(matrix):
 | 
			
		||||
    L, S = similarity_transform(matrix)
 | 
			
		||||
 | 
			
		||||
    def signed(op):
 | 
			
		||||
        return 0.5 * np.matmul(S.transpose(), np.matmul(op(L, np.abs(L)), S))
 | 
			
		||||
 | 
			
		||||
    plus = signed(np.add)
 | 
			
		||||
    minus = signed(np.subtract)
 | 
			
		||||
 | 
			
		||||
    assert np.allclose(matrix, plus + minus)
 | 
			
		||||
    return plus, minus
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Aplus, Aminus = plusminus(A)
 | 
			
		||||
Bplus, Bminus = plusminus(B)
 | 
			
		||||
 | 
			
		||||
print("A+")
 | 
			
		||||
print(Aplus)
 | 
			
		||||
print("A-")
 | 
			
		||||
print(Aminus)
 | 
			
		||||
print()
 | 
			
		||||
print("B+")
 | 
			
		||||
print(Bplus)
 | 
			
		||||
print("B-")
 | 
			
		||||
print(Bminus)
 | 
			
		||||
							
								
								
									
										55
									
								
								maxwell/misc/eigenvalues_rotated.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										55
									
								
								maxwell/misc/eigenvalues_rotated.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#! /usr/bin/env python3
 | 
			
		||||
import sympy as sp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
A = sp.Matrix([[0, 0, 0], [0, 0, -1], [0, -1, 0]])
 | 
			
		||||
B = sp.Matrix([[0, 1, 0], [1, 0, 0], [0, 0, 0]])
 | 
			
		||||
 | 
			
		||||
kx, ky = sp.symbols("kx ky")
 | 
			
		||||
 | 
			
		||||
A = kx * A + ky * B
 | 
			
		||||
 | 
			
		||||
print("flux")
 | 
			
		||||
sp.pprint(A)
 | 
			
		||||
 | 
			
		||||
eigenvalues = A.eigenvals()
 | 
			
		||||
 | 
			
		||||
# sp.pprint(eigenvalues)
 | 
			
		||||
 | 
			
		||||
eigenvectors = A.eigenvects()
 | 
			
		||||
 | 
			
		||||
# sp.pprint(eigenvectors)
 | 
			
		||||
 | 
			
		||||
S, L = A.diagonalize()
 | 
			
		||||
Labs = (L*L)**0.5
 | 
			
		||||
 | 
			
		||||
plus = S*(L + Labs)*S.inv()/2
 | 
			
		||||
minus = S*(L - Labs)*S.inv()/2
 | 
			
		||||
 | 
			
		||||
Ahat = plus + minus
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
plus.simplify()
 | 
			
		||||
minus.simplify()
 | 
			
		||||
 | 
			
		||||
print("Positive flux")
 | 
			
		||||
r = sp.symbols("r")
 | 
			
		||||
sp.pprint(plus.subs((kx*kx + ky*ky)**0.5, r))
 | 
			
		||||
print("Negative flux")
 | 
			
		||||
sp.pprint(minus.subs((kx*kx + ky*ky)**0.5, r))
 | 
			
		||||
print("r = ")
 | 
			
		||||
sp.pprint((kx*kx + ky*ky)**0.5)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
print("Evaluations:")
 | 
			
		||||
print("plus (1, 0)")
 | 
			
		||||
sp.pprint(plus.subs(kx, 1).subs(ky, 0))
 | 
			
		||||
print("plus (0, 1)")
 | 
			
		||||
sp.pprint(plus.subs(kx, 0).subs(ky, 1))
 | 
			
		||||
print("plus (1/sqrt(2), 1/sqrt(2)")
 | 
			
		||||
sp.pprint(plus.subs(kx, 1/2**0.5).subs(ky, 1/2**0.5))
 | 
			
		||||
 | 
			
		||||
print("positive flux - negative flux")
 | 
			
		||||
S = plus - minus
 | 
			
		||||
S.simplify
 | 
			
		||||
sp.pprint(S.subs((kx*kx + ky*ky)**0.5, r))
 | 
			
		||||
		Reference in New Issue
	
	Block a user