Advertisement
Guest User

Untitled

a guest
Dec 15th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. from numpy import *
  2. from matplotlib import pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4.  
  5. def func(x, y):
  6. return x**2 - y**2
  7.  
  8. h_x = 0.1
  9. h_y = 0.1
  10.  
  11. a_x = 0
  12. b_x = 1
  13.  
  14. a_y = 0
  15. b_y = 1
  16.  
  17. eps = 0.001
  18.  
  19. n_y = int(ceil((b_y - a_y) / h_y))
  20. n_x = int(ceil((b_x - a_x) / h_x))
  21.  
  22. matrix = zeros((n_x, n_y))
  23. th = a_y
  24.  
  25. for i in range(n_y):
  26. matrix[i][0] = th**2
  27. th += h_y
  28. th = a_y
  29. for i in range(n_y):
  30. matrix[i][n_y - 1] = th**2 - 1
  31. th += h_y
  32.  
  33. while 1:
  34. tmp = array(matrix)
  35. matrix[1:(n_x - 1), 1:(n_y - 1)] = (h_y ** 2 * (matrix[2:n_x, 1:(n_y - 1)] + matrix[:(n_x - 2), 1:(n_y - 1)]) + h_x ** 2 * (matrix[1:(n_x - 1), 2:n_y] + matrix[1:(n_x - 1), 0:(n_y - 2)])) / (2 * (h_x ** 2 + h_y ** 2))
  36. matrix[0, 1:n_y - 1] = matrix[1, 1:n_y - 1]
  37. th = h_x
  38. for i in range(1, n_y):
  39. matrix[n_x - 1][i] = 1 - th**2
  40. th += h_x
  41. if linalg.norm(matrix - tmp) < eps:
  42. break
  43.  
  44. x = arange(0, 1, 0.1)
  45. y = arange(0, 1, 0.1)
  46. y_grid, x_grid = meshgrid(y, x)
  47. z_grid = func(x_grid, y_grid)
  48.  
  49. fig = plt.figure()
  50. ax = Axes3D(fig)
  51. ax.view_init(30, 60)
  52. ax.plot_surface(y_grid, x_grid, matrix)
  53. plt.show()
  54.  
  55. fig = plt.figure()
  56. ax = Axes3D(fig)
  57. ax.view_init(30, 60)
  58. ax.plot_surface(y_grid, x_grid, z_grid)
  59. plt.show()
  60.  
  61. for i in range(len(matrix)):
  62. for j in range(len(matrix[i])):
  63. print('{0:2f}'.format(fabs(z_grid[i][j] - matrix[i][j])), end=' ')
  64. print()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement