1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| 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
| x = [a, b] # debug only
| y = [f(a), f(b)]
| s_left = dx * y[0]
| s_right = dx * y[1]
| (n, parts) = (0, 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):
| x.insert(i, a + i * dx)
| y.insert(i, f(a + i * dx))
| s_left = sum(y[0:-1]) * dx
| s_right = sum(y[1:]) * dx
| return x, y, s_left, s_right, n
|
|
| 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
| for i in range(1, parts, 2):
| y = f(a + i*dx)
| y_l += y
| y_r += y
| s_left = y_l * dx
| s_right = y_r * dx
| return s_left, s_right
|
|