python - 如何找到曲线下的面积?

Sam*_*mKJ 4 python numpy matplotlib scipy

想问一下是否可以计算拟合分布曲线的曲线下面积?

曲线看起来像这样

在此处输入图片说明

我在网上看到了一些关于 trapz 使用的帖子,但我不确定它是否适用于这样的曲线。请赐教并感谢您的帮助!

xnx*_*xnx 6

如果您的分布 ,f是在x您知道的一组点 上离散化的,那么您可以使用scipy.integrate.trapzscipy.integrate.simps直接(传递fx作为该顺序的参数)。为了快速检查(例如,您的分布是标准化的),只需将 的值相加f并乘以网格间距:

import numpy as np
from scipy.integrate import trapz, simps

x, dx = np.linspace(-100, 250, 50, retstep=True)
mean, sigma = 90, 20
f = np.exp(-((x-mean)/sigma)**2/2) / sigma / np.sqrt(2 * np.pi)
print('{:18.16f}'.format(np.sum(f)*dx))
print('{:18.16f}'.format(trapz(f, x)))
print('{:18.16f}'.format(simps(f, x)))
Run Code Online (Sandbox Code Playgroud)

输出:

1.0000000000000002
0.9999999999999992
1.0000000000000016
Run Code Online (Sandbox Code Playgroud)