test_trigonometry.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from sympy.core import Ne, Rational, Symbol
  2. from sympy.functions import sin, cos, tan, csc, sec, cot, log, Piecewise
  3. from sympy.integrals.trigonometry import trigintegrate
  4. x = Symbol('x')
  5. def test_trigintegrate_odd():
  6. assert trigintegrate(Rational(1), x) == x
  7. assert trigintegrate(x, x) is None
  8. assert trigintegrate(x**2, x) is None
  9. assert trigintegrate(sin(x), x) == -cos(x)
  10. assert trigintegrate(cos(x), x) == sin(x)
  11. assert trigintegrate(sin(3*x), x) == -cos(3*x)/3
  12. assert trigintegrate(cos(3*x), x) == sin(3*x)/3
  13. y = Symbol('y')
  14. assert trigintegrate(sin(y*x), x) == Piecewise(
  15. (-cos(y*x)/y, Ne(y, 0)), (0, True))
  16. assert trigintegrate(cos(y*x), x) == Piecewise(
  17. (sin(y*x)/y, Ne(y, 0)), (x, True))
  18. assert trigintegrate(sin(y*x)**2, x) == Piecewise(
  19. ((x*y/2 - sin(x*y)*cos(x*y)/2)/y, Ne(y, 0)), (0, True))
  20. assert trigintegrate(sin(y*x)*cos(y*x), x) == Piecewise(
  21. (sin(x*y)**2/(2*y), Ne(y, 0)), (0, True))
  22. assert trigintegrate(cos(y*x)**2, x) == Piecewise(
  23. ((x*y/2 + sin(x*y)*cos(x*y)/2)/y, Ne(y, 0)), (x, True))
  24. y = Symbol('y', positive=True)
  25. # TODO: remove conds='none' below. For this to work we would have to rule
  26. # out (e.g. by trying solve) the condition y = 0, incompatible with
  27. # y.is_positive being True.
  28. assert trigintegrate(sin(y*x), x, conds='none') == -cos(y*x)/y
  29. assert trigintegrate(cos(y*x), x, conds='none') == sin(y*x)/y
  30. assert trigintegrate(sin(x)*cos(x), x) == sin(x)**2/2
  31. assert trigintegrate(sin(x)*cos(x)**2, x) == -cos(x)**3/3
  32. assert trigintegrate(sin(x)**2*cos(x), x) == sin(x)**3/3
  33. # check if it selects right function to substitute,
  34. # so the result is kept simple
  35. assert trigintegrate(sin(x)**7 * cos(x), x) == sin(x)**8/8
  36. assert trigintegrate(sin(x) * cos(x)**7, x) == -cos(x)**8/8
  37. assert trigintegrate(sin(x)**7 * cos(x)**3, x) == \
  38. -sin(x)**10/10 + sin(x)**8/8
  39. assert trigintegrate(sin(x)**3 * cos(x)**7, x) == \
  40. cos(x)**10/10 - cos(x)**8/8
  41. # both n, m are odd and -ve, and not necessarily equal
  42. assert trigintegrate(sin(x)**-1*cos(x)**-1, x) == \
  43. -log(sin(x)**2 - 1)/2 + log(sin(x))
  44. def test_trigintegrate_even():
  45. assert trigintegrate(sin(x)**2, x) == x/2 - cos(x)*sin(x)/2
  46. assert trigintegrate(cos(x)**2, x) == x/2 + cos(x)*sin(x)/2
  47. assert trigintegrate(sin(3*x)**2, x) == x/2 - cos(3*x)*sin(3*x)/6
  48. assert trigintegrate(cos(3*x)**2, x) == x/2 + cos(3*x)*sin(3*x)/6
  49. assert trigintegrate(sin(x)**2 * cos(x)**2, x) == \
  50. x/8 - sin(2*x)*cos(2*x)/16
  51. assert trigintegrate(sin(x)**4 * cos(x)**2, x) == \
  52. x/16 - sin(x) *cos(x)/16 - sin(x)**3*cos(x)/24 + \
  53. sin(x)**5*cos(x)/6
  54. assert trigintegrate(sin(x)**2 * cos(x)**4, x) == \
  55. x/16 + cos(x) *sin(x)/16 + cos(x)**3*sin(x)/24 - \
  56. cos(x)**5*sin(x)/6
  57. assert trigintegrate(sin(x)**(-4), x) == -2*cos(x)/(3*sin(x)) \
  58. - cos(x)/(3*sin(x)**3)
  59. assert trigintegrate(cos(x)**(-6), x) == sin(x)/(5*cos(x)**5) \
  60. + 4*sin(x)/(15*cos(x)**3) + 8*sin(x)/(15*cos(x))
  61. def test_trigintegrate_mixed():
  62. assert trigintegrate(sin(x)*sec(x), x) == -log(cos(x))
  63. assert trigintegrate(sin(x)*csc(x), x) == x
  64. assert trigintegrate(sin(x)*cot(x), x) == sin(x)
  65. assert trigintegrate(cos(x)*sec(x), x) == x
  66. assert trigintegrate(cos(x)*csc(x), x) == log(sin(x))
  67. assert trigintegrate(cos(x)*tan(x), x) == -cos(x)
  68. assert trigintegrate(cos(x)*cot(x), x) == log(cos(x) - 1)/2 \
  69. - log(cos(x) + 1)/2 + cos(x)
  70. assert trigintegrate(cot(x)*cos(x)**2, x) == log(sin(x)) - sin(x)**2/2
  71. def test_trigintegrate_symbolic():
  72. n = Symbol('n', integer=True)
  73. assert trigintegrate(cos(x)**n, x) is None
  74. assert trigintegrate(sin(x)**n, x) is None
  75. assert trigintegrate(cot(x)**n, x) is None