函数复合

**複合函數**（英語：Function composition），又稱作**合成函數**，在數學中是指逐點地把一個函數作用於另一個函數的結果，所得到的第三個函數。例如，函數 _f_ : _X_ → _Y_ 和 _g_ : _Y_ → _Z_ 可以複合，得到從 _X_ 中的 _x_ 映射到 _Z_ 中 _g_(_f_(_x_)) 的函數。直觀來說，如果 _z_ 是 _y_ 的函數，_y_ 是 _x_ 的函數，那麼 _z_ 是 _x_ 的函數。得到的複合函數記作 _g_ ∘ _f_ : _X_ → _Z_，定義為對 _X_ 中的所有 _x_，(_g_ ∘ _f_ )(_x_) = _g_(_f_(_x_))。 直觀地說，複合兩個函數是把兩個函數連結在一起的過程，內函數的輸出就是外函數的輸入。

函數的複合是關係複合的一個特例，因此複合關係的所有性質也適用於函數的複合。 複合函數還有一些其他性質。

## 定義

考慮到函數的值域跟定義域，要簡單的以 "計算式"，如把所有 $(x,\,x+1)$ 和 $(y,\,{\sqrt {y}})$ 的有序對頭接尾的這樣直觀定義 "合成" 是會遇到問題的，像是把 $x$ 取為實數，這樣把 $x+1$ 很自然的對接到 $y$ 然後開根號成 ${\sqrt {y}}$ ，是會遇到對負數開根號，出現非單一值的問題 (請參見棣美弗公式) ，就算不考慮單一值的問題，我們期望的 "合成函數" 的值域到底該不該包含複數呢？所以 (1) 我們一開始就要把準備 "合成" 的兩個函數的值域跟定義域劃分清楚 (2) 要考慮到對接的時候，前面的值域跟後面的值域不一定相等的問題。

如果我們有兩個函數 $f$ 和 $g$ ，而兩者的定義域分別是 $D_{f}$ 和 $D_{g}$ ；值域分別是 $I_{f}$ 和 $I_{g}$ 。如果 $I_{f}\cap D_{g}\neq \varnothing $ ，那我們定義合成函數為

　
: $g\circ f:=\{(x,\,z)\,|\,(\exists y\in I_{f}\cap D_{g})[y=f(x)\wedge z=g(y)]\}$

直觀上來說，如果 $f$ 的 "輸出範圍" 是有一部分在 $g$ 的 "輸入範圍"，那我們就可以定義 " 先作用 $f$ 再作用 $g$ "的函數，但這個" 新合成 " 的函數的定義域可能會因此被限縮 (輸出值處在兩者交集的那些 $x$ 而已)。注意到每個 $x$ 只會有一個輸出值 $y$ ，而每個 $y$ 只會有一個輸出值 $z$ ，所以這樣 " 先作用 $f$ 再作用 $g$ " 的話，每個 $x$ 只會有一個輸出值 $z$ 而已，這確保了 $g\circ f$ 符合我們對函數的要求。

當 $g\circ f=f\circ g$ 時 (注意這是集合的相等！)，我們會說 $g$ 和 $f$ 是可交換的。

兩個一對一函數的合成函數也是一對一的。

涉及到可導函數的複合函數的導數，可以用連鎖律求得。Faà di Bruno 公式給出了複合函數的高階導數的表達式。

## 例子

* 有限集上的函數複合：若 _f_ = {(1, 3), (2, 1), (3, 4), (4, 6)}，_g_ = {(1, 5), (2, 3), (3, 4), (4, 1), (5, 3), (6, 2)}，則 _g_ ∘ _f_ = {(1, 4), (2, 5), (3, 1), (4, 2)}.
* 無限集上的函數複合：若 _f_: ℝ → ℝ （其中 ℝ 是所有實數的集合）表達式為 _f_(_x_) = 2_x_ + 4，而 _g_: ℝ → ℝ 表達式為 _g_(_x_) = _x_3，則：

　
: (_f_ ∘ _g_)(_x_) = _f_(_g_(_x_)) = _f_(_x_3) = 2_x_3 + 4, and

　
: (_g_ ∘ _f_)(_x_) = _g_(_f_(_x_)) = _g_(2_x_ + 4) = (2_x_ + 4)3.

* 如果一架飛機在 _t_ 時刻的海拔為 _h_(_t_)，而海拔 _x_ 處的氧氣濃度為 _c_(_x_)，那麼 (_c_ ∘ _h_)(_t_) 描述了 _t_ 時刻飛機周圍的氧氣濃度。

## 複合么半群

