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

廣義函數:讓 delta 嚴格起來

狄拉克 delta——在一點處無窮大、其餘處處為零,卻又圍出面積一——根本不可能是一個函數。解藥是別再問 delta(x) 等於什麼,而改問它對一個測試函數做了什麼,於是整套嚴格的廣義函數微積分便隨之落地,在其中 delta 甚至還有導數。

delta 根本不可能是一個函數

到現在為止,你已經自由地用著[[dirac-delta-function|狄拉克 delta]] delta(x)——把它當作拉普拉斯變換裡完美的脈衝,當作本級整座大廈所賴以建立的「單次尖銳戳擊」,其響應即格林函數。通常的漫畫是:delta(x) 除了在 x = 0 處之外處處為零,而在 x = 0 處它無窮大,可它的總面積卻恰好為一,於是從負無窮到正無窮的 delta(x) dx 的積分等於 1。停下來誠實地盯著這幅漫畫,因為它是不可能的。沒有任何真正的函數能做到這一點。一個除了一個孤立點外處處為零的函數,按任何合理的面積概念——你所知的定積分——其積分恰好是零。改動一個函數在單獨一點上的取值,根本無法使它的積分挪動分毫。

再說,「無窮大」本來就不是一個你被允許指派為函數值的數;你一旦寫下 delta(0) = 無窮大,就已經離開了函數的世界——函數在每一點都取普通的實數值。所以 delta 不是一個表現糟糕的函數——它壓根不是函數。有那麼一陣子,物理學家把它當函數來用,而且用得漂亮極了,這既可疑又奇妙。本篇指南的任務,就是找出 delta 真正所是的那個誠實對象,好讓你一直在用它做的一切,從「碰巧管用」變成「可被證明為正確」。

別問它等於什麼,要問它做什麼

下面是修好一切的那個概念性轉軸,值得放慢腳步。一個經典函數由它的取值來定義:遞給它一個點 x,它回給你一個數 f(x)。delta 沒有合理的取值,所以這條路封死了。但請注意我們在實踐中總是怎樣使用 delta——從不單用,總是放在對某個光滑、規矩的函數 f 的積分裡,而它唯一的活計就是伸進去、把一個值拈出來:delta(x) f(x) dx 的積分 = f(0)。delta 的全部身份都活在那個動作裡。於是我們做一個激進的動作:我們不再用取值、而用 delta 對它所遇見的函數做了什麼來重新定義它。我們一勞永逸地宣布:delta 就是這條規則——「餵我一個光滑函數 f,我把數 f(0) 還給你」。這條規則定義得完美無瑕、完全有限,且處處不牽涉任何無窮。

一個由它「如何作用於函數」來定義的對象——吃進一個函數、吐出一個數——叫做[[generalized-function|廣義函數]],或稱分布。我們被允許餵給它的那些光滑函數叫做測試函數:把它們想成有禮貌、肯聽話的探針,規定為無窮可微、並在某個有界區域之外恆為零,這樣就永遠不會有邊界項來搗亂。於是一個廣義函數無非就是一條(線性、連續的)規則,給每個測試函數指派一個數。delta 是其中最簡單而有趣的一個:它的規則是「返回原點處的取值」。每個普通而合理的函數 g 也定義這樣一條規則——餵它 f,它返回誠實的 g(x) f(x) dx 的積分——所以舊的函數全都仍然住在這個新世界裡。這個新世界嚴格地更大,而 delta 正是它騰出地方來容納的新住客之一。

如何對一個沒有圖像的東西求導

新世界的回報在這裡壯觀地兌現。一旦一個廣義函數由它「如何作用於測試函數」來定義,我們就有權透過「決定它的導數應當如何作用」來定義它的導數——而恰好只有一種誠實的做法。取一個普通可微函數 g,把它的導數 g' 對一個測試函數 f 作積分。因為 f 在遠處恆為零,分部積分沒有邊界項,給出 g'(x) f(x) dx 的積分 = 負的 g(x) f'(x) dx 的積分。導數從 g 上跳下來、落到了 f 上,帶一個負號。現在把這個等式當作定義來讀:對任何廣義函數 T,它的導數 T' 就是這條規則——「T' 作用於 f 等於負的 T 作用於 f'」。由於測試函數 f 無窮光滑,f' 永遠存在,所以每一個廣義函數都可微——而且無窮多次。再沒有什麼東西會沒有導數了。

拿數學裡最有名的台階——[[heaviside-step-function|赫維賽德階躍]] H(x)——來檢驗一下,它在 x < 0 時為 0、x > 0 時為 1。經典地看,它在原點處有一道跳躍、在那裡壓根沒有導數。作為廣義函數,它的導數 H' 是這條規則——「H' 作用於 f = 負的 H 作用於 f' = 負的從 0 到無窮的 f'(x) dx 的積分」。由微積分基本定理,最後那個積分是 f(無窮) 減 f(0),而 f 在遠處恆為零故 f(無窮) = 0,恰好剩下 +f(0)。但「返回 f(0)」正是 delta 自己的規則。所以 H' = delta,乾淨且可證。台階的斜率——經典微積分拒絕定義的東西——就是 delta,而現在這句話是一條定理、不是揮揮手矇混。這一個恆等式,就是你將遇到的每一道跳躍背後的引擎。

DERIVATIVE OF A DISTRIBUTION  (move d/dx onto the test function, flip the sign)

   < T' , f >  :=  - < T , f' >          for every smooth test function f
                                          (no boundary term: f vanishes far away)

WORKED:  the step function H  (H = 0 for x<0,  H = 1 for x>0)

   < H' , f >  =  - < H , f' >
               =  - integral over all x  of  H(x) f'(x) dx
               =  - integral from 0 to infinity of  f'(x) dx
               =  - [ f(infinity) - f(0) ]
               =  - [   0        - f(0) ]
               =  + f(0)
               =  < delta , f >

   ==>   H' = delta          (and one more derivative:  < delta' , f > = - f'(0) )
整套廣義函數微積分只需一個動作:透過把導數轉嫁到肯聽話的測試函數上、並翻轉符號,來定義導數。用到赫維賽德階躍上,它證明了 H' = delta;再用一次,給出 delta',即「返回 f 在原點處斜率的相反數」這條規則。

delta 的家族:導數、平移與縮放

既然求導不再花費什麼,delta 便長出了一整個家族。它的一階導數 delta',即偶極子,按我們剛導出的規則作用:delta' 作用於 f 等於負的 f'(0)。把它物理地想像成一對無窮靠近、方向相反的尖峰——一記小小的推緊接著一記同樣大小的拉,這正是你為一個理想化的點偶或偶極子建模的方式。二階導數 delta'' 返回 f''(0),沿著這架梯子繼續往上;每一個新的導數都多探測測試函數在原點處行為的一個階。這些不是稀奇玩意兒——你一旦對一個帶折角的格林函數(大多數格林函數都帶折角)求導,delta' 與 delta'' 就立刻冒出來。

另有兩個操作讓你能在 delta 落到哪裡都對付得了。一個平移的 delta,delta(x 減 a),只不過是在點 a 處、而非原點處對測試函數採樣:delta(x 減 a) f(x) dx 的積分 = f(a)。那正是坐落在位置 a 處的點源——你把它放在任何你想戳一下系統的地方的那個脈衝,整套格林函數構造的心臟。而一個縮放的 delta 服從 delta(c x) = delta(x) / |c|:把橫軸按因子 c 壓縮,會讓尖峰在唯一要緊的意義上——積分——變高 c 倍,因為面積必須保持為一。絕對值要緊——用負的 c 把坐標軸翻轉,並不會引入一個符號,因為面積是無符號的。這些規則不是要單獨記下的孤立事實;每一條都是「要求那條作用於測試函數的定義保持自洽」逼出來給你的。

為什麼這恰是格林函數所講的語言

本級裡的一切都悄悄依賴於我們剛搭起來的東西。一個格林函數 G(x, a) 被定義為對單位點源的響應,即 L G = delta(x 減 a) 的解,其中 L 是你的微分算子。那個方程在 delta 成為一個你能放到微分方程右端的正當對象之前,毫無意義——而廣義函數恰恰就是這樣一個對象。你用來手工搭出 G 的那條著名的跳躍條件——解連續,但它的導數在越過源點時跳變一個確定的量——無非就是把恆等式 H' = delta 倒著讀:右端的一個 delta 迫使最高階導數發生一個單位跳躍,因為「靠求導製造出一個 delta」唯一的辦法就是這個。你當作菜譜學下來的那套記賬,骨子裡就是廣義函數理論。

同樣的思想把一個偏微分方程的基本解提升為一個嚴格的對象——例如拉普拉斯算子的自由空間格林函數,在廣義函數的意義下滿足 nabla 平方 G = delta,儘管 G 自身在源處爆掉、在那裡當然不按經典方式二次可微。經典地看,那個方程在奇異點處是胡言亂語;而作為一句關於「兩邊如何作用於測試函數」的陳述,它精確無誤。這就是整套方法之所以管用的更深層緣由:一個廣義函數能解一個它逐點絕不可能滿足的微分方程,因為那些導數是在弱的、測試函數的意義下被詮釋的。delta 是讓「單次尖銳戳擊」成為正當輸入的東西,而格林函數則是那正當的輸出。

  1. 你遇到一個 delta 時,絕不要把它讀作一個函數值;把它讀作這條規則——「餵我一個光滑測試函數 f,我返回 f(0)」(對平移到 a 的 delta 則返回 f(a))。
  2. 要對任何廣義函數求導,就把導數轉移到測試函數上並翻轉符號:T' 作用於 f 等於負的 T 作用於 f'。這總是行得通,因為測試函數無窮光滑。
  3. 使用主恆等式 H' = delta,在跳躍與 delta 之間來回換算——這恰恰是你手工構造格林函數時所施加的那條跳躍條件。
  4. 把 L G = delta(x 減 a) 讀作一句關於「在測試函數上的作用」的陳述,而非逐點取值;正是這一點,讓基本解與自由空間格林函數即便在 G 自身奇異之處也變得嚴格。