函数

<image>

函数（function）是数学描述对应关系的一种特殊集合；粗略地说，从集合$X$到集合$Y$的函数将$Y$的一个元素恰好分配给$X$的每个元素。集合$X$称为函数的定义域，集合$Y$称为函数的到达域。（注意不要与值域混淆）

函数最初是一个变化的量如何依赖另一个量的理想化。例如，特定时间行星的位置可以视为是行星的位置对时间的函数。“函数”一词作为数学概念是由莱布尼茨首先引入的。从历史上看，这个概念是在17世纪末用无穷微积分来阐述的，直到19世纪，所考虑的函数都是可微的。函数的概念于19世纪末在集合论中被形式化，这大大扩展了这个概念的应用领域。

<image>

## 简介

若$x$是实数，以有序对$(x,\,x^2)$为元素所构成的集合就是一个函数。直观上代表“输入”$x$就可以得到唯一值$x^2$的对应关系。

一般会以英文字母$f,\,g,\,h$表示函数，并把$x$依据函数$f$的对应规则所得到的值写作$f(x)$，并读作“f of x”。函数的概念不限于数之间的对应关系，例定义函数$\operatorname{Capital}$为世界上所有国家跟它现在的首都的对应关系，那输入英国就会输出唯一值伦敦：$\operatorname{Capital}(\mathrm{U.K.}) = \mathrm{London}$。

直观上的“多变数函数”其实也可以概括到一般函数的定义里。例如算式$x\times y$有两个实数参数$x$和$y$。可以将这两个参数看作一个实数有序对$(x,y)$，然后定义一个以$((x,\,y),\,x\times y)$为元素所构成的函数$f$，然后把$f[(x,\,y)] = x \times y$简记成符合直观的$f(x,\,y) = x \times y$。

数学中，对应、映射、变换通常都是函数的别称，但也可能有别的意思，如在拓扑学的映射有时代表的是连续函数。

在类型论的λ演算中，“对应关系”可以是作为一个原始概念（也就是无定义名词），而不像上述的定义把函数视为集合的衍伸物。

函数的值域或像是定义域中所有元素的像之集合。

## 历史

函数（function）这个数学名词是莱布尼兹在1694年开始使用的，用来描述跟曲线相关的一个量，如曲线的斜率或者曲线上的某一点。莱布尼兹所指的函数现在被称作可导函数，数学家之外的普通人一般接触到的函数即属此类。对于可导函数可以讨论它的极限和导数，此两者描述了函数输出值的变化同输入值变化的关系，是微积分学的基础。中文的“函数”一词由清朝数学家李善兰译出。其《代数学》书中解释：“凡此变数中函（包含）彼变数者，则此为彼之函数”。

- 1718年，约翰·伯努利把函数定义为“一个变量的函数是指由这个变量和常量以任何一种方式组成的一种量。”
- 1748年，伯努利的学生欧拉在《无穷分析引论》一书中说：“一个变量的函数是由该变量和一些数或常量以任何一种方式构成的解析表达式”，例如$f(x)=\sin(x)+x^2$。
- 1775年，欧拉在《微分学原理》一书中又提出了函数的一个定义：“如果某些量以如下方式依赖于另一些量，即当后者变化时，前者本身也发生变化，则称前一些量是后一些量的函数。”
- 19世纪的数学家开始对数学的各个分支进行形式化。维尔斯特拉斯倡议将微积分学建立在算术，而不是几何的基础上，这种主张较趋向于欧拉的定义。
- 函数的定义得以扩展之后，数学家便能对一些“奇怪”的数学对象进行研究，例如处处不可导的连续函数。这些函数曾经被认为只具有理论价值，迟至20世纪初时它们仍被视作“怪物”。稍后，人们发现这些函数在对如布朗运动之类的物理现象进行建模时有重要的作用。
- 到19世纪末，数学家开始尝试利用集合论来进行数学的形式化。他们试图将每一个数学对象都定义为集合。狄利克雷给出了现代正式的函数定义（参见下文#正式定义）。在他的定义下，函数被视作数学关系的特例。然而对于实际应用的情况，现代定义和欧拉定义的区别可以忽略不计。

## 正式定义

<image>

二元关系 $f$ 若满足：

$$(\forall a)(\forall b)(\forall b^{\prime}) \{\, <pre> [\,(\langle a,\,b \rangle \in f) \wedge (\langle a,\,b^{\prime}\rangle \in f)\,] \Rightarrow (b=b^{\prime}) </pre> \,\}$$

则称为 $f$ 为一函数。

（为了避免$(x,\,y)$的括弧与逻辑叙述的括弧混淆，本页面也以$\langle x,\,y \rangle$表示有序对）

也就是直观上，有序对$(x,\,y)$代表(输入值, 输出值)；而$f$本身是以穷举所有(输入值, 输出值)来详尽定义的对应规则，且每个输入值只能对应一个输出值。

### 函数值的简记

习惯上把$(x,\,y)\in f$“等价地”记为$y=f(x)$。但严格来说，$f(x)$是在一阶逻辑公理化集合论下额外新增的双元函数符号（因为$x$与$f$各为一个变数），而它的“定义”就是以下新增的公理：

$$\{\,\neg(\mathcal{B}\wedge\mathcal{C}_x) \wedge [\,f(x)=\varnothing\,]\,\} \vee \{\,(\mathcal{B}\wedge\mathcal{C}_x) \wedge [\,\langle x,\,f(x) \rangle \in f\,]\,\}$$

其中：

$\mathcal{B} := (\forall a)(\forall b)(\forall b^{\prime}) \{\, <pre> [\,(\langle a,\,b \rangle \in f) \wedge (\langle a,\,b^{\prime}\rangle \in f)\,] \Rightarrow (b=b^{\prime}) </pre> \,\}$ （$f$ 的每个输入值只对应一个输出值）

$\mathcal{C}_x := (\exists y)(\langle x,\, y \rangle \in f) <pre>$ （$x$ 在 $f$ 规定的输入值范围内）

新增公理的合理性假设有$\mathcal{B} \wedge \mathcal{C}_x$，此时对公式$\mathcal{B}$套用量词公理A4有： :$(\forall b)(\forall b^{\prime}) \{\, [\,(\langle x,\,b \rangle \in f) \wedge (\langle x,\,b^{\prime}\rangle \in f)\,] \Rightarrow (b=b^{\prime}) \,\}$ 这样综合上式和$\mathcal{C}_x$，并利用A4和普遍化将$\mathcal{C}_x$中的$y$代换成$b$就有： :$(\exists! b)(\langle x,\,b \rangle \in f)$ 换句话说： :$\mathcal{B} \wedge \mathcal{C}_x \vdash (\exists! b)(\langle x,\,b \rangle \in f)$ 这样根据特定条件下的存在性就有： :$\vdash (\exists! b)\{\, [\,\neg(\mathcal{B}\wedge\mathcal{C}_x) \wedge (b=\varnothing)\,] \vee [\,(\mathcal{B}\wedge\mathcal{C}_x) \wedge (\langle x,\,b \rangle \in f)\,] \,\}$ 这样根据函数符号与唯一性的内容，就可以于策梅洛-弗兰克尔集合论增加上述的公理与双元函数符号$f(x)$，且新增这个公理的新理论等效于原来的理论。

直观上，这个公理表示“若$f$为一函数且$x$在$f$的输入值范围，则$\langle x,\,f(x) \rangle \in f$；否则规定$f(x)$为空集”。

这样根据函数符号与唯一性的定理(E)和普遍化，就会有本节一开始所期望的直观性质：

$$\mathcal{B} \land \mathcal{C}_x \vdash (\forall y)\{\, <pre> [\,y = f(x)\,] \Leftrightarrow [\,\langle x,\, y \rangle \in f\,] </pre> \,\}$$

也就是“若$f$为一函数且$x$在$f$的输入值范围，则对所有的$y$，$\langle x,\,y \rangle \in f$等价于$y = f(x)$”。

另一方面，对于直观上“n个变数”的函数$\mathcal{f}$，也就是

$$\langle\,\langle x_1,\,\cdots,\,x_n \rangle,\,y \rangle = \langle x_1,\,\cdots,\,x_n,\,y \rangle \in f$$

换句话说

$$y = f \big(\langle x_1,\cdots,\, x_n \rangle \big)$$

这时习惯上会将$\mathcal{f}$的“函数值”进一步简写为

$$y = f(x_1,\cdots,\, x_n)$$

