1695 Bernoulli 方程:一個代換把非線性化為線性#
案發現場#
1695 年,微積分問世不過十年,數學家們正如火如荼地清點這門新武器的威力範圍。Newton 與 Leibniz 已經能解出 separable(可分離變數)方程與一階線性方程:
Leibniz 在 1694 年甚至找到了用代換解線性方程的系統方法(即今日的積分因子法之雛形)。但一個自然的問題隨之而來:如果右邊多了 \(y\) 的冪次,變成
這個方程還能解嗎?它不再是線性的,卻又不像 separable 方程那樣可以直接拆開——它卡在兩類已知可解方程之間,成為當時懸而未決的謎題。
遇到這個問題的是兩位針鋒相對的大師:Leibniz 與 Jacob Bernoulli。Leibniz 是微積分的共同發明人,擅長代數操作與形式技巧;Jacob 則是剛用微分方程解出等時曲線(見 1690-JacobBernoulli等時曲線.md)的力學新銳。兩人透過書信往還,展開了一場誰先解出此方程的競爭——這是微分方程史上第一場以「特定方程類型」為獎盃的公開競賽。
這個問題為何重要?因為它直指一個核心方法論問題:非線性方程能否透過變數代換化為已知可解的形式? 答案若是肯定的,就意味著「可解方程」的邊界可以被大幅推進。
偵查過程#
第一步:Leibniz 的觀察——除掉多餘的冪次#
Leibniz 的思路是:方程的「病灶」在於那個多餘的 \(y^n\) 。要把它除掉,最直接的方法就是用 \(y\) 的冪次做代換。1695 年 12 月,他在寫給 Johann Bernoulli 的信中提出:令
也就是說,選 \(1-n\) 這個指數,正是為了讓求導後 \(y^n\) 項「降階消失」。這一步看似平平無奇,實則是針對方程結構反推代換形式的首例——不是瞎試,而是看著目標設計工具。
第二步:逐步推導——化非線性為線性#
設 \(v = y^{1-n}\) ,對 \(x\) 求導(用鏈鎖法則):
將原方程 \(y' + Py = Qy^n\) 兩邊同除以 \(y^n\) :
代入 \(v' = (1-n)y^{-n}y'\) 與 \(v = y^{1-n}\) :
這是一個關於 \(v\) 的一階線性方程!病灶被根除,非線性被代換徹底馴服。
第三步:用 Leibniz 的線性方程方法收尾#
對線性方程 \(v' + \tilde{P}v = \tilde{Q}\) (其中 \(\tilde{P} = (1-n)P\) 、 \(\tilde{Q} = (1-n)Q\) ),Leibniz 的方法是乘上積分因子:
於是
代回 \(v = y^{1-n}\) ,得到通解:
第四步:Jacob 的獨立解法與競爭#
Jacob Bernoulli 幾乎同時獨立地解出了這個方程,但他選擇了另一條路:把 \(y\) 視為 \(x\) 的函數,將方程改寫成 \(x\) 對 \(y\) 的形式並尋求 separable 化。1696 年,他在《Acta Eruditorum》上發表解法,並指出自己的方法更一般——可以處理某些 Bernoulli 方程推廣的類型。兩人的書信與論文中夾雜著互相挑剔、指正錯誤與暗自較勁的火藥味,Leibniz 甚至一度懷疑 Jacob 的解法有誤,事後不得不承認其正確性。
值得一提的是, \(n = 0\) 時方程退化為普通線性方程, \(n = 1\) 時右邊變成 \(Qy\) 、方程變成可分離變數;因此 Bernoulli 方程真正的「新大陸」在 \(n \neq 0, 1\) 的區域。
結案報告#
謎題就此告破:Bernoulli 方程可以透過代換 \(v = y^{1-n}\) 化為線性方程求解。這是數學史上第一個被系統化解出的非線性常微分方程類型。
此案的遺產有三:
- 積分因子法之源。雖然積分因子技術由 Leibniz 在解線性方程時首創,但正是 Bernoulli 方程的求解讓「尋找恰當的乘子與代換」成為一門顯學。日後 Euler 在 1727-Euler常微分方程.md 中將積分因子法系統化推廣,成為一階 ODE 的標準武器。
- 「化非線性為線性」的典範。代換 \(v = y^{1-n}\) 開創了一個延續三百年的思路:遇到非線性方程,先問「有沒有代換能把它變線性?」從 Riccati 方程(Johann Bernoulli 的兒子丹尼爾的叔伯輩 Riccati 提出,後由 Euler、Liouville 研究)到 Lyapunov 函數、線性化理論,皆可溯源於此。
- 方程分類學的開端。Bernoulli 方程是第一個以數學家命名的微分方程類型。從此,「某類方程 → 某種解法」的分類學思維成形,今日任何一本 ODE 教科書的章節結構,都是這個傳統的後裔。
競爭本身也是遺產:Leibniz 與 Jacob 的書信競賽,連同六年後 Johann 的最速降線挑戰(見 1696-最速降線問題.md),確立了「以公開挑戰推動數學進步」的模式。而 Jacob 在競賽後繼續深耕,其關於積分與級數的工作,為 Euler 時代的大豐收鋪平了道路。
證據與工具#
以下 Python 程式用兩種方法解同一個 Bernoulli 方程,並比較誤差:
import numpy as np
from scipy.integrate import solve_ivp
# 案例方程:y' + y = x * y^(1/2) (P=1, Q=x, n=1/2)
# 代換 v = y^(1-n) = y^(1/2) 化為線性:v' + (1/2)v = (1/2)x
# 方法一:解析解(經代換 + 積分因子)
# 積分因子 mu = e^(x/2),故 (mu*v)' = (1/2)x*e^(x/2)
# 積分:∫(1/2)x*e^(x/2)dx = (x-2)*e^(x/2) + C
# v = x - 2 + C*e^(-x/2),y = v^2
def analytic(x, C):
v = x - 2 + C*np.exp(-x/2)
return v**2
# 用初始條件 y(0) = 4 定 C:v(0) = 2 = -2 + C → C = 4
C = 4.0
# 方法二:數值解(直接解原始非線性方程)
sol = solve_ivp(lambda x, y: -y + x*np.sqrt(np.abs(y)) + 1e-12,
[0, 5], [4.0], dense_output=True, rtol=1e-10)
xs = np.linspace(0, 5, 6)
print(f"{'x':>6} {'數值解':>12} {'解析解':>12} {'誤差':>10}")
for x in xs:
num = sol.sol(x)[0]
ana = analytic(x, C)
print(f"{x:6.2f} {num:12.6f} {ana:12.6f} {abs(num-ana):10.2e}")
# 觀察:兩法一致 → 代換 v = y^(1-n) 正確地把非線性方程化為線性方程
執行後可見數值解與解析解完全吻合——Leibniz 的代換與 Jacob 的獨立解法,在三百年的時光之後,仍然經得起數值檢驗。