FUN13|反函數與合成:對應關係如何接續與倒轉

適用入口/先備/邊界

適用入口:12 年級數學甲。 本篇只處理三件事:建立合成函數並追蹤實際定義域;求已限定為一對一函數的代數反函數;由原函數圖形作出反函數圖形。它們對應 F-12甲-1 中的合成函數,以及反函數的數式演算與圖形對稱關係。數學乙的對應條目(F-12乙-1)不討論反函數,也沒有一般性的合成函數,因此本篇不列入數學乙。國家教育研究院:數學領域課綱(107年6月)

必要先備:知道函數的定義域、對應域與值域;能代入代數式、解簡單方程與不等式;理解平方、算術平方根及區間記號;能讀取平面上的點坐標。第五節說明圖形反射時,還會使用中點坐標、直線斜率,以及斜率分別為 1、−1 的兩條直線互相垂直這些幾何知識。第一節另借用已學過的指數、對數互換,說明一段計算方法的歷史,不增加指對數求逆題型。三角函數雖列於官方完整條目的先備,本篇的核心推理不使用三角函數,也不需要微分。

學完後應能做到:不只寫出 f(g(x)),還能說清楚哪些 x 真的能走完整個流程;不只解出一個「反過來的式子」,還能交代反函數的輸入、輸出範圍並雙向回查;不先求代數式,也能依點的對應與端點狀態完成反函數圖形。

範圍邊界:不展開奇偶性、凹凸性、一般平面關係的函數分類、反三角函數、複數分支或微分連鎖律;不討論指數函數與對數函數的交點數。代數求逆與圖形求逆分開示範,不把其中一種方法的完成當作另一種方法也已完成。


一、從替換數字的計算法,到可以操作的對應

學過函數以後,我們很容易把注意力放在一個問題上:

給定輸入,如何算出輸出?

但許多問題還有下一層。算出的輸出,可能必須交給另一套規則;看到最後的結果,也可能需要追問它原來來自哪個輸入。

這兩件事看似相反,其實都要求我們不再只看單一步驟,而要看清楚整個對應的方向與結構。

已經會算,為什麼還需要換一種組織方式?

1614 年,納皮爾出版對數著作。現可讀到的 Edward Wright 英譯序文,保留了他對大數乘除及平方、立方開方的問題描述:這些運算耗時,而且容易出錯。他提出以另一組相應的數代替原數,使部分繁重運算改由加減等較簡單的運算完成。這份史料所說的困境是計算的成本與可靠性,不是當時的人不會乘除。The Open University

原來的方法能得到答案;限制在於,遇到新的大數,又要投入相應的運算工作。另一條路則是先建立可反覆查用的對應,把部分計算工作移到製表階段,再讓使用者利用這份對應完成後續計算。這是「換一種表示再處理」的思想,而不是讓原本不可能的乘法突然變成可能。

以下用今天的常用對數記號重述這種結構,不把它當成納皮爾原表的公式。對正數 x,有

3x=10log10x+log103.

右邊做了三件事:先把 x 換成它的對數,再加上 log103,最後以十的次方換回原來的數值尺度。

它之所以能得到 3x,不是因為三個步驟看起來合理,而是因為指數律給出

10log10x+log103=10log10x·10log103=x·3.

這個小例子只用來展示結構,並不表示計算 3x 時一定值得改用查表。

真正重要的是:若能建立適當的對應,就能先到另一種表示中完成操作,再返回原來的表示。

當時出版的對數表讓這種轉換有了可使用的載體;但製表本身仍需大量工作,有限位的表值也不能與上述精確等式混為一談。納皮爾原有對數的規約、表格用途與後來的常用對數並不相同,不能把今天的簡潔公式倒寫成他的原始定義。The Open University

從特定計算法,到「函數的函數」

另一個可查證的節點,是柯西 1821 年的《分析教程》。第一章不只用一般記號表示函數,也把「函數的函數」說明為連續操作:第一步作用於變數,後面的每一步作用於前一步的結果。同章另以對數方程改寫為指數式,展示由關係反求變數的做法。維基文庫

這表明,至少在這份文本中,數學家已明確把「一套規則接上另一套規則」列為可以討論的結構,而不只是個別數字的計算紀錄。一般函數記號能保留「哪一步接在哪一步之後」這種共同關係,不必把討論綁在某一張數表或某幾個數值上。

這裡要分清兩個層次:對數表是特定的轉換計算法;一般函數表示則讓人們能討論許多不同規則共有的接續結構。前者不是本篇三項技能共同的發明事件,柯西的著作也不是本篇要宣稱的唯一發明起點。早期函數用語與今天的約定,仍有差異。The Open University

用現在的觀點看,這種組織方式讓我們能把三個不同的問題分開:

怎麼接?接了以後哪些輸入仍然有效?接過去以後,能不能唯一地返回?

前兩個問題通向合成函數;最後一個問題通向反函數。


二、合成:把上一步的輸出交給下一步

合成記錄的是先後,不是並排

設第一步規則是 g,第二步規則是 f。輸入 x 的行程是

x→gg(x)→ff(g(x)).

把這兩步合成一個函數,記作

(f∘g)(x)=f(g(x)).

符號 f∘g 讀作「f 合成 g」,但作用時是右邊的 g 先做,左邊的 f 後做。原因直接藏在括號裡:外面的 f 要等裡面的 g(x) 算好,才有自己的輸入。這裡的 ∘ 不是乘號。OpenStax

例如,令

f(u)=u+1,g(x)=2x,

兩個函數的定義域都是 ℝ。那麼

(f∘g)(x)=f(2x)=2x+1.

這是先乘二,再加一。

反過來,

(g∘f)(x)=g(x+1)=2(x+1)=2x+2,

則是先加一,再把整個結果乘二。

取 x=0 回查,第一個流程得到 1,第二個流程得到 2。所以即使兩個流程都能執行,它們也未必得到相同結果:

f∘g≠g∘f

是完全可能的。

合成不保證能交換順序,不是符號的任性規定,而是順序真的可能改變下一步接到的輸入。

不過,「不保證能交換」也不是「任何兩個函數都不能交換」。例如,定義在 ℝ 上的兩個平移

u(x)=x+1,v(x)=x+2

就滿足

u(v(x))=x+3=v(u(x)).

因此,應檢查具體函數與定義域,不能事先假定兩種順序必定相同,也不能事先斷言必定不同。

能接上,不代表每個輸入都能通過

寫出 f(g(x)) 時,還有兩道必須通過的條件。

第一道是 x 必須能進入 g,也就是

x∈Dg.

第二道是 g 算出的結果必須能進入 f,也就是

g(x)∈Df.

因此,合成函數的實際定義域是

Df∘g={x∈Dg: g(x)∈Df}.

這裡的 Dg、Df 分別代表 g、f 的定義域。第二個條件檢查的是 g(x),不是再檢查一次原來的 x。所以不能把合成函數的定義域一律寫成 Dg∩Df。OpenStax

若 g 的所有實際輸出都落在 Df 裡,也就是 Rg⊆Df,合成就能在整個 Dg 上執行。否則,只能保留其中能走完整個流程的輸入。

核心示例:分式接上平方根,定義域怎麼追?

現在換一組函數:

f(u)=u−1,Df=[1,∞), g(x)=1x−2,Dg=ℝ∖{2}.

先代入內函數,得到

(f∘g)(x)=1x−2−1=3−xx−2.

但式子寫出來,不代表工作已經結束。

首先,內函數的分母不能為零,所以

x≠2.

其次,外函數只接受至少為 1 的輸入,因此必須有

g(x)≥1,

也就是

1x−2≥1.

不能不分正負就把 x−2 乘過去。我們分開判斷。

當 x<2 時,x−2<0,所以

1x−2<0,

不可能大於或等於 1。這一側全部排除。

當 x>2 時,x−2>0,這時乘以 x−2 不會改變不等號方向:

1x−2≥1⟺1≥x−2⟺x≤3.

把 x>2 與 x≤3 合在一起,得到

(f∘g)(x)=3−xx−2,Df∘g=(2,3].
FUN13 G01-domain

「原輸入先要避開使內函數失效的 x=2,再使內函數的輸出至少為 1。兩道條件共同留下 (2,3]:左端第一步失效,右端則得到外函數的有效輸入 1。」

