python怎么用gamma函数_如何通俗的理解伽马(gamma)函数
如何通俗的理解伽馬(gamma)函數 - 直覺,求導和示例
我為什么要在乎garmma分布?
使用伽馬函數定義了許多概率分布,例如伽馬分布,Beta分布,狄利克雷分布,卡方分布和學生t分布等。 對于數據科學家,機器學習工程師,研究人員來說,伽馬函數可能是一種最廣泛使用的功能,因為它已在許多分布中使用。然后將這些分布用于貝葉斯推理,隨機過程(例如排隊模型),生成統計模型(例如潛在狄利克雷分配)和變分推理。因此,如果您很好地了解了Garmma功能,您將對其中出現的許多應用程序有更好的了解!
1.為什么需要伽瑪功能?因為我們要泛化階乘!
階乘函數僅針對離散點(對于正整數-上圖中的黑點)定義,但是我們希望連接黑點。我們想將階乘函數擴展到所有復數。階乘的簡單公式x!= 1 * 2 … x,不能直接用于小數值,因為它僅在x是整數時才有效。 因此,數學家一直在尋找...“什么樣的function將這些點平滑地連接起來,并為我們提供所有實際值的階乘?”
但是,他們找不到可以表示x的和,乘積,冪,指數或對數的* 有限*組合!直到…的實數.
2.歐拉發現了伽瑪函數。(在18世紀)
上面的公式用于找到z的任何實數值的Gamma函數的值。 假設您要計算Γ(4.8)。您將如何解決上述整合? 可以手動計算Γ(4.8)嗎?也許使用零件積分?
試試看,讓我知道您是否找到有趣的方式!對于我(以及到目前為止的許多其他人)而言,沒有快速簡便的方法手動評估分數的Gamma函數。(如果您有興趣用手解決它,這是一個很好的起點。) 好吧,那么就不用分析了。您能否實現從0到無窮大的積分-以編程方式添加術語“無限次”?
您可以通過幾種方法來實現。最常用的兩種實現是斯特林近似 和Lanczos近似。[For implementation addicts:] For implementation addicts: the codes of Gamma function (mostly Lanczos approximation) in 60+ different language - C, C++, C#, python, java, etc.
讓我們計算Γ(4.8)使用計算機在已經實現的。
我們得到了17.837。 正如我們所期望的,17.837介于3!(=Γ(4)= 6)和4!(=Γ(5)= 24)之間。 (當z是自然數時,Γ(z)=(z-1)!我們將很快證明這一點。) 與只需要正整數的階乘不同,我們可以將任何實數/復數輸入z,包括負數。Gamma函數連接黑點,并很好地繪制曲線。Confusion-buster: 我們正在積分從0到無窮大的x(NOT z)。 ? x是正在集成的輔助變量。 ? 我們沒有將4.8插入x。我們將4.8插入z。
3. Gamma函數如何對階乘函數進行插值?
如果看一下Gamma函數,您會注意到兩件事。 首先,相對于z,它絕對是一個遞增函數。 其次,當z是自然數時,Γ(z + 1)= z! (我保證我們會盡快證明這一點!) 因此,我們可以期望Gamma函數連接階乘。
Gamma函數如何以當前項x ^ z和e ^ -x結束? 我不確切知道歐拉的思維過程是什么,但是他是發現自然數e的那個人,因此他必須做很多實驗,將e與其他函數相乘才能找到當前形式。
4. Gamma函數的圖形是什么樣的?
當x變為無窮大∞時,第一項(x ^ z)也變為無窮大∞,但是第二項(e ^ -x)變為零。然后,伽瑪函數會收斂到有限值嗎?
我們可以使用L'H?pital規則嚴格證明它收斂。但是我們也可以毫不費力地看到它的融合。如果您考慮一下,我們正在積分x ^ z(一個多項式遞增函數) 和e ^ -x(一個 指數遞減函數)的乘積。因為e ^ -x的值 下降快于x ^ z的值,所以Gamma函數很可能收斂并具有有限的值。 讓我們繪制每個圖形,因為眼見為實。
x ^ z * e ^ -x的圖 讓我們看一下Γ(4.8)的情況。
圖下綠色陰影區域從0到無窮大,Γ(4.8)= 3.8! Python代碼用于生成上面的漂亮圖。自己繪制,看看z如何改變Gamma函數的形狀!
########################
# f(x) = exp(-x) graph #
########################
import matplotlib.pyplot as plt
import numpy as np
# Create x and y
x = np.linspace(-2, 20, 100)
y = np.exp(-x)
# Create the plot
fig, ax = plt.subplots()
plt.plot(x, y, label='f(x) = exp(-x)', linewidth=3, color='palegreen')
# Make the x=0, y=0 thicker
ax.set_aspect('equal')
ax.grid(True, which='both')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
# Add a title
plt.title('f(x) = exp(-x)', fontsize=20)
# Add X and y Label
plt.xlabel('x', fontsize=16)
plt.ylabel('f(x)', fontsize=16)
# Add a grid
plt.grid(alpha=.4, linestyle='--')
# Show the plot
plt.show()
####################
# f(x) = x^z graph #
####################
import matplotlib.pyplot as plt
import numpy as np
# Create x and y
x = np.linspace(0, 2, 100)
y1 = x**1.3
y2 = x**2.5
y3 = x**3.8
# Create the plot
fig, ax = plt.subplots()
plt.plot(x, y1, label='f(x) = x^1.3', linewidth=3, color='palegreen')
plt.plot(x, y2, label='f(x) = x^2.5', linewidth=3, color='yellowgreen')
plt.plot(x, y3, label='f(x) = x^3.8', linewidth=3, color='olivedrab')
# Make the x=0, y=0 thicker
ax.set_aspect('equal')
ax.grid(True, which='both')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
# Add a title
plt.title('f(x) = x^z', fontsize=20)
# Add X and y Label
plt.xlabel('x', fontsize=16)
plt.ylabel('f(x)', fontsize=16)
# Add a grid
plt.grid(alpha=.4, linestyle='--')
# Add a Legend
plt.legend(bbox_to_anchor=(1, 1), loc='best', borderaxespad=1, fontsize=12)
# Show the plot
plt.show()
###############################
# f(x) = x^(3.8)*e^(-x) graph #
###############################
import matplotlib.pyplot as plt
import numpy as np
# Create x and y
x = np.linspace(0, 20, 100)
y = x**3.8 * np.exp(-x)
# Create the plot
fig, ax = plt.subplots()
plt.plot(x, y, label='f(x) = x^(3.8) * np.exp(-x)', linewidth=3, color='palegreen')
ax.fill_between(x, 0, y, color='yellowgreen')
# Make the x=0, y=0 thicker
ax.set_aspect('equal')
ax.grid(True, which='both')
ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')
# Add a title
plt.title('f(x) = x^(3.8)*e^(-x) ', fontsize=20)
# Add X and y Label
plt.xlabel('x', fontsize=16)
plt.ylabel('f(x)' ,fontsize=16)
# Add a grid
plt.grid(alpha=.4, linestyle='--')
# Add a Legend
plt.legend(bbox_to_anchor=(1, 1), loc='upper right', borderaxespad=1, fontsize=12)
# Show the plot
plt.show()
5.伽瑪函數屬性
如果您從這篇文章中刪除一件事,應該是本節。
> 給定z> 1 Γ(z)=(z-1)*Γ(z-1) 或將其寫為 Γ(z + 1)= z *Γ(z)
讓我們使用部分集成和Gamma函數的定義來證明它.
如果n是一個正整數 C(n)=(n-1)!
什么是Γ(1) ?
因此,Γ(n)=(n-1)!
您可能還已經看到表達式Γ(n + 1)= n!而不是 Γ(n)=(n-1)!。 這只是使右手邊n!,而不是(n-1)! 我們所做的就是將n移1。
6.使用Gamma函數的屬性,顯示Gamma分布的PDF積分為1。
快速回顧一下Gamma“分布”(不是Gamma“函數”!):Gamma分布直覺和推導。 證明如下:
問答:伽瑪功能多大了? 很老。大約300年。(您是否正在研究將在300年后使用的東西?;) 有趣的旁注:歐拉(Euler)在64歲時失明,但是在失明后他完成了近一半作品。
一些有趣的價值觀: C(1/2)=平方( ) 許多有趣的方式來表明這一點: Γ(1/2) = sqrt( ) Γ(-1) = Γ(-2) = Γ(-3) = infinity 你能證明這些嗎? 3.這是快速查看Gamma函數圖的實數。
伽馬函數Γ(z)用藍色繪制,而Γ(z)+ sin(πz)用綠色繪制。(請注意正整數處的交點,因為sin(πz)為零!)兩者都是對非整數的階乘分解的有效解析延續。
總結
以上是生活随笔為你收集整理的python怎么用gamma函数_如何通俗的理解伽马(gamma)函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 福师计算机应用基础在线作业二及答,福师《
- 下一篇: run till exit from #