Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import random
  3.  
  4.  
  5. class LagrangePolynom:
  6. def __init__(self, x_list, y_list):
  7. self.x_list = list(x_list)
  8. self.y_list = list(y_list)
  9. self.denominators = []
  10. self.n = len(x_list)
  11. for i in range(self.n):
  12. denom = 1
  13. for j in range(self.n):
  14. if i != j:
  15. denom *= x_list[i] - x_list[j]
  16. self.denominators.append(denom)
  17. def __call__(self, x):
  18. if x in self.x_list:
  19. return self.y_list[self.x_list.index(x)]
  20. full_numerator = 1
  21. for j in range(self.n):
  22. full_numerator *= x - self.x_list[j]
  23. result = 0
  24. for i in range(self.n):
  25. P = full_numerator / (self.denominators[i] * (x - self.x_list[i]))
  26. result += self.y_list[i] * P
  27. return result
  28.  
  29. a, b = -2,2
  30. N = 25
  31. x_list = [a +i*(b-a)/(N - 1) for i in range(N)]
  32. y_list = [random.random() for i in range(N)]
  33.  
  34.  
  35. N = 500
  36. plt.axis('equal')
  37. plt.plot([a, b], [0,0], "--")
  38. plt.plot(x_list, y_list, "*")
  39.  
  40. #P = LagrangePolynom(x_list, y_list)
  41.  
  42. if len(x_list) % 3 == 1:
  43. i = 0
  44. j = 0
  45. while i < len(x_list) - 3 :
  46. new_x = []
  47. new_y = []
  48. for a in x_list[j:j+4]:
  49. new_x.append(a)
  50. for a in y_list[j:j+4]:
  51. new_y.append(a)
  52. P = LagrangePolynom(new_x, new_y)
  53. a,b = x_list[j], x_list[j+3]
  54. x = [a + i*(b-a)/(N - 1) for i in range(N)]
  55. y = list(map(P,x))
  56. plt.plot(x,y,color="red")
  57. j += 3
  58. i += 3
  59. elif len(x_list) % 3 == 2:
  60. i = 0
  61. j = 0
  62. while i < len(x_list) - 4 :
  63. new_x = []
  64. new_y = []
  65. for a in x_list[j:j+4]:
  66. new_x.append(a)
  67. for a in y_list[j:j+4]:
  68. new_y.append(a)
  69. P = LagrangePolynom(new_x, new_y)
  70. a,b = x_list[j], x_list[j+3]
  71. x = [a + i*(b-a)/(N - 1) for i in range(N)]
  72. y = list(map(P,x))
  73. plt.plot(x,y,color="red")
  74. j += 3
  75. i += 3
  76. new_x = (x_list[j],x_list[j+1])
  77. new_y = (y_list[j],y_list[j+1])
  78. P = LagrangePolynom(new_x, new_y)
  79. a,b = x_list[j], x_list[j + 1]
  80. x = [a + i*(b-a)/(N - 1) for i in range(N)]
  81. y = list(map(P,x))
  82. plt.plot(x,y,color="red")
  83. else:
  84. i = 0
  85. j = 0
  86. while i < len(x_list) - 5 :
  87. new_x = []
  88. new_y = []
  89. for a in x_list[j:j+4]:
  90. new_x.append(a)
  91. for a in y_list[j:j+4]:
  92. new_y.append(a)
  93. P = LagrangePolynom(new_x, new_y)
  94. a,b = x_list[j], x_list[j+3]
  95. x = [a + i*(b-a)/(N - 1) for i in range(N)]
  96. y = list(map(P,x))
  97. plt.plot(x,y,color="red")
  98. j += 3
  99. i += 3
  100. new_x = (x_list[j],x_list[j+1], x_list[j + 2])
  101. new_y = (y_list[j],y_list[j+1], y_list[j + 2])
  102. P = LagrangePolynom(new_x, new_y)
  103. a,b = x_list[j], x_list[j + 2]
  104. x = [a + i*(b-a)/(N - 1) for i in range(N)]
  105. y = list(map(P,x))
  106. plt.plot(x,y,color="red")
  107. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement