JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

伽瑪函數:任意數的階乘

階乘只認得整數,而伽瑪函數悄悄填上了所有空隙——讓 (1/2)! 有了意義,把一條光滑曲線穿過 1、2、6、24,並一直延伸到複平面。

一個揮之不去的問題

歡迎來到特殊函數的參考書架。架上的第一本就是伽瑪函數,它回答了一個在你真正動手之前顯得近乎幼稚的問題:(1/2)! 是多少?階乘 5! = 5 乘 4 乘 3 乘 2 乘 1 是靠反覆相乘搭出來的,而反覆相乘只有在整數次時才說得通。可是把點 (1, 1)、(2, 2)、(3, 6)、(4, 24)、(5, 120) 畫出來,你幾乎能看到一條光滑曲線想要穿過它們。伽瑪函數就是把這條曲線精確化的結果。

先得坦白一個微妙之處:穿過任意一組點的光滑曲線有無窮多條。把伽瑪函數挑出來的,不只是光滑,而是一條結構性質——它繼承了階乘自身「乘以自變量」的規則,並且(玻爾–莫勒魯普定理)它是唯一同時還滿足對數凸性的這種曲線。所以我們並不是隨意選取,而是選了那條不僅在整數處、而是處處都像階乘的曲線。

歐拉積分:正式定義

下面是真正幹活的定義,出自歐拉。對任何實部為正的 x,有 Gamma(x) = 從 0 到無窮對 t^{x-1} e^{-t} dt 的積分。注意這在兩個意義上都是反常積分——它一直積到無窮,而當 x 小於 1 時因子 t^{x-1} 會在 t = 0 附近發散。這兩個威脅都很溫順:e^{-t} 比任何冪次增長得都快地壓垮尾部,而在零點附近只要 x 的實部大於 0,那個輕微的奇性就是可積的。所以積分收斂,並為每一個這樣的 x 定義了一個真正的、無窮光滑的函數。

我們把最簡單的情形算出來,看看這條曲線是否真的穿過了階乘。取 x = 1:Gamma(1) = 從 0 到無窮對 e^{-t} dt 的積分 = 1。這就是種子。要從一個整數爬到下一個整數,我們需要遞迴關係——而這個遞迴關係正好從分部積分裡掉出來,你在第一卷就為普通積分見過它。

遞迴關係:階乘的棲身之處

對 Gamma(x+1) = 從 0 到無窮對 t^x e^{-t} dt 的積分做分部積分,把 t^x 求導、把 e^{-t} 積分。邊界項 t^x 乘 (-e^{-t}) 在兩端都消失——在 t = 0 處為零,在無窮處被指數壓垮——剩下的是 x 乘以 t^{x-1} e^{-t} 的積分,而那正是 Gamma(x)。結果就是整個主題的心跳:Gamma(x+1) = x Gamma(x)

Gamma(x+1) = integral_0^inf t^x e^{-t} dt
  u = t^x          dv = e^{-t} dt
  du = x t^{x-1}    v  = -e^{-t}
  = [ -t^x e^{-t} ]_0^inf  +  x integral_0^inf t^{x-1} e^{-t} dt
  =        0               +  x * Gamma(x)
=> Gamma(x+1) = x Gamma(x)        (the factorial step)
Seed: Gamma(1) = 1  =>  Gamma(2)=1, Gamma(3)=2, Gamma(4)=6, ...
一次分部積分就把歐拉積分變成階乘遞迴;種子 Gamma(1)=1 再把它沿整數逐級抬上去。

這個遞迴關係不只是計算上的便利——它是把伽瑪延拓到積分收斂區域之外的工具。把它反過來讀成 Gamma(x) = Gamma(x+1) / x。假設你想要 Gamma(-0.5),那裡積分發散。遞迴關係告訴你 Gamma(-0.5) = Gamma(0.5) / (-0.5),而 Gamma(0.5) 是積分能算出的值。一步一步地,這種解析延拓把伽瑪推進整個複平面,只在 x = 0、-1、-2、…… 處因為除以零而留下單極點。階乘——曾經只是一串孤立的點——變成了幾乎處處有定義的函數。