### 定义域与值域

如果能指出函数$f$的“输入值范围”跟“输出值范围”，对数学的讨论是相当方便的；事实上公理化集合论中，分类公理确保对任意集合$A$有唯一的集合$D_A$和$I_A$（严格来说，单元函数符号）分别满足

$(\forall x)\{(x \in D_A) \Leftrightarrow (\exists y)[\,(x,\,y) \in A\,]\}$（“输入值范围”）

$(\forall y)\{(y \in I_A) \Leftrightarrow (\exists x)[\,(x,\,y) \in A\,]\}$（“输出值范围”）

直观上，$D_A$是搜集所有$A$里所有有序对的第一个所构成的集合；$I_A$是搜集所有$A$里所有有序对的第二个所构成的集合。这样的话，如果$A$本身就是函数的话，$D_A$就是所谓的“输入值范围”，所以被称为定义域；类似地，$I_A$就是所谓的“输出值范围”，所以被称为值域。

通常情况下，有以下惯用的记号

$$f: X \to Y := [\,(f \text{ is a function}) \wedge (D_f=X) \wedge (I_f \subseteq Y)\,]$$

也就是直观上，$f: X \to Y$表示“$f$是函数且其定义域为$X$，且值域包含于$Y$。”。这种情况下，$Y$通常被俗称为对应域。

属于定义域$D_f$的元素$x$常被俗称为自变量（independent variable），而项$f(x)$则被俗称为因变量（dependent variable），但是这跟实验上的自变量和因变量是稍有不同的，因为前者是现实得到的实验值之间的关联，但另一个是源于集合论的概念。

### 一对一

函数 $f$ 若满足

$$(\forall y)(\forall x)(\forall x^{\prime}) \{\, <pre> [\,(\langle x,\,y \rangle \in f) \wedge (\langle x^{\prime},\,y\rangle \in f)\,] \Rightarrow (x = x^{\prime}) </pre> \,\}$$

则被称为一对一的（one-to-one）或是单射（injective function）。

直观上，若函数$f$的输出值都只能被唯一个输入值对应，则称$f$是一对一的。

若$f$是单射，那（根据分类公理所取的）以下的集合：

$$f^{-1}:=\{\,p\,|\,(\exists x)(\exists y)[\,p = (y,\,x)\,\wedge\, y = f(x) \,]\,\}$$

也是一个函数，被称为$f$的反函数。

### 满射

$f: X \to Y$这个简记只能指出“输出值不会超出$Y$”，为了弥补这个简记的缺陷，口语上会将满射（surjective function）定义为“$f: X \to Y$且值域就是$Y$”的函数。

（1）一对多。$X$中的元素3与$Y$中的两个元素$b$和$c$相关。因此这是多值函数，而不是函数。

（2）一对一但非完全对应。$X$的元素1未与$Y$的任一元素相关。因此这是偏函数，而不是函数。

