def split(iteration=8): (a, b) = (0, 8) x = [a, b] parts = 1 dx = (b - a) for n in range(1, iteration + 1): print(n, end=" → ") parts = 2 * parts dx = dx / 2 for i in range(1, parts, 2): print(i, end=" ") x.insert(i, a + i * dx) print("\n ", x) pass def numint(f, a, b, epsilon=1e-3): dx = b - a y = [f(a), f(b)] s_left = dx * y[0] s_right = dx * y[1] (n, parts) = (1, 1) while abs(s_right - s_left) > epsilon: x = [a, b] # debug only parts = 2 * parts dx = dx / 2 n += 1 print(n, " → ", parts) for i in range(1, parts, 2): x.insert(i, a + i * dx) # debug only y.insert(i, f(a + i * dx)) # print(i, end=" ") # print() # print(" ", x) # print(" ", y) s_left = sum(y[0:-1]) * dx s_right = sum(y[1:]) * dx return s_left, s_right def numint_compact(f, a, b, epsilon=1e-3): dx = b - a y_l = f(a) y_r = f(b) s_left = dx * y_l s_right = dx * y_r (n, parts) = (1, 1) while abs(s_right - s_left) > epsilon: parts = 2 * parts dx = dx / 2 n += 1 print(n, " → ", parts) for i in range(1, parts, 2): # print(i, end=" ") y = f(a + i*dx) y_l += y y_r += y print() # print(" ", x) # print(" ", y) s_left = y_l * dx s_right = y_r * dx return s_left, s_right