回查不能只看最後的式子,要回到兩步流程。

當 x=3 時,

g(3)=1,f(1)=0.

兩步都有效,所以 3 包含在定義域內,右端點是閉的。外函數的輸出等於零,並不構成失效。

當 x=2 時,第一步就除以零,所以 2 排除,左端點是開的。

再取區間內的 x=52:

g(52)=2,f(2)=1.

代入化簡後的式子也得到

3−5252−2=1=1.

兩種計算一致。

最後看區間外的 x=4。它雖然能進入 g,卻得到 g(4)=12,無法進入定義域為 [1,∞) 的 f。因此,內函數有定義,不代表合成函數就有定義。

化簡可以縮短式子,不能擅自擴大函數

令

s(x)=x,Ds=[0,∞), q(x)=x2,Dq=ℝ.

先開平方,再平方:

(q∘s)(x)=(x)2=x,x≥0.

最後雖然只剩下 x,原流程仍然不能接受負數。這個函數是「在 [0,∞) 上把輸入原樣送出」,不能因為化簡後的式子簡單,就改成定義在整個 ℝ 上。

交換順序則有

(s∘q)(x)=x2=|x|,x∈ℝ.

因為算術平方根必須非負,所以當 x=−2 時,結果是 2,不是 −2。當 x=0 時,兩種流程都能執行,結果都是 0。

這個例子同時提醒我們兩件事:

同一個簡潔算式可能附帶不同定義域;兩個看似相反的運算,也未必能在所有輸入上互相還原。


三、倒轉:為何一對一不是裝飾條件

算得出輸出,不表示找得回唯一輸入

考慮定義在整個 ℝ 上的平方函數

q(x)=x2.

輸入 2 與輸入 −2,都得到 4:

q(2)=q(−2)=4.

現在只告訴你結果是 4,要求你唯一地還原原輸入。問題出在哪裡?

不是你不會解方程,而是資訊本來就不足。原來的兩個輸入在平方後變得無法區分。即使計算能力再強,也不能只憑同一個 4,同時判定「原來一定是 2」與「原來一定是 −2」。

因此,若倒轉後仍要是一個函數,原函數就不能讓兩個不同輸入落到同一個輸出。這個條件稱為一對一。

對定義域為 D 的函數 f,一對一的精確意思是

a,b∈D,f(a)=f(b)⟹a=b.

也就是說,只要輸出相同,原輸入就必須相同。OpenStax

反函數從哪裡出發,又回到哪裡?

設

f:D→C.

這裡 D 是定義域,C 是對應域,而

Rf={f(x):x∈D}

是函數實際產生的值域。值域包含在對應域內,但未必等於整個對應域。

若 f 在 D 上一對一,對每個 y∈Rf,都能找到唯一的 x∈D,使得 f(x)=y。

為什麼「找到」與「唯一」都成立?

「找到」來自 y∈Rf:值域中的數本來就有原輸入。

「唯一」來自一對一:不會有兩個不同原輸入產生同一個 y。

因此可以定義

f−1:Rf→D,f−1(y)=x⟺f(x)=y.

反函數不是任意把整個 C 拿來當輸入,而是從原函數的實際值域 Rf 出發。只有當 C=Rf 時,才可以說反函數定義在整個原對應域上。

反函數的定義域是原函數的值域,反函數的值域則是原定義域。OpenStax

真正的還原,必須能雙向回查

由定義可知,

f−1(f(x))=x,x∈D,

表示先送出去,再倒轉回來,得到原輸入。

另一方向則是

f(f−1(y))=y,y∈Rf,

表示從實際輸出找到原輸入,再走一次原流程,必須回到那個輸出。

這兩個等式的右邊是輸入本身,不是數字 1。上標 −1 在 f−1 中表示「反函數」,不表示取倒數。OpenStax

例如,定義在 ℝ 上的 r(x)=2x,其反函數是

r−1(x)=x2,x∈ℝ,

而

1r(x)=12x,x≠0

是另一回事。前者在 x=0 時仍有定義,後者沒有。

回想前面的平方與平方根:

q(s(x))=x(x≥0)

的確成立,但

s(q(x))=|x|

在負數處不等於 x。所以平方函數若仍使用整個 ℝ 作定義域,不能只驗證一個方向,就宣布平方根是它的反函數。


四、代數求逆:原定義域決定可接受的解

代數求逆的核心,不是機械地交換字母,而是:

從 y=f(t) 出發,在原本允許的 t 範圍內,找出唯一的 t。

把它整理成新函數的式子,是這個工作完成後的表示方式。OpenStax

核心示例:已限定右半邊的平方關係

給定函數

p:[2,∞)→ℝ,p(t)=(t−2)2+1.

題目已經限定 t≥2。這個限制是函數的一部分,不是解題時可以忽略的小字。

先看它的一對一性。若 t1,t2≥2,且

(t1−2)2+1=(t2−2)2+1,

則

(t1−2)2=(t2−2)2.

因為 t1−2、t2−2 都非負,平方相等就能推出它們相等,因此 t1=t2。

接著求逆。設

y=(t−2)2+1.

移項得到

y−1=(t−2)2.

由平方的非負性,原函數只能產生 y≥1。又因為原定義域保證

t−2≥0,

所以取算術平方根時,必須得到

t−2=y−1,

進而有

t=2+y−1.

這也證明:對每一個 y≥1,右邊都給出一個至少為 2 的原輸入。因此值域不是只有「包含於 [1,∞)」,而是恰好等於

Rp=[1,∞).

把反函數的輸入重新記為 x,答案是

p−1:[1,∞)→[2,∞),p−1(x)=2+x−1.

為什麼不能保留正負兩個符號?

如果只從方程

(t−2)2=y−1

出發,而不管原函數的定義域,形式上會得到

t=2±y−1.

但當 y>1 時,負號給出的

2−y−1<2,

已經離開原定義域。它不是這個 p 的反函數值。

負號不是「另一個也可以的答案」,而是對應到另一種原定義域限制下的問題。當 y=1 時,兩個式子雖然重合於 2,也不能據此把負號分支納入整個反函數。

雙向回查

先從原輸入 t≥2 出發:

p−1(p(t))=2+((t−2)2+1)−1=2+(t−2)2=2+(t−2)=t.

第三行成立,正是因為 t−2≥0。

再從原值域中的 y≥1 出發:

p(p−1(y))=((2+y−1)−2)2+1=(y−1)2+1=y.

取具體值也能檢查:

p(5)=10,p−1(10)=5.

端點則是

p(2)=1,p−1(1)=2.

注意,原來雖寫成 p:[2,∞)→ℝ,但 0 並不是 p 的實際輸出,所以 p−1(0) 沒有定義。這正是「對應域」與「值域」不能混為一談的地方。


五、圖形求逆:交換點的坐標,而不是重解方程

假設原函數是一對一函數,且其圖形上有點 (a,b)。這個點代表

f(a)=b.

反函數要把輸出 b 送回輸入 a,所以它的圖形上必須有

(b,a).

因此,反函數圖形的基本操作是

(a,b)⟼(b,a).

這個點的交換,在兩軸使用相同單位長度的直角坐標平面上,就是關於直線 y=x 的反射。OpenStax

為什麼對稱軸是 y=x?

若 a≠b,點 (a,b) 與 (b,a) 的中點是

(a+b2,a+b2).

它的兩個坐標相等,所以位於 y=x 上。

而兩點連線的斜率是

a−bb−a=−1,

與斜率為 1 的 y=x 垂直。因此,y=x 正是兩點連線的垂直平分線。

若 a=b,該點就在 y=x 上,交換坐標後位置不變。這不表示該點必須是原點;例如 (2,2) 交換坐標後仍是 (2,2)。

於是,反射不是需要額外背誦的圖形技巧,而是「原輸入、原輸出交換角色」的幾何結果。

核心示例:只給原圖,不先求函數式

設原函數 h 的完整圖形由兩段直線接成:

從實心點 A=(0,1) 連到 B=(1,3),再從 B 連向空心端點 C=(3,4)。點 B 包含在圖形中,點 C 不包含,除此之外沒有其他部分。

沿著原圖由左往右看,輸出一直增加,沒有兩個不同輸入得到同一個輸出,因此它是一對一函數。

FUN13 G02-given

