Python:寻找两条高斯曲线的交点

2024-10-02 06:28:59 发布

您现在位置: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坐标的值。


Tags: plotnpplt曲线办法mlablinspaceplot1
1条回答
网友
1楼 · 发布于 2024-10-02 06:28:59

你想找到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')

情节将是: enter image description here

如果高斯数有多个交集,代码也会找到所有交集(比如m1=2.5,std1=3.0,m2=5.0,std2=1.0): enter image description here

相关问题 更多 >

    热门问题