函數是一台機器
函數是一條規則:你給它一個輸入,它就準準地還給你一個輸出。想像一台自動售貨機:你按下某個數量的按鈕,出來的就是對應的價格。日常版本隨處可見——你的話費是用了多少流量的函數,拋出的球的高度是鬆手後經過了多少時間的函數。每一種情況裡,一個輸入都對應一個確定的輸出,絕不會同時給出兩個答案。
我們給函數起個名字(通常是 f),並寫作 f(x),讀作「f 在 x 處的值」,表示輸入為 x 時的輸出。微積分的核心問題,就是當你滑動輸入時這個輸出如何移動——這正是變化率所度量的東西。所以現在把函數弄熟絕不是繞遠路,而是其餘一切賴以站立的地面。
什麼能進、什麼會出:定義域與值域
每台機器對你能投餵什麼都有規矩。定義域是函數允許接受的全部輸入;值域是它實際產出的全部輸出。這並非吹毛求疵的記帳——它要緊,是因為有些運算根本不被允許。你不能除以零,也不能對負數開平方(在實數範圍內),所以定義域會悄悄排除掉任何會逼出這兩種情況的輸入。
現實含義往往把定義域壓縮得比代數還窄。n 個蘋果的花費公式也許對任何數都講得通,但只有從 0 開始往上的整數才是現實中的輸入——你不會買 -3 個蘋果。看圖能讓你一眼把這兩個集合都看清:定義域是曲線投到水平軸上的影子,值域是它投到豎直軸上的影子。
f(x) = 1 / (x - 2) domain: all x except x = 2 g(x) = sqrt(x) domain: x >= 0, range: y >= 0 h(t) = -5*t^2 + 20*t height of a ball; sensible domain 0 <= t <= 4
你會反覆遇見的幾類函數
你現在還不必精通每一類——只要認得它們的形狀就好,因為微積分接下來會問每一類是怎麼變化的。這裡有幾類幾乎頁頁都會碰到:
- 線性函數——f(x) = m*x + b,一條斜率恆為 m 的直線。勻速變化:每件 3 元,毫無意外。
- 多項式——冪的求和,例如 f(x) = x^2 - 4 或 x^3;會彎曲的光滑曲線。上面那條球高規則就是一例。
- 指數函數——f(x) = 2^x 或 e^x;成倍增長的量,比如複利或流傳開來的傳聞。它們增長得驚人地快。
- 三角函數——sin(x)、cos(x);永遠重複的波。任何循環往復的東西——潮汐、聲音、鞦韆——都說這門語言。
兩個操作:複合與求逆
把函數串聯起來時,它們最有威力。複合函數把一台機器的輸出直接餵進另一台:(f o g)(x) 意思是「先做 g,再把結果交給 f」,寫作 f(g(x))。次序要緊——先穿襪子再穿鞋,和先穿鞋再穿襪子並不一樣。這種嵌套太常見了,以至於微積分專門有一個工具來對它求導(鏈式法則),這正是我們現在要先和複合交朋友的原因。
另一個操作是「撤銷」。反函數記作 f^{-1},它讓機器倒著跑:若 f 把攝氏度變成華氏度,f^{-1} 就把華氏度變回攝氏度,於是 f^{-1}(f(x)) = x。反函數只有在原函數從不重複使用某個輸出時才存在——每個輸出都必須能唯一地追溯回一個輸入。在圖上,反函數是關於直線 y = x 的鏡像。
g(x) = x + 1 f(u) = u^2 (f o g)(x) = f(g(x)) = (x + 1)^2 # compose: do g, then f C_to_F(c) = (9/5)*c + 32 F_to_C(f) = (5/9)*(f - 32) # the inverse undoes it