Poisson Brackets¶
da PowerShell -- jupyter nbconvert --to html notebook.ipynb
Date tre funzioni A(q, p), B(q, p), C(q, p), calcolare le loro Poisson Bracket - fare verifica di simpletticità¶
Calcolare Hamiltoniana di oscillatore armonico¶
In [1]:
import sympy as sp
def poisson_bracket(A, B, q, p):
"""
Calculate the Poisson bracket of two functions A and B.
:param A: Function A in terms of q and p.
:param B: Function B in terms of q and p.
:param q: List of position variables.
:param p: List of momentum variables.
:return:
Poisson bracket {A, B}.
"""
pb = 0
for qi, pi in zip(q, p):
pb += (A.diff(qi) * B.diff(pi)) - (A.diff(pi) * B.diff(qi))
return pb
def verify_bilinearity(A, B, C, q, p):
"""
Verify the bilinearity property of Poisson brackets.
:param A, B, C: Functions A, B, C.
:param q, p: Lists of canonical variables.
"""
a, b = sp.symbols('a b')
lhs = poisson_bracket(a*A + b*B, C, q, p)
rhs = a*poisson_bracket(A, C, q, p) + b * poisson_bracket(B, C, q, p)
assert sp.simplify(lhs - rhs) == 0, "Bilinearity does not hold"
def verify_antisymmetry(A, B, q, p):
"""
Verify the antisymmetry property of Poisson brackets.
:param A, B: Functions A, B.
:param q, p: Lists of canonical variables.
"""
assert poisson_bracket(A, B, q, p) == -poisson_bracket(B, A, q, p) , "Antisymmetry does not hold"
def verify_jacobi_identity(A, B, C, q, p):
"""
Verify the Jacobi identity for Poisson brackets.
:param A, B, C: Functions A, B, C.
:param q, p: Lists of canonical variables.
"""
lhs = poisson_bracket(A, poisson_bracket(B, C, q, p), q, p) + \
poisson_bracket(B, poisson_bracket(C, A, q, p), q, p) + \
poisson_bracket(C, poisson_bracket(A, B, q, p), q, p)
assert sp.simplify(lhs) == 0, "Jacobi identity does not hold"
def hamiltons_equations(H, q, p):
"""
Derive Hamilton's equations of motion using Poisson brackets for
a given Hamiltonian.
:param H: Hamiltonian of the system.
:param q, p: Lists of canonical variables.
:retum: Equations of motion.
"""
dq_dt = [poisson_bracket(qi, H, q, p) for qi in q]
dp_dt = [poisson_bracket(pi, H, q, p) for pi in p]
return dq_dt, dp_dt
# Define symbols
q1, p1 = sp.symbols('q1 p1')
q = [q1]
p = [p1]
# Define functions
A = q1**2 * p1
B = sp.sin(q1 + p1)
C = sp.exp(-q1*p1)
H = (p1**2)/(2*1) + (1/2)*1*1**2*q1**2 # Harmonic oscillator Hamiltonian
# Verify properties
verify_bilinearity(A, B, C, q, p)
verify_antisymmetry(A, B, q, p)
verify_jacobi_identity(A, B, C, q, p)
# Derive Hamilton's equations
dq_dt, dp_dt = hamiltons_equations(H, q, p)
# Example outputs
print("Hamilton s equations:")
print(f"dq/dt: {dq_dt}")
print(f"dp/dt: {dp_dt}")
Hamilton s equations: dq/dt: [p1] dp/dt: [-1.0*q1]
In [ ]: