Python: нахождение точки пересечения двух гауссовских кривых

У меня два гаусских сюжета:

x = np.linspace(-5,9,10000) plot1=plt.plot(x,mlab.normpdf(x,2.5,1)) plot2=plt.plot(x,mlab.normpdf(x,5,1)) 

и я хочу найти точку, в которой пересекаются две кривые. Есть ли способ сделать это? В частности, я хочу найти значение координаты x, где они встречаются.

Вы хотите найти x так, чтобы обе гауссовые функции имели одинаковую высоту (т.е. пересекались)

Вы можете сделать это, приравняв две гауссовские функции и решив для x. В итоге вы получите квадратичное уравнение с коэффициентами, относящимися к гауссовским средним и дисперсиям. Вот окончательный результат:

 import numpy as np def solve(m1,m2,std1,std2): a = 1/(2*std1**2) - 1/(2*std2**2) b = m2/(std2**2) - m1/(std1**2) c = m1**2 /(2*std1**2) - m2**2 / (2*std2**2) - np.log(std2/std1) return np.roots([a,b,c]) m1 = 2.5 std1 = 1.0 m2 = 5.0 std2 = 1.0 result = solve(m1,m2,std1,std2) 

Выход:

 array([ 3.75]) 

Вы можете построить найденные пересечения:

 x = np.linspace(-5,9,10000) plot1=plt.plot(x,mlab.normpdf(x,m1,std1)) plot2=plt.plot(x,mlab.normpdf(x,m2,std2)) plot3=plt.plot(result,mlab.normpdf(result,m1,std1),'o') 

Сюжет будет: введите описание изображения здесь

Если ваши гауссианы имеют несколько пересечений, код также найдет их все (скажем, m1 = 2.5, std1 = 3.0, m2 = 5.0, std2 = 1.0): введите описание изображения здесь