曲线下的等分区域

问题描述 投票:-1回答:1

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

enter image description here

我想均等将曲线下的区域划分为n个片段,并获得每个片段的(最大)x值。

对于算法,任何想法都会受到赞赏。

algorithm math nonlinear-optimization
1个回答
0
投票

曲线下的面积是其整数。 sin(x)0u的积分是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

© www.soinside.com 2019 - 2024. All rights reserved.