求最值:超越方程駐點(diǎn)問(wèn)題全解析)
求最值這件事如果只看教科書例題似乎永遠(yuǎn)只需要求導(dǎo)加解方程運(yùn)氣好點(diǎn)解一元二次運(yùn)氣差一點(diǎn)也不過(guò)是三五步代數(shù)變形。但真進(jìn)了指數(shù)、對(duì)數(shù)、冪函數(shù)混戰(zhàn)的場(chǎng)景駐點(diǎn)方程往往會(huì)變成這樣x\ln x3或者 2^x2x再?gòu)?fù)雜點(diǎn)還有 (x-3)e^x-3。這類方程沒(méi)有初等代數(shù)表達(dá)硬解只能上數(shù)值迭代而在實(shí)際推導(dǎo)里我們希望得到帶參數(shù)的解析解方便繼續(xù)分析單調(diào)性、極值類型、邊界行為。這時(shí)候就該 lambert 函數(shù)出場(chǎng)了也就是朗伯 W 函數(shù)。它本質(zhì)上只做一件事拿到形如 w e^w z 的方程直接告訴你 w 等于多少。這篇文章專門聊 lambert 函數(shù)求最值的完整思路從配湊技巧、分支選擇到常見(jiàn)的坑適合已經(jīng)會(huì)求導(dǎo)、但想在超越方程上補(bǔ)一塊能力的讀者。1. 為什么最值問(wèn)題會(huì)撞上 Lambert 函數(shù)1.1 教科書里的最值流程在哪里斷掉求最值有個(gè)標(biāo)準(zhǔn)流程求導(dǎo)、令導(dǎo)數(shù)為零、解駐點(diǎn)方程、判斷極值。這個(gè)流程很可靠問(wèn)題出在“解駐點(diǎn)方程”這一步。如果目標(biāo)函數(shù)只是多項(xiàng)式那么駐點(diǎn)方程是代數(shù)方程有成熟的求根方法可一旦出現(xiàn)指數(shù)函數(shù)或?qū)?shù)函數(shù)駐點(diǎn)方程就可能變成“指數(shù)和對(duì)數(shù)混合”的超越方程。舉幾個(gè)最典型的例子求 f(x)x\ln x 的最小值駐點(diǎn)方程 1\frac{1}{x}0解出來(lái) x-1結(jié)果發(fā)現(xiàn) x 根本不在定義域里過(guò)程看似完成了實(shí)際全錯(cuò)。求 f(x)2^x-x^2 的極值駐點(diǎn)方程是 2^x\ln 2-2x0這里 2^x 和 x 不是同類項(xiàng)沒(méi)法用初等變換消元。求 f(x)\frac{x^3}{e^x-1} 的峰值對(duì)數(shù)求導(dǎo)后得到 (x-3)e^x-3同樣是超越方程。這些方程的共同點(diǎn)是要求解的變量同時(shí)出現(xiàn)在指數(shù)位置和普通位置形成了“指數(shù)函數(shù)線性函數(shù)”或者“指數(shù)函數(shù)冪函數(shù)”的混合結(jié)構(gòu)。沒(méi)有一種代數(shù)手段能單獨(dú)把 x 從指數(shù)上“拉下來(lái)”除非用一種新的反函數(shù)來(lái)定義它的解。這正是朗伯 W 函數(shù)存在的意義。1.2 幾乎所有常見(jiàn)超越駐點(diǎn)方程都能配成同一種格式朗伯 W 函數(shù)解決的原始方程是w e^w zw 是未知數(shù)z 是給定常數(shù)。這里最妙的地方在于很多看起來(lái)完全不同的超越方程經(jīng)過(guò)換元都能統(tǒng)一成這個(gè)格式。我把平時(shí)最常遇到的三種情況列了一張表原始駐點(diǎn)方程配湊目標(biāo)最終解x e^x Cx e^x 已經(jīng)符合格式xW(C)x\ln x C兩邊取指數(shù)得到 x e^xe^CxW(e^C)e^x c x令 u-x整理成 (-x)e^{-x}1/cx-W\left(-\frac{1}{c}\right)為什么強(qiáng)調(diào)要“配成 w e^w”因?yàn)橐坏┡涑蛇@個(gè)格式問(wèn)題就從“解超越方程”退化成“查反函數(shù)”剩下的工作只有分支選擇和數(shù)值計(jì)算。從工程角度看這樣的解析表達(dá)式還可以繼續(xù)參與求導(dǎo)、求極限、按參數(shù)討論比單純的數(shù)值解健壯得多。1.3 為什么值得引入一個(gè)新函數(shù)而不是直接數(shù)值近似有人會(huì)問(wèn)反正最后都要用計(jì)算機(jī)算為什么不直接在原方程上做牛頓迭代這個(gè)問(wèn)題我用實(shí)際場(chǎng)景回答當(dāng)你需要在材料參數(shù)、工藝參數(shù)連續(xù)變化時(shí)觀察極值點(diǎn)的移動(dòng)趨勢(shì)每一次改變參數(shù)都要重新迭代而解析解可以把參數(shù)留在公式里直接看出單調(diào)性和臨界值。比如后面要講的 2^x-x^2 的極值點(diǎn)得到的結(jié)果是 x-\frac{W(\cdots)}{\ln 2}參數(shù)變化時(shí)可以直接對(duì) W 函數(shù)做敏感度分析。數(shù)值解只是給你一個(gè)點(diǎn)解析解給你一整條知識(shí)鏈。2. Lambert W 函數(shù)的基本功定義、分支和取值范圍2.1 定義、定義域和值域朗伯 W 函數(shù)定義為方程 w e^w z 的解 wW(z)。它的定義域不是整個(gè)實(shí)數(shù)軸因?yàn)楹瘮?shù) w e^w 在實(shí)數(shù)范圍有一個(gè)最小值。我習(xí)慣用一個(gè)直觀圖像來(lái)理解你看 yx e^x 這條曲線它在 x-1 處取得最小值 -\frac{1}{e}約等于 -0.3679。所以當(dāng) z 小于 -\frac{1}{e} 時(shí)實(shí)數(shù)范圍內(nèi)不存在 w只有復(fù)數(shù)解當(dāng) z 等于 -\frac{1}{e} 時(shí)只有一個(gè)重根 w-1當(dāng) z 大于 -\frac{1}{e} 時(shí)才可能有實(shí)數(shù)解。為什么會(huì)分成兩條實(shí)分支因?yàn)?yx e^x 不是單調(diào)函數(shù)。它在 (-∞,-1) 上單調(diào)遞減、在 (-1,∞) 上單調(diào)遞增。一個(gè) z 如果落在區(qū)間 \left[-\frac{1}{e},0\right) 內(nèi)水平線 yz 會(huì)和曲線相交兩次。對(duì)應(yīng)地W 函數(shù)也要區(qū)分兩條分支分支定義域值域?qū)?yīng)曲線的單調(diào)區(qū)間W_0(z)主分支z\in\left[-\frac{1}{e},\infty\right)w\in[-1,\infty)曲線遞增的部分W_{-1}(z)z\in\left[-\frac{1}{e},0\right)w\in(-∞,-1]曲線遞減的部分這個(gè)表格是后面所有實(shí)操的基礎(chǔ)必須記牢。很多時(shí)候最值問(wèn)題的難點(diǎn)不在求導(dǎo)而在最后一步要不要選 W_{-1}選錯(cuò)了解出來(lái)的根可能根本不在定義域內(nèi)。2.2 參數(shù) z 的范圍決定了實(shí)根數(shù)量在解駐點(diǎn)方程時(shí)配湊完得到的常數(shù)是什么范圍直接決定駐點(diǎn)有幾個(gè)。我把這個(gè)判斷整理成一個(gè)速查表z 的范圍實(shí)數(shù)解情況使用的分支z0一個(gè)實(shí)根只有 W_0z0一個(gè)實(shí)根W_0(0)0-\frac{1}{e}z0兩個(gè)實(shí)根W_0 和 W_{-1} 各給一個(gè)z-\frac{1}{e}一個(gè)重根w-1z-\frac{1}{e}無(wú)實(shí)根只能走復(fù)數(shù)分支這里特別要提醒即使 z 落在兩個(gè)實(shí)分支區(qū)間內(nèi)也不意味著兩個(gè)解都是原問(wèn)題的有效駐點(diǎn)。后面熱輻射能譜的例子會(huì)出現(xiàn)一個(gè)端點(diǎn)解和一個(gè)內(nèi)部駐點(diǎn)解需要結(jié)合定義域和邊界行為進(jìn)一步排除。2.3 用工具快速摸到 W 函數(shù)理解是基礎(chǔ)但實(shí)際算題時(shí)我不會(huì)手算 W 值直接用工具。Python 的 SciPy 里就有現(xiàn)成函數(shù)from scipy.special import lambertw # 求 W_0(2) print(lambertw(2, k0)) # 約 0.8526這就是 w e^w2 的主支解 # 求 W_{-1}(-0.24) print(lambertw(-0.24, k-1)) # 約 -2.22這是 w e^w-0.24 的低支解 # 如果想算數(shù)值驗(yàn)證可以這樣回代 w lambertw(2, k0) print(w * np.exp(w)) # 應(yīng)該接近 2注意 SciPy 返回的是復(fù)數(shù)類型即使實(shí)參數(shù)也會(huì)帶一個(gè) 0j用 float() 轉(zhuǎn)一下就好。如果是別的數(shù)學(xué)軟件一般也有 LambertW 或 ProductLog 函數(shù)參數(shù)名多數(shù)是 k 或 branch別弄混。3. 核心實(shí)操三類典型最值問(wèn)題的完整推導(dǎo)3.1 直接形方程 x e^xC和最值的第一次碰面先看最簡(jiǎn)單的類型??紤]函數(shù)f(x)(x-1)e^x - a x對(duì) x 求導(dǎo)f(x)xe^x (x-1)e^x - a x e^x - a令導(dǎo)數(shù)為零得到x e^x a這個(gè)方程已經(jīng)天然是 w e^w 的格式直接寫x W(a)接下來(lái)判斷極值類型。求二階導(dǎo)f(x)x e^x e^x (x1)e^x在駐點(diǎn)處因?yàn)?a0W(a)0所以 x0二階導(dǎo)大于零得到的是局部極小值。比如取 a2x^*W(2)\approx0.8526f(x^)0所以 f 在 x^處取得局部極小。此時(shí)如果 a 取負(fù)值比如 a-0.5因?yàn)?-0.5-\frac{1}{e}方程無(wú)實(shí)根函數(shù)沒(méi)有駐點(diǎn)極值只能在邊界處討論。這里能看到一個(gè)結(jié)論W 函數(shù)不僅能寫解還能幫我們畫出“參數(shù) a 變化時(shí)駐點(diǎn)是否存在”的地圖。3.2 指數(shù)-線性混合形2^xx^2 的駐點(diǎn)到底有幾個(gè)上面那個(gè)例子太直白下面看一個(gè)真正需要配湊的。研究函數(shù)f(x)2^x-x^2它的導(dǎo)數(shù)f(x)2^x\ln 2-2x令導(dǎo)數(shù)為零2^x\frac{2}{\ln 2}x為了配成 w e^w我做一步換元。令 yx\ln 2那么 x\frac{y}{\ln 2}原方程變成e^y\frac{2}{(\ln 2)^2}y再令 u-y則方程變成u e^u-\frac{(\ln 2)^2}{2}所以y-W\left(-\frac{(\ln 2)^2}{2}\right)x-\frac{1}{\ln 2}W\left(-\frac{(\ln 2)^2}{2}\right)現(xiàn)在看參數(shù)范圍。\frac{(\ln 2)^2}{2}\approx0.2402所以括號(hào)里的值約是 -0.2402落在 \left(-\frac{1}{e},0\right) 區(qū)間內(nèi)W 函數(shù)有兩個(gè)實(shí)分支駐點(diǎn)也有兩個(gè)W_0 分支給出 y_1\approx0.335所以 x_1\approx0.48W_{-1} 分支給出 y_2\approx2.22所以 x_2\approx3.20這兩個(gè)駐點(diǎn)誰(shuí)極大誰(shuí)極小不要硬算二階導(dǎo)的復(fù)雜值我在原方程里做個(gè)巧妙代換。在駐點(diǎn)處有 2^x\ln 22x所以f(x)(\ln 2)^2 2^x-2 (\ln 2)^2 \cdot \frac{2x}{\ln 2}-2 2x\ln 2-2于是極值類型完全取決于 x\ln 2 和 1 的大小關(guān)系。x_1\approx0.48 時(shí)x\ln 21二階導(dǎo)為負(fù)所以 x_1 是局部極大點(diǎn)x_2\approx3.20 時(shí)x\ln 21二階導(dǎo)為正所以 x_2 是局部極小點(diǎn)。用這個(gè)思路根本不需要查數(shù)值表就能確定極值屬性這就是把駐點(diǎn)方程配成 W 函數(shù)后的紅利。3.3 分式型能譜密度函數(shù)的峰值點(diǎn)為什么有個(gè) W(-3e^{-3})再看一個(gè)更經(jīng)典也更好玩的例子。統(tǒng)計(jì)物理里經(jīng)常遇到形如f(x)\frac{x^3}{e^x-1}, \quad x0的函數(shù)它在 x 很小的時(shí)候趨于 0x 很大的時(shí)候也趨于 0中間一定有一個(gè)峰值。求峰值點(diǎn)最方便的是取對(duì)數(shù)求導(dǎo)因?yàn)?f(x)0\frac{f(x)}{f(x)}\frac{3}{x}-\frac{e^x}{e^x-1}令導(dǎo)數(shù)為零\frac{3}{x}\frac{e^x}{e^x-1}交叉相乘3(e^x-1)x e^x整理(3-x)e^x3再看清楚一點(diǎn)改成(x-3)e^x-3這里要想辦法把左邊配成 u e^u。關(guān)鍵在于 e^x 前面乘的是 (x-3)那就令 ux-3于是 xu3代入u e^{u3}-3兩邊同時(shí)除以 e^3u e^u-3e^{-3}所以u(píng)W(-3e^{-3})回代得到x3W(-3e^{-3})現(xiàn)在處理分支。常數(shù) -3e^{-3}\approx-0.1494位于 \left(-\frac{1}{e},0\right) 之間W 有兩個(gè)實(shí)值W_0(-3e^{-3})\approx-0.1788對(duì)應(yīng) x\approx2.8214這是我們要的峰值點(diǎn)W_{-1}(-3e^{-3})-3對(duì)應(yīng) x0這其實(shí)是原函數(shù)在可去奇點(diǎn)處的邊界極限不是內(nèi)部駐點(diǎn)這個(gè)例子特別適合說(shuō)明“所有實(shí)數(shù)解都要保留”是個(gè)誤區(qū)。x0 雖然在 W 函數(shù)里出現(xiàn)了但它不在開(kāi)區(qū)間 x0 內(nèi)而且 f(x) 在 x0 處沒(méi)有定義只能作為極限討論。真正的最值點(diǎn)是 W_0 分支給出的那個(gè)。3.4 把套路總結(jié)成四步法上面三個(gè)案例做完我把整個(gè)方法論收斂成以下四步每次都照著走第一步求導(dǎo)并令導(dǎo)數(shù)為零得到駐點(diǎn)方程。不要急著化簡(jiǎn)先觀察變量出現(xiàn)在哪些位置。第二步用換元或取對(duì)數(shù)把混合項(xiàng)集中。目標(biāo)是讓方程變成 u e^u常數(shù)常見(jiàn)技巧是令 u 等于指數(shù)上的代數(shù)表達(dá)式或者取對(duì)數(shù)把 \ln xx 變成 x e^x。第三步寫出 uW(常數(shù))回代得到 x。注意檢查常數(shù)范圍確定用 W_0 還是 W_{-1}或者兩個(gè)分支都要。第四步判斷極值類型并驗(yàn)證。用二階導(dǎo)、單調(diào)區(qū)間或函數(shù)圖像確認(rèn)同時(shí)把求得的值代回原駐點(diǎn)方程做數(shù)值回代保證沒(méi)有算錯(cuò)。4. 常見(jiàn)錯(cuò)誤與排查技巧實(shí)錄4.1 分支不會(huì)選隨手寫 W_0這是新手最容易犯的錯(cuò)誤。我見(jiàn)過(guò)不少人解 x e^x-0.2 時(shí)只寫 xW_0(-0.2)然后丟掉一個(gè)實(shí)根。更糟的是有人把正數(shù)和負(fù)數(shù)的分支混用z0 時(shí)不存在 W_{-1} 的實(shí)值你寫 W_{-1}(2) 出來(lái)的結(jié)果是復(fù)數(shù)題目直接崩了。我的習(xí)慣是先看參數(shù)區(qū)間z0只寫 W_0z 在 \left(-\frac{1}{e},0\right) 之間寫 W_0 和 W_{-1} 兩個(gè)表達(dá)式再結(jié)合定義域刪掉不合題意的z-\frac{1}{e}直接判定無(wú)實(shí)駐點(diǎn)省得白算。4.2 配湊時(shí)把 e 的指數(shù)系數(shù)丟掉配湊是最容易丟分的地方。比如上面能譜密度那個(gè)例子從 (x-3)e^x-3 到 u e^u-3e^{-3}中間必須補(bǔ)一個(gè) e^3。很多人直接寫成 W(-3)那就錯(cuò)了。再比如 x\ln xC 這種方程應(yīng)該先兩邊取指數(shù)得到 x e^xe^C然后寫 xW(e^C)而不是 xW(C)。這個(gè)錯(cuò)誤我至少見(jiàn)過(guò)十次每次都是因?yàn)槭÷粤酥虚g步驟。配湊完以后建議把 u e^u常數(shù) 代回原方程驗(yàn)一遍前后等式必須能對(duì)上。4.3 把 W(xe^x) 當(dāng)成永遠(yuǎn)等于 x這個(gè)錯(cuò)誤更隱蔽。W 函數(shù)是 w e^wz 的反函數(shù)所以 W(x e^x) 看起來(lái)應(yīng)該等于 x。但 W 是多值函數(shù)這個(gè)恒等式只在特定分支和特定區(qū)間成立。舉個(gè)例子W(-2e^{-2}) 如果取 W_{-1} 分支結(jié)果確實(shí)是 -2但如果取 W_0 分支結(jié)果是另一個(gè)數(shù)大約是 -0.406。所以不能看到 W(x e^x) 就直接化簡(jiǎn)成 x必須先問(wèn)自己我在用哪條分支x 落在哪個(gè)區(qū)間用錯(cuò)分支后續(xù)的極值判斷全錯(cuò)。4.4 算出 W 表達(dá)后不做數(shù)值回代解析解算完我最后一定會(huì)做三件事。第一把 xW(\cdots) 代回原始駐點(diǎn)方程兩邊數(shù)值差應(yīng)該小于 1e-10。第二把 x 代入原函數(shù)畫個(gè)圖或者看一階導(dǎo)符號(hào)變化確認(rèn)這是極大還是極小。第三如果有參數(shù)變化取幾個(gè)極端參數(shù)試試看解的連續(xù)性和范圍是否合理。這看起來(lái)啰嗦但每次都能救回錯(cuò)誤的分支選擇或者配湊失誤。最后分享一個(gè)小技巧個(gè)人習(xí)慣是把朗伯 W 函數(shù)當(dāng)成一種“未知函數(shù)的命名機(jī)制”來(lái)用。每次遇到無(wú)法初等求解的駐點(diǎn)方程我不會(huì)急著上數(shù)值而是試著問(wèn)自己這個(gè)方程能不能通過(guò)換元代換成 w e^w 常數(shù)如果能就直接用 W 表達(dá)如果不能再考慮數(shù)值迭代。這樣推導(dǎo)出來(lái)的最值表達(dá)式哪怕最后還是要代數(shù)字也比純數(shù)值解多了一層結(jié)構(gòu)后續(xù)處理邊界條件、參數(shù)討論、誤差分析都會(huì)輕松很多。