Advertisement
575

lab3_5

575
Oct 10th, 2022
922
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.50 KB | None | 0 0
  1. def f(x):
  2.     return 1 / (x ** 2 + 4)
  3.  
  4. def Rectangle(func, X0, Xk, step):
  5.     x = np.arange(X0, Xk + step, step)
  6.     n = np.shape(x)[0]
  7.     h = np.zeros(n)
  8.     for i in range(1, n):
  9.         h[i] = (x[i] - x[i - 1])
  10.  
  11.     sum = 0
  12.     for i in range(1, np.shape(h)[0]):
  13.         sum += h[i]*func((x[i-1]+x[i])/2)
  14.  
  15.     return sum
  16.  
  17. def Trapeze(func, X0, Xk, step):
  18.     x = np.arange(X0, Xk + step, step)
  19.     n = np.shape(x)[0]
  20.     h = np.zeros(n)
  21.     for i in range(1, n):
  22.         h[i] = (x[i] - x[i - 1])
  23.  
  24.     sum = 0
  25.     for i in range(1, np.shape(h)[0]):
  26.         sum += (func(x[i])+func(x[i-1]))*h[i]
  27.  
  28.     return sum/2
  29.  
  30. def Simpson(func, X0, Xk, step):
  31.     x = np.arange(X0, Xk + step, step)
  32.     n = np.shape(x)[0]
  33.     h = np.zeros(n)
  34.     for i in range(1, n):
  35.         h[i] = (x[i] - x[i - 1])
  36.  
  37.     sum = 0
  38.     for i in range(1, np.shape(h)[0]):
  39.         sum += (func(x[i-1])+4*func((x[i-1]+x[i])/2)+func(x[i]))*(h[i]/2)
  40.  
  41.     return sum/3
  42.  
  43. def RungeRombertRichardson(F1, F2, h1, h2, p):
  44.     if h1 < h2:
  45.         return F1 + (F1 - F2) / ((h2 / h1) ** p - 1)
  46.     return F2 + (F2 - F1) / ((h1 / h2) ** p - 1)
  47.  
  48. X0 = -2; Xk = 2
  49. h1 = 1; h2 = 0.5
  50. rect1 = Rectangle(f, X0, Xk, h1)
  51. rect2 = Rectangle(f, X0, Xk, h2)
  52. rect_RRR = RungeRombertRichardson(rect1, rect2, h1, h2, 1)
  53. trapeze1 = Trapeze(f, X0, Xk, h1)
  54. trapeze2 = Trapeze(f, X0, Xk, h2)
  55. trapeze_RRR = RungeRombertRichardson(trapeze1, trapeze2, h1, h2, 2)
  56. simpson1 = Simpson(f, X0, Xk, h1)
  57. simpson2 = Simpson(f, X0, Xk, h2)
  58. simpson_RRR = RungeRombertRichardson(simpson1, simpson2, h1, h2, 4)
  59.  
  60. print("Метод прямоугольников:")
  61. print(f"h1 = {h1}: F = {rect1}")
  62. print(f"h2 = {h2}: F = {rect2}")
  63. print(f"Уточнение методом Рунге-Ромберга-Ричардсона: F = {rect_RRR}")
  64. print(f"Погрешности: {abs(rect_RRR-rect1)} и {abs(rect_RRR-rect2)}\n")
  65. print("Метод трапеций:")
  66. print(f"h1 = {h1}: F = {trapeze1}")
  67. print(f"h2 = {h2}: F = {trapeze2}")
  68. print(f"Уточнение методом Рунге-Ромберга-Ричардсона: F = {trapeze_RRR}")
  69. print(f"Погрешности: {abs(trapeze_RRR - trapeze1)} и {abs(trapeze_RRR - trapeze2)}\n")
  70.  
  71. print("Метод Симпсона:")
  72. print(f"h1 = {h1}: F = {simpson1}")
  73. print(f"h2 = {h2}: F = {simpson2}")
  74. print(f"Уточнение методом Рунге-Ромберга-Ричардсона: F = {simpson_RRR}")
  75. print(f"Погрешности: {abs(simpson_RRR - simpson1)} и {abs(simpson_RRR - simpson2)}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement