2014-02-12 25 views
0

我希望你能爲我處理以下任務的一些有用的提示:如何解決使用Python的1參數方程

我寫了一些簡單的Python代碼片段繪製概率密度函數。在我的具體情況下,讓它們表示某些參數x的類條件概率。

所以,我想知道是否有Python中的巧妙方法(即模塊)(可能通過NumPy或SciPy函數或方法)來解決參數x的簡單公式。 例如,

pdf(x, mu=10, sigma=3**0.5)/pdf(x, mu=20, sigma=2**0.5) = 1
# get x

現在,我只能在這裏我使用類似 x = np.arange(0, 50, 0.000001),並保持x的值在產生1最接近 值向量的蠻力方法的東西計算比率pdf1/pdf2.

下面當代碼我寫以計算PDF並繪製比例:

def pdf(x, mu=0, sigma=1): 
    """Calculates the normal distribution's probability density 
     function (PDF). 

    """ 
    term1 = 1.0/(math.sqrt(2*np.pi) * sigma) 
    term2 = np.exp(-0.5 * ((x-mu)/sigma)**2) 
    return term1 * term2 


x = np.arange(0, 100, 0.05) 

pdf1 = pdf(x, mu=10, sigma=3**0.5) 
pdf2 = pdf(x, mu=20, sigma=2**0.5) 

# ... 
# ratio = pdf1/pdf2 
# plt.plot(x, ratio) 

謝謝!

+1

聽起來你需要一本關於數值方法的書,而不是Python編程建議。這裏有一個提示 - 將方程改寫爲'[pdf(x,...)/ pdf(x ...)] - 1 = 0',並通過最小化或根發現來解決此問題。 – talonmies

+1

我認爲如果你在一張紙上寫下方程式,你可以用數值方法直接解決這個問題。 – Evert

+0

當然,但我想將它實現到Python代碼中,因爲我想直接用伴隨圖形繪製這些點。 – Sebastian

回答

1

既然你有一個很好的封閉形式方程,你可以用SymPy來解決它。

我值塞緊musigma並進入Sympy Gamma此:

solve(1.0/(sqrt(2*pi) *(3**0.5)) * exp(-0.5 * ((x-10)/(3**0.5))**2)/(1.0/(sqrt(2*pi) *(2**0.5)) * exp(-0.5 * ((x-20)/(2**0.5))**2))-1,x) 

結果:15.4554936768195

相關問題