图片解析应用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.8 KiB

  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