test_waves.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from sympy.core.function import (Derivative, Function)
  2. from sympy.core.numbers import (I, pi)
  3. from sympy.core.symbol import (Symbol, symbols)
  4. from sympy.functions.elementary.miscellaneous import sqrt
  5. from sympy.functions.elementary.trigonometric import (atan2, cos, sin)
  6. from sympy.simplify.simplify import simplify
  7. from sympy.abc import epsilon, mu
  8. from sympy.functions.elementary.exponential import exp
  9. from sympy.physics.units import speed_of_light, m, s
  10. from sympy.physics.optics import TWave
  11. from sympy.testing.pytest import raises
  12. c = speed_of_light.convert_to(m/s)
  13. def test_twave():
  14. A1, phi1, A2, phi2, f = symbols('A1, phi1, A2, phi2, f')
  15. n = Symbol('n') # Refractive index
  16. t = Symbol('t') # Time
  17. x = Symbol('x') # Spatial variable
  18. E = Function('E')
  19. w1 = TWave(A1, f, phi1)
  20. w2 = TWave(A2, f, phi2)
  21. assert w1.amplitude == A1
  22. assert w1.frequency == f
  23. assert w1.phase == phi1
  24. assert w1.wavelength == c/(f*n)
  25. assert w1.time_period == 1/f
  26. assert w1.angular_velocity == 2*pi*f
  27. assert w1.wavenumber == 2*pi*f*n/c
  28. assert w1.speed == c/n
  29. w3 = w1 + w2
  30. assert w3.amplitude == sqrt(A1**2 + 2*A1*A2*cos(phi1 - phi2) + A2**2)
  31. assert w3.frequency == f
  32. assert w3.phase == atan2(A1*sin(phi1) + A2*sin(phi2), A1*cos(phi1) + A2*cos(phi2))
  33. assert w3.wavelength == c/(f*n)
  34. assert w3.time_period == 1/f
  35. assert w3.angular_velocity == 2*pi*f
  36. assert w3.wavenumber == 2*pi*f*n/c
  37. assert w3.speed == c/n
  38. assert simplify(w3.rewrite(sin) - w2.rewrite(sin) - w1.rewrite(sin)) == 0
  39. assert w3.rewrite('pde') == epsilon*mu*Derivative(E(x, t), t, t) + Derivative(E(x, t), x, x)
  40. assert w3.rewrite(cos) == sqrt(A1**2 + 2*A1*A2*cos(phi1 - phi2)
  41. + A2**2)*cos(pi*f*n*x*s/(149896229*m) - 2*pi*f*t + atan2(A1*sin(phi1)
  42. + A2*sin(phi2), A1*cos(phi1) + A2*cos(phi2)))
  43. assert w3.rewrite(exp) == sqrt(A1**2 + 2*A1*A2*cos(phi1 - phi2)
  44. + A2**2)*exp(I*(-2*pi*f*t + atan2(A1*sin(phi1) + A2*sin(phi2), A1*cos(phi1)
  45. + A2*cos(phi2)) + pi*s*f*n*x/(149896229*m)))
  46. w4 = TWave(A1, None, 0, 1/f)
  47. assert w4.frequency == f
  48. w5 = w1 - w2
  49. assert w5.amplitude == sqrt(A1**2 - 2*A1*A2*cos(phi1 - phi2) + A2**2)
  50. assert w5.frequency == f
  51. assert w5.phase == atan2(A1*sin(phi1) - A2*sin(phi2), A1*cos(phi1) - A2*cos(phi2))
  52. assert w5.wavelength == c/(f*n)
  53. assert w5.time_period == 1/f
  54. assert w5.angular_velocity == 2*pi*f
  55. assert w5.wavenumber == 2*pi*f*n/c
  56. assert w5.speed == c/n
  57. assert simplify(w5.rewrite(sin) - w1.rewrite(sin) + w2.rewrite(sin)) == 0
  58. assert w5.rewrite('pde') == epsilon*mu*Derivative(E(x, t), t, t) + Derivative(E(x, t), x, x)
  59. assert w5.rewrite(cos) == sqrt(A1**2 - 2*A1*A2*cos(phi1 - phi2)
  60. + A2**2)*cos(-2*pi*f*t + atan2(A1*sin(phi1) - A2*sin(phi2), A1*cos(phi1)
  61. - A2*cos(phi2)) + pi*s*f*n*x/(149896229*m))
  62. assert w5.rewrite(exp) == sqrt(A1**2 - 2*A1*A2*cos(phi1 - phi2)
  63. + A2**2)*exp(I*(-2*pi*f*t + atan2(A1*sin(phi1) - A2*sin(phi2), A1*cos(phi1)
  64. - A2*cos(phi2)) + pi*s*f*n*x/(149896229*m)))
  65. w6 = 2*w1
  66. assert w6.amplitude == 2*A1
  67. assert w6.frequency == f
  68. assert w6.phase == phi1
  69. w7 = -w6
  70. assert w7.amplitude == -2*A1
  71. assert w7.frequency == f
  72. assert w7.phase == phi1
  73. raises(ValueError, lambda:TWave(A1))
  74. raises(ValueError, lambda:TWave(A1, f, phi1, t))