等分曲线下的面积

Equally divide area under a curve

我有一条 y = sin(x) 曲线,x 在 0 和 pi 之间(第一象限 - 无负值)。像这样:

我想平均 将曲线下的面积划分为n 块,并获得每块的(最大)x 值。

对于算法的任何想法都将不胜感激。

曲线下的面积是它的积分。 sin(x)0u的积分是1-cos(u),所以从0π的积分是2。反转该公式可找到 tu 获得特定值的点。因此,我们正在寻找将 [0, 2] 分成 n 等份的 u 值的值 t=acos(1-u)

在代码中:

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()

虽然这不完全是必然的答案,但也许会很有趣。 将相关区域分成三个相等的部分。 在OA的基础上,和在斜边上一样,建一个直角三角形,腿的比例[​​=12=]=4:5。从 C 点升高垂直线。将垂直线也对称地移动到右侧。分工完成。误差约 1%。 现在就优点/必须使用循环公式:X0= 0, X(i+1)= X(i)+Δ(i+1); Δ(i+1)= arccossqrt((p(i))^2-q(i))-p(i)),其中 p(i)= cos(X(i))(2/n-cos( X(i)); q(i)= cos(2X(i))+4/n(1/n-cos(X(i))