（3）完全对应且多对一，因此这是从$X$到$Y$的函数。此函数可以表示为$f=\{\,(1,d),(2,d),(3,c)\}$，或$f(x)=\left\{\begin{matrix} d, & \mbox{if }x=1 \\ d, & \mbox{if }x=2 \\ c, & \mbox{if }x=3\end{matrix}\right.$

## 函数的简记

除了正式定义一节所规范的集合论表示法，一般的数学书籍会采用比较通俗的函数表记方法，下面将一一介绍。

### 函数记号

很多函数都是取实数为输出值和输入值，换句话说，都是$f: A \to \R$（$A \subseteq \R$），这些函数很多都是以实数的四则运算去定义的。但考虑到实数加法可由皮亚诺公理里的单元函数符号$S(x)$（直观上解释成“$x$的下一个”，或说“$x + 1$”）建构出来，或被视为实数公理系统里的双元函数符号$P(x,\,y)$（简记为$x + y$），实数加法其实是一阶逻辑下的项；类似地，其他四则运算也可以此类推，而得出他们都是项的结论。所以直观上定义实数函数的时候，都希望一条项（直观上的运算式）能唯一决定一个函数，比如说，对于项：

$$x + 1$$

以下的集合：

$$h := \bigg\{ p \,\bigg|\, (\exists x \in \R)[ p = (x,\, x + 1)] \bigg\}$$

是一个函数。为了让这类函数的表示更加简洁，就衍伸出以下的表记方式：

$X_1,\,\dots,\,X_n$ 都是集合，$T$ 是含有变数 $x_1,\,\dots,\,x_n$ 的项，那在：

$$(\forall x_1 \in X_1)\dots(\forall x_n \in X_n)(\exists! y)(y = T)$$

前提下，则可做以下的符号定义：

$$f(x_1,\,\dots,\,x_n) = T \;\;(\langle x_1,\,\dots,\,x_n \rangle \in X_1 \times \dots \times X_n)\,$$

$$:=$$

$$f = \bigg\{ <pre> p \,\bigg|\, \exists x_1\dots\exists x_n[(\langle x_1,\,\dots,\,x_n \rangle \in X_1 \times \dots \times X_n) \wedge ( p = \langle x_1,\,\dots,\,x_n,\,T \rangle )] </pre> \bigg\}$$

这个表记方式被称为函数记号（functional notation），直观上表示“若从$X_i$依序取出地$x_i$代入$T$里，都可以得到唯一的输出值，那可以定义一个$f(x_1,\,\dots,\,x_n) = T$的函数”。（$T$有可能不满足前提，从而无法定义这样的一个函数，如取$T := x_1 + z$就无法得到唯一输出值）

像是取$T$为$x + 1$的话，因为实数加法的性质而有：

$$(\forall x \in \R)(\exists! y)(y = x + 1)$$

因为单元对被规定成：

$$\langle x \rangle := x$$

这样就可以把前面的函数$h$简记为：

$$h(x) = x + 1 \; (x \in \R)$$

如果定义域可以从上下文推断出来，函数记号可以更不正式的写为：

$$f(x_1,\,\dots,\,x_n) = T$$

比如说函数$h$就可以进一步简记为：

$$h(x) = x + 1$$

这个记号是1734年第一次被莱昂哈德·欧拉所采用。但当时并没有清楚地区分函数、项与幂级数，因为当时并没有一阶逻辑这种清楚研究语言推理的系统；也并不知道有些物理应用的函数不能用幂级数展开。

### 箭号表示

以上的函数记号也可以稍作修改，来明确的指出“输出值”的范围：

$X_1,\, \dots ,\, X_n$ 与 $Y$ 都是集合，$T$ 是含有变数 $x_1,\,\dots,\,x_n$ 的项，在：

$$(\forall x_1 \in X_1)\dots(\forall x_n \in X_n)(\exists! y)[\, <pre> (y \in Y) \wedge (y = T) </pre> \,]$$

前提下，可做以下的符号定义：

$$f: X_1 \times \dots \times X_n \to Y ;\; \langle x_1,\,\dots,\,x_n \rangle \mapsto T$$

$$:=$$

$$f = \bigg\{ p \,\bigg|\, \exists x_1 \dots \exists x_n[ <pre> (\langle x_1,\,\dots,\,x_n\rangle \in X_1 \times \dots \times X_n) \wedge (p = \langle x_1,\,\dots,\,x_n,\, T \rangle) \wedge (T \in Y) </pre> ] \bigg\}$$

这个表记方式被称为箭号表示（arrow notation），直观上表示“若把从$X_i$依序取出地$x_i$代入$T$里，都可以得到$Y$里的某唯一输出，那可以定义一个从$X$到$Y$，对应规则为$\langle x_1,\,\dots,\,x_n \rangle \mapsto T$的函数$f$”

上述符号也可以比较通俗地记为：

$$f: X_1 \times \dots \times X_n \to Y ;\;f(x_1,\,\dots,\,x_n) = T$$

比如说，取$T_x$为$x + 1$的话，因为实数加法的性质而有：

$$(\forall x \in \R)(\exists! y)[ <pre> (y \in \R) \wedge (y = x + 1) </pre> ]$$

因为$x \in \R$可以推出$x + 1 \in \R$，所以可把函数$h$表示成：

$$h: \R \to \R ;\;h(x) = x + 1$$

箭号表示常用来“固定”某个变数，来得到新的函数；假设$T_{xt}$是含有变数$x$和$t$的项，如果：

$$f: X\times T\to Y;\;(x,t) \mapsto T_{xt}$$

$$\tau \in T$$

那根据：

$$(\forall x)(\forall y)(\forall x^{\prime})(\forall y^{\prime})\{ <pre> (\langle x, y \rangle = \langle x^{\prime}, y^{\prime}\rangle) \Leftrightarrow [(x = x) \wedge (y^{\prime} = y^{\prime})] </pre> \}$$

若假设$T_{x\tau}$是将$T_{xt}$里的$t$都代换成$\tau$所形成的新项，那以下的符号简写也是可行的：

$$f_\tau: X\to Y;\; x \mapsto T_{x\tau}$$

直观上来说，$f_\tau$是把$f$第二个变数$t$“固定”成特定的$\tau$所得到的新函数，英文上也可称为partial applied function。

### 间隔号表示

可以把箭号表示里的$x$都取代成间隔号，变成更通俗直观的间隔号表示，比如说：

$$f: \R \to \R;\;x \mapsto x^2$$

可以记为：

$${(\cdot)}^2$$

或是对于$[a,\,b]$可积的$f: [a,\,b] \to \R$，作如下定义的话：

$$g: [a,\,b] \to \R;\;x \mapsto \int_a^x f(u) \,du$$

函数$g$的定义亦可不正式的记为：

$$\int_a^{(\cdot)} f(u) \,du$$

但这个表记方法的明显缺点是无法指出定义域，因为函数于哪个区间可积会决定以上的函数$g$的定义可不可行。

## 函数图形

<image>

如果函数$f$的值域跟定义域都是实数集合（俗称$f$为实函数），可以x轴代表定义域的范围；y轴代表值域的范围，把函数的每个元素标示在平面直角坐标上，这被称为实函数$f$在平面上的函数图形。

对于“双变数”的实函数$g$，也就是以($x,\,y,\,z\in\mathbb{R}$)

$$((x,\,y),\,z)$$

为元素的函数，可以取

$$D_x = \{\,x\,|\,(\exists y)(\exists z)[\, g(x,\,y)=z\,]\,\}$$

$$D_y = \{\,x\,|\,(\exists x)(\exists z)[\, g(x,\,y)=z\,]\,\}$$

然后以x轴为$D_x$变化范围；y轴为$D_y$变化范围；最后取z轴为$g$的值域变化范围，这样就可以在三维直角坐标绘出$g$的函数图形。

### 实函数的判别

平面上的任意图形可用竖直判别法判断是否为实函数的图形，即图形与任何一条平行于y轴的直线不能有一个以上的交点。但实际上这仅仅是函数正式定义的一种应用，因为平行于y轴的直线代表的是形如

$$\{\,p\in{\mathbb{R}}^2\,|\,(\exists y \in \mathbb{R})[\, p = (c,\,y)\,]\,\}$$

集合，也就是此直线交x轴于$(c,\, 0)$，那这样直线与实函数$f$的交集就是

$$\{\,p\in{\mathbb{R}}^2\,|\,(\exists y \in \mathbb{R})[\, p = (c,\,y) \wedge y = f(c)\,]\,\}$$

而属于这个交集里的平面点最多只能有一个，否则就会跟每个$x\in D_f$只能对应一个$f(x)$的基本定义矛盾。

## 像和原像

像可以指两种不同的概念

第一种是形如$f(x)$的项，直观上代表的是依照函数$f$的对应规则，使$x$能对应到的那个“值”。(严谨的意义请回去参考函数值的简记)

第二种指的是集合$A$在函数$f$下定义的集合$f(A)$

$$f(A) := \{\,y \,|\, (\exists x\in A)[\,y=f(x)\,] \,\}$$

注意$f$的值域就是定义域$D_f$的像$f(D_f)$。在正式定义一节的最后例子中，$\{2,3\}$在$f$的像是$f(\{2, 3\})=\{c, d\}$，而$f$的值域是$\{c, d\}$。

类似的，集合$B$在函数$f$下的原像（或逆像）定义为：

$$f^{-1}(B):=\{\,x\,|\, (\exists y)[\,y=f(x) \wedge y \in B\,]\,\}$$

沿用同一例子，可以看到$\{a, b\}$的原像是$f^{-1}(\{a, b\}) = \varnothing$，即空集。

以下是$f$及$f^{-1}$的一些特性：

- $f(A_{1} \cup A_{2}) = f(A_{1}) \cup f(A_{2})$。
- $f(A_{1} \cap A_{2}) \subseteq f(A_{1}) \cap f(A_{2})$。
- $f(B_{1} \cup B_{2}) = f^{-1}(B_{1}) \cup f^{-1}(B_{2})$。
- $f^{-1}(B_{1} \cap B_{2}) = f^{-1}(B_{1}) \cap f^{-1}(B_{2})$。
- $f^{-1}(f(B)) \subseteq B$。
- $f^{-1}(f(A)) \supseteq A$。

这些特性适合定义域的任意子集$A, A_{1}$及$A_{2}$和到达域的任意子集$B, B_{1}$及$B_{2}$，甚至可推广到任意子集群的交集和并集。

## 函数的限制及扩张

若$f:X \to Y$且$X^{\prime} \subset X$，那以下定义的集合$f|_{X^{\prime}}$(注意到$\times$代表笛卡儿积)

$$f|_{X^{\prime}}:= \bigg\{\,(x,\,y)\,\bigg|\, <pre> (x \in X^{\prime}) \wedge [\,y=f(x)\,] </pre> \,\bigg\} = f \cap (X^{\prime} \times Y)$$

显然为一函数，称为$f$在$X^{\prime}$的限制。

反之，若$g:X\to Z$、$X\subseteq Y$、$f:Y\to Z$且$f|_X=g$，那$f$称为$g$的扩张。

通常希望扩张后的函数为解析函数，因为代数性质良好。这种扩张称为解析延拓。

## 点态运算

设$f:X \to R$且$g:X \to R$且$(R,\,+,\,\times)$为环。这样可以定义“函数和”$f+g$与“函数积”$f \times g$如下：

$$\begin{align} <pre> f + g := \bigg\{\,(x,\,y)\,\bigg|\, (x \in X) \wedge [\,y=f(x)+g(x)\,] \,\bigg\} \\ </pre> \end{align}$$

$$\begin{align} <pre> f + g := \bigg\{\,(x,\,y)\,\bigg|\, (x \in X) \wedge [\,y=f(x) \times g(x)\,] \,\bigg\} \\ </pre> \end{align}$$

很容易证明以上两者也是函数，类似的对任意的$r \in R$可以定义下面这两个集合

$$\begin{align} <pre> r_R := \bigg\{\,(x,\,y)\,\bigg|\, (x \in X) \wedge (y = r) \,\bigg\} \\ </pre> \end{align}$$

$$\begin{align} <pre> r\cdot f := \bigg\{\,(x,\,y)\,\bigg|\, (x \in X) \wedge [\,y = r \times f(x)\,] \,\bigg\} \\ </pre> \end{align}$$

也是函数，其中$r_R$被称为常数函数。

## 范例

- 首都之于国家（若不把多首都国计算在内)。
- 每个自然数$n$的平方$n^2$是$n$的函数。
- 对数函数。$\ln x$是正实数$x$的函数。注意，虽然可以把对数函数推广到复数情况，但结果就不是函数了，而是多值函数。
- 对每个在$\R^2$平面上的点，其和原点$(0, 0)$的距离是确定的。

常用的数学函数包括多项式函数、根式函数、幂函数、对数函数、有理函数、三角函数、反三角函数等。它们都是初等函数。非初等函数（或特殊函数）包括伽马函数和贝塞尔函数等。

## 分类

函数可分为

- 奇函数或偶函数
- 连续函数或不连续函数
- 实函数或虚函数
- 纯量函数或向量函数
- 单调增函数或单调减函数

## 范畴论观点

在范畴论中，函数的槪念被推广为态射的槪念。

一个范畴包括一组物件与一组态射，每一个态射是个三元组(X, Y, f)，X称为源物件（定义域的类比），Y称为目标物件（到达域的类比），而源物件与目标物件是范畴内的物件。基于这种解释，可以把函数看作集合范畴里面的态射。

## 延伸阅读

- An approachable and diverting historical presentation.

## 外部链接

- NIST数学函数
- mysuc.com，经典函数示例
- Wolfram函数网站，汇集了各数学函数的公式和图像
- Was ist eine Funktion?
- xFunctions一个多功能的Java小程序，可以显示函数的图像，既可以在线使用，也可以下载运行。
- FooPlot
- Curvas