test_qho_1d.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from sympy.core.numbers import (Rational, oo, pi)
  2. from sympy.core.singleton import S
  3. from sympy.core.symbol import Symbol
  4. from sympy.functions.elementary.exponential import exp
  5. from sympy.functions.elementary.miscellaneous import sqrt
  6. from sympy.integrals.integrals import integrate
  7. from sympy.simplify.simplify import simplify
  8. from sympy.abc import omega, m, x
  9. from sympy.physics.qho_1d import psi_n, E_n, coherent_state
  10. from sympy.physics.quantum.constants import hbar
  11. nu = m * omega / hbar
  12. def test_wavefunction():
  13. Psi = {
  14. 0: (nu/pi)**Rational(1, 4) * exp(-nu * x**2 /2),
  15. 1: (nu/pi)**Rational(1, 4) * sqrt(2*nu) * x * exp(-nu * x**2 /2),
  16. 2: (nu/pi)**Rational(1, 4) * (2 * nu * x**2 - 1)/sqrt(2) * exp(-nu * x**2 /2),
  17. 3: (nu/pi)**Rational(1, 4) * sqrt(nu/3) * (2 * nu * x**3 - 3 * x) * exp(-nu * x**2 /2)
  18. }
  19. for n in Psi:
  20. assert simplify(psi_n(n, x, m, omega) - Psi[n]) == 0
  21. def test_norm(n=1):
  22. # Maximum "n" which is tested:
  23. for i in range(n + 1):
  24. assert integrate(psi_n(i, x, 1, 1)**2, (x, -oo, oo)) == 1
  25. def test_orthogonality(n=1):
  26. # Maximum "n" which is tested:
  27. for i in range(n + 1):
  28. for j in range(i + 1, n + 1):
  29. assert integrate(
  30. psi_n(i, x, 1, 1)*psi_n(j, x, 1, 1), (x, -oo, oo)) == 0
  31. def test_energies(n=1):
  32. # Maximum "n" which is tested:
  33. for i in range(n + 1):
  34. assert E_n(i, omega) == hbar * omega * (i + S.Half)
  35. def test_coherent_state(n=10):
  36. # Maximum "n" which is tested:
  37. # test whether coherent state is the eigenstate of annihilation operator
  38. alpha = Symbol("alpha")
  39. for i in range(n + 1):
  40. assert simplify(sqrt(n + 1) * coherent_state(n + 1, alpha)) == simplify(alpha * coherent_state(n, alpha))