Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. import numpy as np
  2.  
  3. import matplotlib as mpl
  4. from matplotlib import pyplot as plt
  5.  
  6. import sympy
  7. from sympy import lambdify, latex
  8. from sympy.parsing.sympy_parser import parse_expr
  9.  
  10. import argparse
  11. from tokenize import TokenError
  12. from sys import exit
  13.  
  14. parser = argparse.ArgumentParser()
  15. parser.add_argument('f')
  16. parser.add_argument('g')
  17. parser.add_argument('a', type=float)
  18. parser.add_argument('b', type=float)
  19. parser.add_argument('-y_a', type=float)
  20. parser.add_argument('-y_b', type=float)
  21. parser.add_argument('n_segs', type=int)
  22. parser.add_argument('n_iter', type=int)
  23. parser.add_argument('-tol', type=float, default=1e-2)
  24. parser.add_argument('-thresh', type=float, default=1e4)
  25. parser.add_argument('-to_x', type=float)
  26. parser.add_argument('-to_y', type=float)
  27. args = parser.parse_args()
  28.  
  29. # Parse component maps
  30. try:
  31. f_expr = parse_expr(args.f)
  32. g_expr = parse_expr(args.g)
  33. except TokenError as e:
  34. print('Failed to parse function: "{}"'.format(e))
  35. exit()
  36. symbols = sympy.symbols(['x', 'y'])
  37. f = lambdify(symbols, f_expr, 'numpy')
  38. g = lambdify(symbols, g_expr, 'numpy')
  39.  
  40. # Local store parameters
  41. x_a, x_b = args.a, args.b
  42. y_a = args.y_a if args.y_a else x_a
  43. y_b = args.y_b if args.y_b else x_b
  44. n_segs = args.n_segs
  45. n_iter = args.n_iter
  46. tol, thresh = args.tol, args.thresh
  47. to_x, to_y = args.to_x, args.to_y
  48.  
  49. # Construct mesh of initial conditions
  50. x = np.linspace(x_a, x_b, n_segs)
  51. y = np.linspace(y_b, y_a, n_segs)
  52. x, y = np.meshgrid(x, y)
  53.  
  54. # Increment initial conditions
  55. for _ in range(n_iter):
  56. x, y = f(x, y), g(x, y)
  57.  
  58. if to_x is None and to_y is None:
  59. # Converged if finite
  60. data = np.isfinite(x + y)
  61. else:
  62. data = np.abs(to_x - x)**2 + np.abs(to_y - y)**2 >= tol
  63.  
  64. # Plot
  65. plt.imshow(data, extent=(x_a, x_b, y_a, y_b), cmap=mpl.cm.gray)
  66. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement