图片解析应用
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.

78 lines
2.2 KiB

  1. from sympy.core.numbers import (Rational, pi)
  2. from sympy.functions.elementary.exponential import log
  3. from sympy.functions.elementary.miscellaneous import sqrt
  4. from sympy.functions.special.error_functions import erf
  5. from sympy.polys.domains.finitefield import GF
  6. from sympy.simplify.ratsimp import (ratsimp, ratsimpmodprime)
  7. from sympy.abc import x, y, z, t, a, b, c, d, e
  8. def test_ratsimp():
  9. f, g = 1/x + 1/y, (x + y)/(x*y)
  10. assert f != g and ratsimp(f) == g
  11. f, g = 1/(1 + 1/x), 1 - 1/(x + 1)
  12. assert f != g and ratsimp(f) == g
  13. f, g = x/(x + y) + y/(x + y), 1
  14. assert f != g and ratsimp(f) == g
  15. f, g = -x - y - y**2/(x + y) + x**2/(x + y), -2*y
  16. assert f != g and ratsimp(f) == g
  17. f = (a*c*x*y + a*c*z - b*d*x*y - b*d*z - b*t*x*y - b*t*x - b*t*z +
  18. e*x)/(x*y + z)
  19. G = [a*c - b*d - b*t + (-b*t*x + e*x)/(x*y + z),
  20. a*c - b*d - b*t - ( b*t*x - e*x)/(x*y + z)]
  21. assert f != g and ratsimp(f) in G
  22. A = sqrt(pi)
  23. B = log(erf(x) - 1)
  24. C = log(erf(x) + 1)
  25. D = 8 - 8*erf(x)
  26. f = A*B/D - A*C/D + A*C*erf(x)/D - A*B*erf(x)/D + 2*A/D
  27. assert ratsimp(f) == A*B/8 - A*C/8 - A/(4*erf(x) - 4)
  28. def test_ratsimpmodprime():
  29. a = y**5 + x + y
  30. b = x - y
  31. F = [x*y**5 - x - y]
  32. assert ratsimpmodprime(a/b, F, x, y, order='lex') == \
  33. (-x**2 - x*y - x - y) / (-x**2 + x*y)
  34. a = x + y**2 - 2
  35. b = x + y**2 - y - 1
  36. F = [x*y - 1]
  37. assert ratsimpmodprime(a/b, F, x, y, order='lex') == \
  38. (1 + y - x)/(y - x)
  39. a = 5*x**3 + 21*x**2 + 4*x*y + 23*x + 12*y + 15
  40. b = 7*x**3 - y*x**2 + 31*x**2 + 2*x*y + 15*y + 37*x + 21
  41. F = [x**2 + y**2 - 1]
  42. assert ratsimpmodprime(a/b, F, x, y, order='lex') == \
  43. (1 + 5*y - 5*x)/(8*y - 6*x)
  44. a = x*y - x - 2*y + 4
  45. b = x + y**2 - 2*y
  46. F = [x - 2, y - 3]
  47. assert ratsimpmodprime(a/b, F, x, y, order='lex') == \
  48. Rational(2, 5)
  49. # Test a bug where denominators would be dropped
  50. assert ratsimpmodprime(x, [y - 2*x], order='lex') == \
  51. y/2
  52. a = (x**5 + 2*x**4 + 2*x**3 + 2*x**2 + x + 2/x + x**(-2))
  53. assert ratsimpmodprime(a, [x + 1], domain=GF(2)) == 1
  54. assert ratsimpmodprime(a, [x + 1], domain=GF(3)) == -1