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 坐标的值。
Answers
您想找到 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')
情节将是:
如果您的高斯有多个交点,代码也会找到所有交点(例如 m1u003d2.5,std1u003d3.0,m2u003d5.0,std2u003d1.0):
更多推荐

所有评论(0)