Python 生成雙峰分布的概率密度函數並畫圖


鑒於單峰的狀態分布公式是:

f(x)=(1/((2π)^0.5)*σ)exp-((x-a)^2/(2*σ^2))

於是N個平均值。標准差值不同的正態分布公式應當是

f(x)= ∑(ki/((2π)^0.5)*σi)exp-((x-ai)^2/(2*σi^2))

以上求和是針對i的。這里每個i對應一個獨立的平均值ai、標准差σi,以及它的概率峰位置,而各個ki是一個系數,並且它們的合計值=1.

顯然以上函數對自變量x的積分=1.所以它符合概率密度函數的自然要求。

以下是代碼

import numpy as np

import matplotlib.pyplot as plt


class TwoNomal():
    def __init__(self,mu1,mu2,sigma1,sigma2):
        self.mu1 = mu1
        self.sigma1 = sigma1
        self.mu2 = mu2
        self.sigma2 = sigma2
    def doubledensity(self,x):
            mu1 = self.mu1
            sigma1 = self.sigma1
            mu2 = self.mu2
            sigma2 = self.sigma1
            N1 = np.sqrt(2 * np.pi * np.power(sigma1, 2))
            fac1 = np.power(x - mu1, 2) / np.power(sigma1, 2)
            density1=np.exp(-fac1/2)/N1

            N2 = np.sqrt(2 * np.pi * np.power(sigma2, 2))
            fac2 = np.power(x - mu2, 2) / np.power(sigma2, 2)
            density2=np.exp(-fac2/2)/N2
            #print(density1,density2)
            density=0.5*density2+0.5*density1
            return density


N2 = TwoNomal(10,80,10,10)

#創建等差數列作為X
X = np.arange(-20,120,0.05)
#print(X)
Y = N2.doubledensity(X)

#print(Y)
plt.plot(X,Y,'b-',linewidth=3)

plt.show()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM