Я просто пытаюсь построить двух гауссиан и найти точку пересечения. У меня есть следующий код. Это не означает точное пересечение, и я действительно не могу понять, почему. Это всего лишь чуть-чуть, но я работал через производное решение, если мы взяли журнал вычитаемых гауссианцев, и да, похоже, что это должно быть правильно. Может ли кто-нибудь помочь? Спасибо огромное!Пересечение между гауссовскими
import numpy as np
import matplotlib.pyplot as plt
def plot_normal(x, mean = 0, sigma = 1):
return 1.0/(2*np.pi*sigma**2) * np.exp(-((x-mean)**2)/(2*sigma**2))
# found online
def solve_gasussians(m1, s1, m2, s2):
a = 1.0/(2.0*s1**2) - 1.0/(2.0*s2**2)
b = m2/(s2**2) - m1/(s1**2)
c = m1**2 /(2*s1**2) - m2**2/(2.0*s2**2) - np.log(s2/s1)
return np.roots([a,b,c])
s1 = np.linspace(0, 10,300)
s2 = np.linspace(0, 14, 300)
solved_val = solve_gasussians(5.0, 0.5, 7.0, 1.0)
print solved_val
solved_val = solved_val[0]
plt.figure('Baseline Distributions')
plt.title('Baseline Distributions')
plt.xlabel('Response Rate')
plt.ylabel('Probability')
plt.plot(s1, plot_normal(s1, 5.0, 0.5),'r', label='s1')
plt.plot(s2, plot_normal(s2, 7.0, 1.0),'b', label='s2')
plt.plot(solved_val, plot_normal(solved_val, 7.0, 1.0), 'mo')
plt.legend()
plt.show()
Можете ли вы указать нам на решение, которое вы нашли в Интернете, так что мы не нужно пытаться извлечь его для себя? –
Я думаю, что решение, на которое они ссылаются, может быть этим [SO question] (http://stackoverflow.com/a/22579904/752843). Поэтому мы не можем полностью обвинить их в ужасном отсутствии комментариев в коде. – Richard
@ Рихард, вот что я думаю тоже. –