假設我們有兩個（或多個）函數 _f_: _X_ → _X_, _g_: _X_ → _X_，定義域與對應域相同；這些函數一般稱作轉換。於是，我們可以構造多個轉換複合而成的鏈，比如 _f_ ∘ _f_ ∘ _g_ ∘ _f_。這種鏈具有么半群的代數結構，稱作轉換么半群或者複合么半群。通常，轉換么半群可以具有非常複雜的結構。一個很有名的例子是德拉姆曲線。所有函數 _f_: _X_ → _X_ 的集合稱作 _X_ 上的全轉換半群或對稱半群。（我們其實可以定義兩個半群，這取決於定義半群運算為函數左複合和右複合的方式。）

如果轉換是對射（也就可逆），則這些函數所有可能的組合就構成了一個轉換群；可以說這個群是由這些函數生成的。這就引出了群論裡面的凱萊定理從本質上表明，（在同構意義下）任何群都是某一置換群的子群。

所有對射函數 _f_: _X_ → _X_（稱作置換）的集合構成了一個關於複合算子的群。這就是對稱群，有時稱作複合群。

在（所有轉換的）對稱半群中，我們還可以發現一個較弱的、非唯一的逆轉換（稱作偽逆），因為對稱子群是一個正則半群。

## 函數冪

如果 _Y_ ⊆ _X_，則 _f_: _X_→_Y_ 有可能可以與自身複合；這有時候記作 _f_ 2。即：

　
: (_f_ ∘ _f_)(x) = _f_(_f_(_x_)) = _f_ 2(_x_)

　
: (_f_ ∘ _f_ ∘ _f_)(x) = _f_(_f_(_f_(_x_))) = _f_ 3(_x_)

　
: (_f_ ∘ _f_ ∘ _f_ ∘ _f_)(x) = _f_(_f_(_f_(_f_(_x_)))) = _f_ 4(_x_)

更一般地，對於 _n_ ≥ 2 的自然數，_n_ 次**函數冪**可以歸納定義為 _f_ n = _f_ ∘ _f_ n−1 = _f_ n−1 ∘ _f_. 這種函數與自身的反覆複合稱作**迭代函數**。 

* 習慣上，_f_ 0 定義為 _f_ 定義域上的恆同映射，_id_X.
* 如果 _Y_ = _X_，而 _f_: _X_ → _X_ 存在反函數 _f_ −1，那麼對於 _n_ > 0，負函數冪 _f_ −_n_ 定義為反函數的冪：_f_ −_n_ = (_f_ −1)n.

**注意：**若 _f_ 在一個環內取值（特別是對於實值或複值 _f_），存在混淆的風險，因為 _f_ n 也可以表示 _f_ 的 _n_ 次乘積，比如 _f_ 2(_x_) = _f_(_x_) · _f_(_x_). 對於三角函數，通常會使用後者的含義，至少對於正指數是這樣。例如，在三角學中，使用三角函數 sin2(_x_) = sin(_x_) · sin(_x_) 的時候，這個上標記號表示標準的指數運算。不過，對於負指數（特別是 −1），則通常指的是反函數，例如，tan−1 = arctan ≠ 1/tan.

在一些情況下，對於給定函數 _f_，方程式 _g_ ∘ _g_ = _f_ 只有一個解 _g_ 的時候，該函數可以定義為 _f_ 的函數平方根，記作 _g_ = _f_ 1/2.

更一般地，當 _g_n = _f_ 只有唯一解時（自然數 _n_ > 0），_f_ m/_n_ 可以定義為 _g_m. 

在額外的限制下，這個想法還可以推廣，使得迭代函數可以是一個連續的參數；在此情形下，這樣的系統稱作流，由施洛德方程式定義。迭代函數和流很自然地出現在碎形和動態系統的研究中。

為避免混淆，有些數學家把 _f_ 的 _n_ 次迭代寫作 _f_ °n.

## 其他記法

許多數學家，特別是群論方面的數學家，省去複合符號，把 _g_ ∘ _f_ 寫作 _gf_.

在 20 世紀中葉，一些數學家認為用「_g_ ∘ _f_ 」來表示「首先施加 _f_，然後施加 _g_」太令人困惑，於是決定改變記法。他們用「_xf_」來代表「_f_(_x_)」，用「(_xf_)_g_」來代表「_g_(_f_(_x_))」。 這在某些領域會比函數寫在左面更加自然和簡便 — 比如在線性代數中，當 _x_ 為行向量，_f_ 和 _g_ 表示矩陣，而複合是通過矩陣乘法完成的時候。這種替代記法稱作後綴表示法。順序很重要，因為函數複合不一定是可交換的（比如矩陣乘法）。向右進行施加函數和複合的寫法複合從左到右的閱讀順序。

使用後綴表示法的數學家可能會寫「_fg_」，表示先施加 _f_ 再施加 _g_，這樣就能與後綴表示法中的符號的順序保持一致，不過這就會讓「_fg_」這個記號有歧義了。計算機科學家可能用 _f_ ; _g_ 來表示 [1] ，這樣就能區分出複合的順序了。要把左複合算子和文本分好區分開來，在 Z 表示法（Z notation）中 ⨾ 字符用於左關係複合。 由於所有函數都是二元關係，在函數複合中也應該用 [粗] 分號（參見 關係複合條目了解此記法的詳細內容）。

