Поровну разделить площадь под кривой - PullRequest
0 голосов
/ 01 марта 2020

У меня есть кривая ay = sin (x), а x находится между 0 и пи (первый квадрант - без отрицательных значений). Примерно так:

enter image description here

Я хочу равным разделить площадь под кривой до n штук и получить (наибольшее) значение х для каждого куска.

Любые идеи будут признательны за алгоритм.

1 Ответ

3 голосов
/ 02 марта 2020

Площадь под кривой является ее интегралом. Интеграл от sin(x) от 0 до u равен 1-cos(u), поэтому интеграл от 0 до π равен 2. Обращение этой формулы находит точки t, для которых u получает определенное значение. Итак, мы ищем значения t=acos(1-u) для значений u, которые делят [0, 2] на n равные части.

В коде:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-0.2, 3.3, 500)
y = np.sin(x)
plt.plot(x, y)

n = 7
u = np.linspace(0, 2, n + 1, endpoint=True)
t = np.arccos(1 - u)
print("The limits of the areas are:", list(t))

colors = plt.cm.Set2.colors
for i in range(n):
    filter = (x > t[i]) & (x <= t[i + 1])
    plt.fill_between(x[filter], 0, y[filter], color=colors[i])
plt.xticks(t)
plt.gca().spines['bottom'].set_position('zero')
plt.gca().spines['top'].set_color('none')
plt.gca().spines['right'].set_color('none')
plt.tight_layout()
plt.show()

resulting plot

...