「原圖由 A=(0,1)、B=(1,3)、C=(3,4) 所決定的兩段直線接成,A、B 包含,C 不包含。反函數圖形要交換每個點的兩個坐標,也要保留端點狀態。」

現在直接交換坐標:

A=(0,1)⟼A′=(1,0), B=(1,3)⟼B′=(3,1), C=(3,4)⟼C′=(4,3).

原來的第一段直線反射後,成為連接 A′、B′ 的直線段;第二段則成為從 B′ 連向 C′ 的直線段。

端點狀態也必須一起搬過去。 原圖的 A 包含,所以 A′ 包含;原圖的 C 不包含,所以 C′ 仍是空心端點。

從原圖可讀出

Dh=[0,3),Rh=[1,4).

因此反函數具有

Dh−1=[1,4),Rh−1=[0,3).
FUN13 G02-reflected

「(a,b) 反射為 (b,a)。原圖的實際輸出成為反函數的輸入,所以 [1,4) 是反函數的定義域;原圖不包含 C=(3,4),反射後也不包含 C′=(4,3)。細點畫線 y=x 是對稱線,不是這兩個函數圖形的一部分。」

圖形也要回查

原圖的 B=(1,3) 告訴我們

h(1)=3.

反射後的 B′=(3,1) 就必須表示

h−1(3)=1.

原圖第二段的中點

(2,72)

會反射成

(72,2).

它也恰好位於 B′、C′ 之間的對應直線段上。

原圖不包含輸出 4,所以反函數不能接受輸入 4;空心點 C′ 正是在保留這個資訊。

最後,把反射後的每個點再交換一次坐標:

(a,b)⟼(b,a)⟼(a,b),

就會回到原圖。端點的開閉也應完全回復。

這整個方法沒有先求出 h 的代數式,也沒有用解方程來取得反函數。它直接利用圖形所記錄的對應。


六、今天的例子:把儀器讀值還原成物理量

反函數不只是在紙上交換方向。

美國國家標準暨技術研究院 NIST 的校準手冊說明:對儀器後續量測作校正,需要使用校準曲線的逆向關係;在線性模型中,就是由儀器讀值反求對應的校準值。NIST

以下是一個作者設計的理想化教學情境,不是 NIST 的實測資料。先假設感測器與顯示模組都遵守指定的線性規則,並忽略量測誤差與顯示取整,看看接續與倒轉如何共同工作。本節以 H 表示整體函數,與上一節的折線函數 h 區別。

正向流程:溫度變成電壓,電壓變成顯示值

令 t 表示以攝氏度為單位的溫度數值,使用範圍為

0≤t≤100.

感測器把它轉成電壓數值 v,單位為伏特:

v=g(t)=0.01t+0.50.

這表示每增加 1°C,理想電壓增加 0.01V,而 0°C 對應 0.50V。

因此

Dg=[0,100],Rg=[0.50,1.50].

顯示模組接受 0 到 2 伏特,並把電壓數值轉成無單位的顯示數值 n:

n=f(v)=1000v,Df=[0,2].

這裡各式中的 t、v 都是採用上述固定單位後的數值;1000 是把「以伏特表示的電壓數值」轉成顯示數值的比例係數。n 暫時允許是實數,不預先當成整數讀值。

因為

[0.50,1.50]⊆[0,2],

感測器在指定範圍內的每個輸出,都能交給顯示模組。

合成函數為

H(t)=(f∘g)(t)=1000(0.01t+0.50)=10t+500,

並且

DH=[0,100],RH=[500,1500].

兩個比例係數 0.01、1000 都不為零,所以在各自指定的區間內,不同輸入會得到不同輸出,兩步都具有一對一性。

反向流程:先撤銷最後一步

假設顯示數值是 900。要找回溫度,不能照正向順序做,而要從最後一步開始撤銷。

先撤銷 f:

v=f−1(900)=9001000=0.90.

再撤銷 g:

t=g−1(0.90)=0.90−0.500.01=40.

因此,在這個理想模型中,讀值對應 40°C。

正向回查:

40→g0.90→f900.

整體反函數則是

H−1(n)=n−50010,500≤n≤1500.

它的值域是 [0,100]。端點也能互相還原:

