Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- eps = 1e-6
- V = 8
- def f(x, y):
- return 3 * x * x - 2 * V * x
- def check_y(x):
- return x*x*(x - V)
- def euler(n, h, x0, y0):
- x = [0] * n
- x[0] = x0
- for i in range(n - 1):
- x[i + 1] = x[i] + h
- y = [0] * n
- y[0] = y0
- for i in range(n - 1):
- y[i + 1] = y[i] + h * f(x[i], y[i])
- return y
- def ex_euler(n, h, x0, y0):
- x = [0] * (2 * n)
- x[0] = x0
- for i in range(2 * n - 1):
- x[i + 1] = x[i] + h / 2
- y = [0] * (2 * n)
- y[0] = y0
- for i in range(2 * n - 1):
- if i % 2:
- y[i + 1] = y[i - 1] + h * f(x[i], y[i])
- else:
- y[i + 1] = y[i] + h / 2 * f(x[i], y[i])
- res = [0] * n
- for i in range(n):
- res[i] = y[2 * i]
- return res
- def print_result(vx, vy):
- for x in vx:
- print(f"{x:.2f}", end="\t")
- print()
- for x in vy:
- print(f"{x:.2f}", end="\t")
- print()
- for x in vx:
- print(f"{check_y(x):.2f}", end="\t")
- print()
- for i in range(len(vy)):
- print(f"{vy[i] - check_y(vx[i]):.2f}", end="\t")
- print()
- mx = 0
- for i in range(len(vy)):
- mx = max(mx, abs(vy[i] - check_y(vx[i])))
- print(f"Максимальное отклонение: {mx:.5f}")
- def solve():
- n = 13
- h = 1e-0
- x0 = 1
- y0 = 0
- vx = [0] * n
- vx[0] = x0
- for i in range(1, n):
- vx[i] = vx[i - 1] + h
- print("Метод Эйлера:")
- vy1 = euler(n, h, x0, y0)
- print_result(vx, vy1)
- print()
- print("Расширенный метод Эйлера:")
- vy2 = ex_euler(n, h, x0, y0)
- print_result(vx, vy2)
- print()
- if __name__ == "__main__":
- solve()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement