Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def f(x):
- return 1 / (x ** 2 + 4)
- def Rectangle(func, X0, Xk, step):
- x = np.arange(X0, Xk + step, step)
- n = np.shape(x)[0]
- h = np.zeros(n)
- for i in range(1, n):
- h[i] = (x[i] - x[i - 1])
- sum = 0
- for i in range(1, np.shape(h)[0]):
- sum += h[i]*func((x[i-1]+x[i])/2)
- return sum
- def Trapeze(func, X0, Xk, step):
- x = np.arange(X0, Xk + step, step)
- n = np.shape(x)[0]
- h = np.zeros(n)
- for i in range(1, n):
- h[i] = (x[i] - x[i - 1])
- sum = 0
- for i in range(1, np.shape(h)[0]):
- sum += (func(x[i])+func(x[i-1]))*h[i]
- return sum/2
- def Simpson(func, X0, Xk, step):
- x = np.arange(X0, Xk + step, step)
- n = np.shape(x)[0]
- h = np.zeros(n)
- for i in range(1, n):
- h[i] = (x[i] - x[i - 1])
- sum = 0
- for i in range(1, np.shape(h)[0]):
- sum += (func(x[i-1])+4*func((x[i-1]+x[i])/2)+func(x[i]))*(h[i]/2)
- return sum/3
- def RungeRombertRichardson(F1, F2, h1, h2, p):
- if h1 < h2:
- return F1 + (F1 - F2) / ((h2 / h1) ** p - 1)
- return F2 + (F2 - F1) / ((h1 / h2) ** p - 1)
- X0 = -2; Xk = 2
- h1 = 1; h2 = 0.5
- rect1 = Rectangle(f, X0, Xk, h1)
- rect2 = Rectangle(f, X0, Xk, h2)
- rect_RRR = RungeRombertRichardson(rect1, rect2, h1, h2, 1)
- trapeze1 = Trapeze(f, X0, Xk, h1)
- trapeze2 = Trapeze(f, X0, Xk, h2)
- trapeze_RRR = RungeRombertRichardson(trapeze1, trapeze2, h1, h2, 2)
- simpson1 = Simpson(f, X0, Xk, h1)
- simpson2 = Simpson(f, X0, Xk, h2)
- simpson_RRR = RungeRombertRichardson(simpson1, simpson2, h1, h2, 4)
- print("Метод прямоугольников:")
- print(f"h1 = {h1}: F = {rect1}")
- print(f"h2 = {h2}: F = {rect2}")
- print(f"Уточнение методом Рунге-Ромберга-Ричардсона: F = {rect_RRR}")
- print(f"Погрешности: {abs(rect_RRR-rect1)} и {abs(rect_RRR-rect2)}\n")
- print("Метод трапеций:")
- print(f"h1 = {h1}: F = {trapeze1}")
- print(f"h2 = {h2}: F = {trapeze2}")
- print(f"Уточнение методом Рунге-Ромберга-Ричардсона: F = {trapeze_RRR}")
- print(f"Погрешности: {abs(trapeze_RRR - trapeze1)} и {abs(trapeze_RRR - trapeze2)}\n")
- print("Метод Симпсона:")
- print(f"h1 = {h1}: F = {simpson1}")
- print(f"h2 = {h2}: F = {simpson2}")
- print(f"Уточнение методом Рунге-Ромберга-Ричардсона: F = {simpson_RRR}")
- print(f"Погрешности: {abs(simpson_RRR - simpson1)} и {abs(simpson_RRR - simpson2)}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement