猜測走到盡頭的地方
前兩篇給了你一個快速又便宜的工具。要解一個 非齊次方程 a y'' + b y' + c y = g(x),你先找出 互補解 y_c = C1 y1 + C2 y2,再「猜」一個形狀像驅動項 g(x) 的特解——這就是 待定係數法。它管用時實在美妙。但它之所以管用,只是因為一小串驅動項——多項式、e^(rt)、正弦與餘弦,以及它們的乘積——有個神奇的性質:對它們微分,得回的還是同一種形狀。
一旦走出那串短名單,魔法就失效了。g(x) = tan(x) 的試解該猜什麼?對 tan(x) 微分得到 sec^2(x),再來是一團越來越高次的 sec——形狀永遠不會收回到自己身上,所以沒有任何有限的猜測能對得上。同樣的麻煩也出現在 g(x) = ln(x)、1/x、sec(x),或任何不是由那串受寵名單組成的驅動項。我們需要一個不依賴「驅動項可猜」的方法。那個方法就是 參數變異法,而且了不起的是,它從頭到尾根本不猜。
唯一的點子:讓常數動起來
整個把戲就在這裡,而名字已經把它拼了出來。互補解是 C1 y1 + C2 y2,其中 C1、C2 為「常數」。正是這些常數讓 y_c 滿足「齊次」方程、對驅動項毫無貢獻。所以這個點子調皮地簡單:把常數提升為函數。去找一個形如 y_p = u1(x) y1 + u2(x) y2 的特解,其中 u1 與 u2 是有待發掘的未知函數。我們重複使用了 基本解系 裡同樣那兩塊積木 y1 與 y2——只是讓它們的係數活了過來。
兩個未知函數,自由度太多了——一個方程釘不住兩個函數。所以我們把這多出來的自由度,花在一個聰明的、自己強加的條件上。當我們對 y_p 微分時,乘積法則甩出 u1' y1 + u2' y2 再加上其餘各項。我們「選擇」要求 u1' y1 + u2' y2 = 0。這不是什麼自然定律;它是我們有權堅持的一個方便設定,而它一舉做了兩件漂亮的事:讓 y_p' 不含那些礙事的 u'' 項,並給了我們第二個可用的方程。
把微分一路推到 y_p'',再把一切代回 a y'' + b y' + c y = g(x)。因為 y1 與 y2 早已消去齊次部分,一小串項如雪崩般相消,存活下來的東西乾淨得驚人:唯一一條條件 u1' y1' + u2' y2' = g(x)/a。連同我們自己強加的 u1' y1 + u2' y2 = 0,現在我們手上有兩個關於兩個未知量 u1' 與 u2' 的線性方程。
解那個小方程組——朗斯基行列式回來了
兩個方程、兩個未知數,是整個代數裡最友善的問題。盯著係數矩陣看:未知量 u1' 與 u2' 在上排被 y1、y2 乘著,在下排被 y1'、y2' 乘著。那「正是」你在檢驗線性獨立時遇過的 朗斯基行列式 矩陣。接著用克拉瑪法則一筆解出整個方程組,而每個分母裡的行列式都是朗斯基行列式 W = y1 y2' - y2 y1'。
Solve: u1' y1 + u2' y2 = 0
u1' y1' + u2' y2' = g(x)/a
W = y1 y2' - y2 y1' (never zero: y1,y2 are independent)
u1' = -y2 * g(x) / (a W) u2' = +y1 * g(x) / (a W)
u1 = integral of (-y2 g / (a W)) dx
u2 = integral of (+y1 g / (a W)) dx
y_p = u1 y1 + u2 y2留意它為何永不失效。朗斯基行列式坐在分母裡,所以我們需要 W 不為零——而它確實不為零,正因為 y1 與 y2 構成一組基本解系。兩篇之前認證你通解的那個量,正是這裡讓除法合法的那個量。這兩條簡潔的 u1' 與 u2' 公式有時被稱為 朗斯基公式;背不背隨你,因為你隨時可以當場解那個 2x2 方程組重新推出它們。
走一遍 tan(x)
拿那個打敗了猜測的例子:y'' + y = tan(x)。這裡 a = 1,齊次方程 y'' + y = 0 的基本解是 y1 = cos(x) 與 y2 = sin(x),快速一算得 W = cos(x) cos(x) - sin(x)(-sin(x)) = cos^2 + sin^2 = 1——朗斯基行列式恰好是 1,這是個禮物。現在我們只要餵進配方即可。
- 組出 u1' = -y2 g / (a W) = -sin(x) tan(x) / 1 = -sin^2(x)/cos(x),以及 u2' = y1 g / (a W) = cos(x) tan(x) = sin(x)。
- 先積較容易的 u2':u2 = sin(x) 的積分 = -cos(x)。
- 再積 u1':把 -sin^2/cos 改寫成 (cos^2 - 1)/cos = cos(x) - sec(x),於是 u1 = sin(x) - ln|sec(x) + tan(x)|。
- 重新組合:y_p = u1 cos(x) + u2 sin(x)。其中 sin(x)cos(x) 兩項相消,留下 y_p = -cos(x) ln|sec(x) + tan(x)|。
看看那個答案:一個對數乘上一個餘弦。任何由多項式、指數函數或正弦曲線組成的有限試解,都絕不可能生出一個 ln 項——這正是待定係數法在此束手無策的原因,也正是參數變異法非存在不可的原因。完整的 通解 是 y = C1 cos(x) + C2 sin(x) - cos(x) ln|sec(x) + tan(x)|,互補部分加上這個親手造出的特解部分。
誠實的附帶條款
三點提醒能讓你遠離麻煩。第一,先標準化。上面每條公式都假定最高次係數已被看見:那個 g(x)/a 之所以在那裡,是因為方程必須先化成 y'' + (b/a) y' + (c/a) y = g(x)/a 的形式,你才能讀出驅動項。若忘了除以 a,每個 u' 都會差一個倍數。對變係數方程,先除以 y'' 前面的任何係數,並用 g 除以那同一個最高次函數。
第二,積分才是關鍵的坎。參數變異法總能「擺好」一個正確的特解,但 u1 與 u2 的積分可能根本沒有封閉形式——試試 g(x) = e^(x^2),你會卡在一個沒人能用初等函數算出的積分上。這不是方法失敗了;它誠實地把答案以積分形式交給了你,而那有時已是封閉形式途徑所能做到的極限。當連這也停滯時,你就把積分留作符號形式,或改用數值方法。第三,找 y_p 時可以丟掉積分常數:你帶著的任何常數,不過是再加上 y1 或 y2 的某個倍數,而那已被互補解涵蓋,所以把它們設為零無傷大雅。