| | |
| | | |
| | | 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) = (1, 1) |
| | | (n, parts) = (0, 1) |
| | | while abs(s_right - s_left) > epsilon: |
| | | x = [a, b] # debug only |
| | | parts = 2 * parts |
| | | dx = dx / 2 |
| | | n += 1 |
| | | print(n, " → ", parts) |
| | | # print(n, " → ", parts) |
| | | for i in range(1, parts, 2): |
| | | x.insert(i, a + i * dx) # debug only |
| | | x.insert(i, a + i * dx) |
| | | 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 |
| | | return x, y, s_left, s_right, n |
| | | |
| | | |
| | | def numint_compact(f, a, b, epsilon=1e-3): |
| | |
| | | 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 |