## 複合算子

給定函數 _g_，**複合算子** _C_g 定義為使得

　
: : $C_{g}f=f\circ g.$

的從函數映射到函數的算子。在算子理論領域會研究複合算子。

## 多元函數

對於多元函數來說，部分複合是有可能的。當函數 _f_ 的部分參數 _x_i 由 _g_ 換掉後得到的結果在一些計算機工程文獻中，記作 _f_ |xi = _g_

　
: $f|_{x_{i}=g}=f(x_{1},\ldots ,x_{i-1},g(x_{1},x_{2},\ldots ,x_{n}),x_{i+1},\ldots ,x_{n}).$

當 _g_ 是一個常數 _b_ 時，複合退化為一個（部分）求值，其結果就會是限制或者輔因子。

　
: $f|_{x_{i}=b}=f(x_{1},\ldots ,x_{i-1},b,x_{i+1},\ldots ,x_{n}).$

通常，多元函數的複合可能涉及若干其他函數作為參數，如原始遞迴函數的定義。給定 _f_，一個 _n_ 元函數，_n_ 個 _m_ 元函數 _g_1, ..., _g_n，_f_ 與 _g_1, ..., _g_n 的複合是 _m_ 元函數

　
: $h(x_{1},\ldots ,x_{m})=f(g_{1}(x_{1},\ldots ,x_{m}),\ldots ,g_{n}(x_{1},\ldots ,x_{m}))$ .

這有時稱作 _f_ 與 _g_1, ..., _g_n 的**廣義複合**。 在這個一般化的情形中，可以通過把所有這些用作參數的函數合適地選為射影函數，只保留一個參數函數，就能得到前面提到的只有一個參數部分複合的函數。還要注意，在這個一般化情形中，_g_1, ..., _g_n 可以看作是單個向量或元組值函數，這樣理解的話，這就是複合函數的標準定義。

某些基本集 _X_ 上的一些有限性運算稱作克隆，它們需要包含所有射影，並且在廣義複合下封閉。請注意，克隆通常包含各種元數（arity）的運算。 交換的概念在多元情形中葉有一個有意思的推廣：如果元數 _n_ 的函數 _f_ 是保持 _g_ 的同態函數（_g_ 的元數為 _m_），則可以說 _f_ 與 _g_ 是可交換的，反之亦然。例如：

　
: $f(g(a_{11},\ldots ,a_{1m}),\ldots ,g(a_{n1},\ldots ,a_{nm}))=g(f(a_{11},\ldots ,a_{n1}),\ldots ,f(a_{1m},\ldots ,a_{nm}))$ .

一元運算總是與自己可交換，但二元（或者更多元）運算不一定如此。與自身可交換的二元（或更多元）運算稱為 medial 或 entropic。

## 推廣

複合可以推廣到任意二元關係。若 _R_ ⊆ _X_ × _Y_ 與 _S_ ⊆ _Y_ × _Z_ 是兩個二元關係，則它們的複合 _S_∘_R_ 是定義為 {(_x_, _z_) ∈ _X_ × _Z_ : ∃_y_ ∈ _Y_. (_x_, _y_) ∈ _R_ ∧ (_y_, _z_) ∈ _S_}. 考慮二元關係的一個特殊情形（函數關係），複合函數滿足關係複合的定義。

偏函數的複合可是用相同方式定義的定義，有一個類似凱萊定理（Cayley's theorem）的定理叫做 Wagner-Preston 定理。

具有態射函數的集合範疇叫做原型範疇（prototypical category）。範疇的公理實際上受到了複合函數的性質（和定義）啟發。 由複合形成的結構在範疇論中被公理化和推廣，函數的概念換成了範疇論中的態射。公式 (_f_ ∘ _g_)−1 = (_g_−1 ∘ _f_ −1) 中的反序複合，同樣適用於使用逆關係的關係複合，因此在群論中也適用。這些結構形成了 dagger 範疇。

## 排版

複合算子 ∘  編碼為 U+2218 ∘ RING OPERATOR ，HTML：`&#8728;`。參見 Degree symbol 條目中外觀類似的 Unicode 字符。在 TeX 中，寫作 `\circ`。

## 參見

* 組合子邏輯
* 函數分解
* 迭代函數
* 解析函數的無限複合
* 流
* 高階函數
* 蛛網圖，函數複合的圖形方法
* Λ 演算
* 函數平方根
* 複合環，複合運算的形式公理化
* 隨機變數函數

## 注釋

## 參考文獻

## 外部連結

* Hazewinkel, Michiel (編), Composite function, 数学百科全书，Springer, 2001, ISBN 978-1-55608-010-4
* "Composition of Functions （頁面存檔備份，存於網際網路檔案館）" by Bruce Atwood, the Wolfram Demonstrations Project, 2007.