二分之一處的伽瑪:藏著一個高斯

最美的單個值是 Gamma(1/2) = 根號 pi。一個看不見任何圓的問題裡,pi 從何而來?在歐拉積分中令 x = 1/2:Gamma(1/2) = 從 0 到無窮對 t^{-1/2} e^{-t} dt 的積分。代換 t = u^2,於是 dt = 2u du、t^{-1/2} = 1/u;那個 1/u 和 2u du 合併成 2 du,積分就變成 2 乘以從 0 到無窮對 e^{-u^2} du 的積分。那正是喬裝打扮的著名高斯積分

而從 0 到無窮對 e^{-u^2} du 的積分 = sqrt(pi)/2——這個結果通常用「把積分平方再換極座標」的技巧來證明。乘上前面的那個 2,Gamma(1/2) = 根號 pi 就落進了你手裡。這值得停一下:鐘形曲線 e^{-u^2} 沒有初等的閉形式原函數——它是教科書級的非初等積分——可是在整條半直線上它卻累加成乾淨的根號 pi。「非初等」意思是「沒有用冪、指數、對數、三角寫出的公式」,絕不是「不可計算」。一旦釘住了二分之一,遞迴關係就能觸及每一個半整數:Gamma(3/2) = (1/2) Gamma(1/2) = sqrt(pi)/2,Gamma(5/2) = (3/2)(1/2) sqrt(pi),依此類推。

斯特林:階乘到底長得有多快

階乘爆炸式增長:10! 已經超過三百萬,70! 就讓許多計算器溢出。對很大的自變量,我們很少想要精確值——我們想知道它的量級以及如何比較。這正是斯特林近似所給的:n! 約等於 根號(2 pi n) 乘 (n/e)^n,或寫成對數形式 ln(n!) 約等於 n ln n - n。直觀上,ln(n!) = 從 1 到 n 的 ln k 之和,其行為像從 1 到 n 對 ln x dx 的積分 = n ln n - n + 1,而斯特林把剩下的修正項精確化了。

因為伽瑪就是光滑化的階乘,斯特林其實是關於大 x 時 Gamma(x) 的陳述,並且延伸到非整數。完整版本是一個漸近級數——這裡藏著一個美麗而誠實的微妙之處。如果你把它所有項都加起來,這個級數其實是發散的,可是只截取前幾項卻驚人地精確。原因在於:停下之後的誤差大致是第一個被丟掉項的大小,它一開始飛快地變小,最終才又增大。訣竅是在最小項附近停手。所以一個級數可以發散,卻仍是你所擁有的最有用工具之一。

  1. 想快速得到一個大階乘:把 n! 寫成 Gamma(n+1),再把 n 代入斯特林。
  2. 首項估計:n! 約為 sqrt(2 pi n) 乘 (n/e)^n——到 n = 10 時已經精確到約 1%。
  3. 需要更多位數:加上下一項,乘以 (1 + 1/(12 n)),但別一直加下去——這個級數會反咬你一口。
  4. 若是比較增長速度而非精確值:用對數形式 ln(n!) 約為 n ln n - n,它是組合數學和統計物理的主力。

為什麼它是架上的第一本書

伽瑪是最無處不在的特殊函數,恰恰因為許多其它函數都由它搭成。貝塔函數 B(p, q) 等於 Gamma(p) Gamma(q) / Gamma(p+q),把有限區間上棘手的積分變成一個伽瑪之比。冠以伽瑪之名的機率分布用它作歸一化常數。而當你沿這書架走得更遠——到貝塞爾函數和超幾何函數——它們的級數係數裡也都纏著伽瑪的值。把這一個函數學透,特殊函數世界的其餘部分就不再那麼陌生了。

退一步,看看我們這一步動作的形狀。我們把一個只定義在離散集合上的運算(1 乘 2 乘 …… 乘 n),換成了一個連續的、複解析的函數,它與之相符並且處處遵守同一條規則。這正是高等微積分反覆出現的習慣:要求一個熟悉的對象保持它的定義性質,從而延拓它,然後發現延拓後的版本比原來更豐富。階乘只懂整數;伽瑪懂得所有的數。