2024-10-02 06:28:59 发布
网友
我有两个高斯图:
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):
你想找到x,使得两个高斯函数有相同的高度
你可以把两个高斯函数等价,然后解x。最后你会得到一个二次方程,它的系数与高斯均值和方差有关。以下是最终结果:
输出为:
可以绘制找到的交点:
情节将是:
如果高斯数有多个交集,代码也会找到所有交集(比如m1=2.5,std1=3.0,m2=5.0,std2=1.0):
相关问题 更多 >
编程相关推荐