H(0)=500,H−1(500)=0, H(100)=1500,H−1(1500)=100.

為什麼倒轉時,順序也要倒過來?

正向是

t→gv→fn.

反向必須是

n→f−1v→g−1t.

最後一步先撤銷,才會露出前一步原來的結果。

一般而言,若 g、f 在各自指定的定義域上一對一,且 Rg⊆Df,則 H=f∘g 的實際值域是

RH=f(Rg),

也就是把 Rg 中的值送入 f 所得到的所有輸出。在這個值域上,

(f∘g)−1=g−1∘f−1.

這個等式包含定義域限制:右邊只接受能先經 f−1,再經 g−1 的輸入,亦即 RH 中的輸入。

可以用雙向還原直接說明。對 t∈Dg,

g−1(f−1(f(g(t))))=g−1(g(t))=t.

對 n∈RH,因為 f−1(n)∈Rg,所以

(f∘g)(g−1(f−1(n)))=f(f−1(n))=n.

這不是把符號「整排倒過來」的口訣,而是還原流程的必然順序。

定義域仍然不能省略。顯示模組 f 單獨可以接受的反向輸入,是 0 到 2000;但這個感測器與顯示模組接起來後,實際只會產生 500 到 1500。

例如,把 1800 代入

n−50010

雖然算得出 130,卻不能說這是本模型的有效反函數值,因為 1800∉RH,而 130 也超出原先指定的溫度範圍。算式能運算,不等於模型允許這個輸入。

可以解出式子,不代表真實量測毫無不確定性

NIST 的量測模型另有誤差項,也需要估計校準係數。因此,反求出一個校準值,不等於保證它就是毫無誤差的原物理量。原校準關係也不能在儀器狀態改變後無條件沿用;NIST 對反覆使用校準曲線提出了儀器維持統計管制狀態的前提。NIST

此外,非零比例係數不是裝飾條件。假設在同一個溫度區間 [0,100] 內,感測器不論溫度多少都只輸出 0.50V,那麼顯示值就永遠是 500。不同溫度全部合併成同一個輸出,便不能唯一反推溫度。

還有一種限制,即使先不談量測誤差,也會讓精確倒轉失敗:顯示時把不同數值合併。

沿用原來的理想公式,

H(39.96)=899.6, H(40.04)=900.4.

如果顯示模組只保留四捨五入後的整數,兩個不同溫度都會顯示 900。

為了把端點說清楚,本例約定:非負讀值取最接近的整數,恰為半整數時向上取。於是,若仍忽略其他誤差,顯示 900 的條件是

899.5≤10t+500<900.5,

也就是

39.95≤t<40.05.

左端的 899.5 取整為 900,右端的 900.5 則取整為 901,所以兩個端點的開閉不同。

這時,只看最後留下的 900,就不能唯一地知道原來是哪個溫度。取整後的整體對應不再一對一。把 900 代入未取整模型的反函數而得到 40,可以提供一個代表性的反推數值,卻不是找回唯一原溫度的證明。

問題不是反函數公式不夠高明,而是這個流程已經把不同輸入合併成同一個輸出。知道這個限制,才能分清楚「得到一個合理的反推值」與「精確找回唯一原值」不是同一件事。


七、把一套流程看完整

合成與反函數帶來的,不只是兩種新算式,而是兩種檢查關係的方法。

合成問的是:這一步的結果,能不能成為下一步的輸入?

因此除了規則,還要追蹤中間值;除了化簡,還要保留原來的限制。

反函數問的是:最後的結果,是否足以唯一指出原來的輸入?

因此除了會解方程,還要檢查一對一;除了交換坐標,還要交換實際的輸入、輸出範圍,並保留每一個端點的開閉。

查表計算與儀器校準是不同時代、不同用途的例子,不必把它們視為一條已被證實的直接歷史因果鏈。它們在本篇呈現的共同數學結構是:

對應的接續,要檢查中間能否銜接; 對應的倒轉,要檢查原輸入能否唯一找回。

掌握這個區別,你看到一個複雜算式時,就不必只問「如何算得更快」,還能進一步問:

它由哪些作用接成?哪些輸入真的有效?哪些資訊保留下來,哪些已經無法從結果中恢復?