Рассчитать площадь перекрытия двух функций

Мне нужно рассчитать область, где две функции перекрываются. Я использую нормальные распределения в этом конкретном упрощенном примере, но мне нужна более общая процедура, которая также адаптируется к другим функциям.

Смотрите изображение ниже, чтобы понять, что я имею в виду, где красная область - это то, что я ищу:

Это MWE у меня так далеко:

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

# Generate random data uniformly distributed.
a = np.random.normal(1., 0.1, 1000)
b = np.random.normal(1., 0.1, 1000)

# Obtain KDE estimates foe each set of data.
xmin, xmax = -1., 2.
x_pts = np.mgrid[xmin:xmax:1000j]
# Kernels.
ker_a = stats.gaussian_kde(a)
ker_b = stats.gaussian_kde(b)
# KDEs for plotting.
kde_a = np.reshape(ker_a(x_pts).T, x_pts.shape)
kde_b = np.reshape(ker_b(x_pts).T, x_pts.shape)


# Random sample from a KDE distribution.
sample = ker_a.resample(size=1000)

# Compute the points below which to integrate.
iso = ker_b(sample)

# Filter the sample.
insample = ker_a(sample) < iso

# As per Monte Carlo, the integral is equivalent to the
# probability of drawing a point that gets through the
# filter.
integral = insample.sum() / float(insample.shape[0])

print integral

plt.xlim(0.4,1.9)
plt.plot(x_pts, kde_a)
plt.plot(x_pts, kde_b)

plt.show()

где я применяюMonte Carlo получить интеграл.

Проблема этого метода заключается в том, что при оценке точек выборки в любом распределенииker_b(sample) (или жеker_a(sample)) Я получаю значенияпрямо над линия KDE. Из-за этого даже четко перекрывающиеся распределения, которые должны возвращать значение общей / перекрытой области, очень близкое к 1., возвращают вместо небольших значений (общая площадь любой кривой равна 1., поскольку они являются оценками плотности вероятности).

Как я могу исправить этот код, чтобы дать ожидаемые результаты?

Вот как я применил ответ Жени

# Calculate overlap between the two KDEs.
def y_pts(pt):
    y_pt = min(ker_a(pt), ker_b(pt))
    return y_pt
# Store overlap value.
overlap = quad(y_pts, -1., 2.) 

Ответы на вопрос(2)

Ваш ответ на вопрос