跳转到内容
← 返回概念
基础概念21 分钟阅读

函数

Function

关键人物

eulerleibnizcauchydirichlet
函数映射定义域值域基础概念

别被"公式"骗了

提到函数,多数人脑子里冒出来的是一道算式,比如 y=x2y = x^2,或者一条用笔就能画出来的光滑曲线。这是关于函数最顽固的误解。函数的本质不是"算式",而是"对应规则"——给定一个输入,确定唯一一个输出,如此而已。算式只是描述对应规则的一种方便手段,远不是全部。这个区别不是咬文嚼字。数学史上花了大约两个半世纪,才把函数从"公式"里解放出来。解放之后,才出现了处处不连续却仍是函数的怪物(狄利克雷,1829),以及处处连续却处处不可微的"锯齿曲线"(魏尔斯特拉斯,1872)——它们都没有寻常意义上的公式或光滑图像,却都是地道的函数。

还要提醒一句:数学里的函数和编程里的 function 同名,却不是一回事。数学函数没有时间、没有副作用,同样的输入永远给同样的输出;而程序里的"函数"可能读取系统时钟、修改全局变量,同一输入未必返回同一结果(详见文末跨域连接)。

什么是函数

函数(Function)是数学中最核心的概念之一——它描述的是两个集合之间的一种特殊对应关系:每一个输入,恰好对应一个输出。

用日常语言说:函数就像一台机器,你放进去一个东西(输入),它吐出来一个东西(输出),而且同样的输入永远给出同样的输出。

正式定义:设 $A$$B$ 是两个集合。从 $A$$B$函数 $f$,是一种规则,使得 $A$ 中每一个元素 $x$,都恰好对应 $B$ 中一个元素 $f(x)$

  • $A$ 称为函数的定义域(domain)
  • $B$ 称为函数的陪域(codomain)
  • 所有 $f(x)$ 构成的集合称为值域(range),是陪域的子集

记号:f:ABf: A \to B,读作"$f$ 是从 $A$$B$ 的函数"。$f(x) = y$ 表示元素 $x$ 被映射到元素 $y$

关键约束:函数要求每个输入恰好对应一个输出——不能是零个(每个 $x$ 都必须有对应),也不能是多个(同一个 $x$ 不能对应两个不同的 $y$)。

一个直觉:函数无处不在

函数的概念在现实中无处不在,尽管我们不总是用这个词:

  • 温度计:时刻 $t$(输入)→ 温度数值(输出)。这是时间的函数。
  • 身份证号:人(输入)→ 身份证号码(输出)。每人恰好一个号码,这是单射函数。
  • 出生月份:人(输入)→ 1月到12月中的某一个月(输出)。多个人可以对应同一个月,这是函数,但不是单射。
  • 年龄:时刻 $t$(输入)→ 某人的年龄(输出)。年龄随时间增长,是时间的函数(虽然是阶梯函数)。

历史:函数概念如何诞生

函数的概念并非一开始就如此清晰,它经历了一个漫长的演化过程。

最早的"函数"是具体的公式。17世纪,笛卡尔(René Descartes)研究曲线时,用代数方程 y=x2y = x^2 等式描述变量之间的关系,这是函数的早期形态。莱布尼茨(Leibniz)在1673年的手稿《反切线方法,或论函数》(Methodus tangentium inversa, seu de functionibus)中首次使用了"函数"(functio)这个词,最初指曲线上与切线相关的几何量;这一术语在1690年代进入公开发表的论文,逐渐固定下来。

欧拉(Leonhard Euler)是将函数概念系统化的关键人物。他在1748年的《无穷小分析引论》中,把函数定义为"由变量和常数通过数学运算组合而成的解析表达式"——本质上就是"公式"。欧拉还引入了 $f(x)$ 这个记号,沿用至今。

有意思的是,欧拉本人很快就嫌"公式"这个框子太窄。在1755年的《微分学原理》(Institutiones calculi differentialis)里,他把函数重新定义为:若某些量依赖于另一些量,当后者变化时前者随之改变,便称前者是后者的函数。这个说法已经非常接近今天"两个集合间的映射"的现代观念,不再要求写得出算式。

逼着欧拉改口的,是一场著名的争论——弦振动问题。1747年达朗贝尔(Jean d'Alembert)写下描述琴弦振动的波动方程,给出形如 $f(x+t) + f(x-t)$ 的通解。可琴弦最初被拨成的形状 $f$ 究竟能长什么样,三位大家各执一词:达朗贝尔坚持 $f$ 必须由单一解析式给出、处处光滑;欧拉认为只要是"随手画出"的曲线(不同段可以用不同公式拼接)也算;丹尼尔·伯努利(Daniel Bernoulli)则在1753年主张,任何振动都能写成正弦谐波的无穷叠加。三种"函数观"针锋相对,谁也说服不了谁。这场延续数十年的争论,把"什么才算一个函数""什么才算连续"这些根本问题推到了台前,直接催生了函数概念的扩张。

接力的是傅里叶(Joseph Fourier)。他在1822年的《热的解析理论》(Théorie analytique de la chaleur)中大胆断言:相当任意的函数都能展开成三角级数。这一论断,连同它逼出的"到底哪些函数能这样展开"的疑问,正是狄利克雷工作的出发点。

狄利克雷(Peter Lejeune Dirichlet,1805—1859)在1837年给出了现代意义上的函数定义——不要求函数必须有公式,只要求有对应规则。他构造了一个例子:

f(x)={1若 x 是有理数0若 x 是无理数f(x) = \begin{cases} 1 & \text{若 } x \text{ 是有理数} \\ 0 & \text{若 } x \text{ 是无理数} \end{cases}

这个函数没有公式,处处不连续,在直觉上几乎无法"画出来",但它完全满足函数的定义。狄利克雷的例子说明:函数比"公式"更广泛,它是一种对应规则,不依赖于代数表达式的存在。

康托尔(Georg Cantor)在19世纪末创立集合论,为函数提供了最终的逻辑地基。在此基础上,函数被精确地定义为一种特殊的二元关系——一个满足"每个输入恰好配一个输出"的有序对集合。有序对本身的纯集合论构造,由维纳(Norbert Wiener,1914)和豪斯多夫(Felix Hausdorff,1914)先后给出,库拉托夫斯基(Kazimierz Kuratowski,1921)的版本 (a,b)={{a},{a,b}}(a,b) = \{\{a\}, \{a,b\}\} 最为简洁,沿用至今。这套"函数即有序对集合"的定义,正是现代教科书通行的严格表述。

函数的分类

按对应方式

  • 单射(Injective / one-to-one):不同的输入给出不同的输出。即 f(x1)=f(x2)x1=x2f(x_1) = f(x_2) \Rightarrow x_1 = x_2。例:$f(x) = 2x$
  • 满射(Surjective / onto):每个输出都有至少一个输入对应。即对每个 yBy \in B,存在 xAx \in A 使 $f(x) = y$
  • 双射(Bijective):既是单射又是满射。双射建立了两个集合之间的"完美配对"——这正是比较集合"大小"(基数)的关键。

按连续性与可微性

  • 连续函数:输入的微小变化导致输出的微小变化(直觉上"可以连续画出来")。
  • 处处连续但处处不可微的函数:魏尔斯特拉斯在1872年的构造,打破了"连续必然可微"的直觉。
  • 可微函数:在某点有切线,导数存在。
  • 解析函数:可以用幂级数表示,在复分析中尤为重要。

常见的初等函数

函数类型表达式示例特征
线性函数$f(x) = ax + b$图像是直线,变化率恒定
二次函数f(x)=ax2+bx+cf(x) = ax^2 + bx + c图像是抛物线
指数函数f(x)=axf(x) = a^x增长率与当前值成比例
对数函数f(x)=logaxf(x) = \log_a x指数函数的反函数
三角函数sinx,cosx,tanx\sin x, \cos x, \tan x描述周期性振动
绝对值函数$f(x) =x$在原点处不可微
取整函数f(x)=xf(x) = \lfloor x \rfloor阶梯状,处处不连续

复合函数与反函数

复合函数(Composition):给定 f:ABf: A \to Bg:BCg: B \to C,复合函数 gf:ACg \circ f: A \to C 定义为 (gf)(x)=g(f(x))(g \circ f)(x) = g(f(x))

直觉:先通过 $f$ 的机器,输出再送入 $g$ 的机器。例如,若 f(x)=x2f(x) = x^2$g(x) = x + 1$,则 (gf)(x)=x2+1(g \circ f)(x) = x^2 + 1(fg)(x)=(x+1)2(f \circ g)(x) = (x+1)^2。注意:gffgg \circ f \neq f \circ g,复合函数的顺序至关重要。

反函数(Inverse function):若 f:ABf: A \to B 是双射,则存在唯一的函数 f1:BAf^{-1}: B \to A,使得 f1(f(x))=xf^{-1}(f(x)) = x 对所有 xAx \in A 成立。反函数"撤销"了原函数的操作。

反函数的图像是原函数图像关于直线 $y = x$ 的对称图像。

函数与图像

可视化是理解函数的最直接方式。函数 f:RRf: \mathbb{R} \to \mathbb{R}图像是平面上的点集:

{(x,f(x))xR}\{(x, f(x)) \mid x \in \mathbb{R}\}

竖线检验(Vertical Line Test):平面上的一条曲线是某个函数的图像,当且仅当每一条竖线最多与曲线交于一点。这个检验直接反映了函数"每个输入恰好对应一个输出"的定义。

为什么函数如此重要

函数是现代数学的基础语言,原因有三:

1. 描述变化与关系。现实中,几乎所有的科学规律都是函数:力与加速度的关系(牛顿第二定律 $F = ma$)、电流与电压的关系(欧姆定律 $V = IR$)、放射性衰变(N(t)=N0eλtN(t) = N_0 e^{-\lambda t})。函数是我们描述世界的语言。

2. 研究变化的速率——导数。函数使得"变化率"的概念有了精确含义:f(x)=limh0f(x+h)f(x)hf'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}。微积分的一切——导数、积分、微分方程——都建立在函数概念之上。

3. 抽象化与统一化。在现代数学中,"态射"(morphism)是函数概念在各种代数结构之间的推广:群同态、环同态、连续映射、线性映射……函数的语言将不同的数学领域统一在同一个框架下。范畴论(Category Theory)将函数(态射)作为核心概念,把整个数学建立在"对象"与"对象之间的映射"上。

几乎所有函数都"写不出来"

把函数从"公式"里解放出来,会带来一个令人不安的后果:绝大多数函数,永远无法被书写、描述或计算。用"数数"就能看清这一点。从实数到实数的函数总共有 2202^{2^{\aleph_0}} 个。这里 0\aleph_0 是自然数的个数,202^{\aleph_0} 是实数的个数,而 2202^{2^{\aleph_0}} 是一个比实数还要"多得多"的无穷。可在这片汪洋里,我们叫得出名字的函数少得可怜:

  • 连续函数只有 202^{\aleph_0} 个,和实数一样多。原因很巧妙:一个连续函数被它在所有有理数点上的取值完全决定,而有理数只有可数个,所以连续函数"凑不出"更多。
  • 可计算函数(存在算法、能让计算机算出来的)只有可数无穷个——因为程序、图灵机本身就只有可数个。
  • 可定义函数(能用一段有限长的数学语言描述出来的)同样只有可数个。

把这些"性质良好"的函数从 2202^{2^{\aleph_0}} 里挖掉,剩下的才是绝大多数:它们既没有公式,也没有算法,甚至没有任何有限的描述。我们能逐一谈论的函数,不过是汪洋中的几滴水。

这件事在数学基础里引出真正的争议。那些"无法描述、却被断言存在"的函数,往往要靠选择公理(Axiom of Choice,简称 AC)才能"造"出来——例如不可测函数。选择公理允许你"同时从无穷多个非空集合里各取一个元素",却不告诉你具体怎么取。承认它,你得到一套强大而完整的分析;拒绝它(如构造主义、可计算数学的立场),你的世界里就只剩下能被实际构造出来的函数。一个函数到底"算不算存在",在这里成了立场问题,而不再是单纯的事实问题。

典型例题

例1f(x)=x2f(x) = x^2 的定义域是 R\mathbb{R},值域是 [0,+)[0, +\infty)。它不是单射($f(2) = f(-2) = 4$),也不是从 R\mathbb{R}R\mathbb{R} 的满射($-1$ 没有原像)。但若将定义域限制为 [0,+)[0, +\infty),值域也限制为 [0,+)[0, +\infty),则 $f$ 变成双射,反函数是 f1(x)=xf^{-1}(x) = \sqrt{x}

例2:设 f(x)=1x2f(x) = \frac{1}{x-2},定义域是 {xR:x2}\{x \in \mathbb{R} : x \neq 2\}——因为 $x=2$ 时分母为零,函数无意义。值域是 {yR:y0}\{y \in \mathbb{R} : y \neq 0\}

例3(关于复合顺序的常见错误):若 f(x)=xf(x) = \sqrt{x}(定义域 x0x \geq 0),$g(x) = -x$,则 gfg \circ fx0x \geq 0 有意义,但 fgf \circ g 要求 x0-x \geq 0,即 x0x \leq 0。复合函数的定义域取决于内层函数的定义域与外层函数有意义的范围。

常见误区

  • "函数必须有公式":否。狄利克雷函数表明函数可以没有闭合表达式。数学中的函数是对应规则,不是公式。
  • "函数图像一定是曲线":否。取整函数的图像是一系列断开的点(在整数处)和线段(在整数之间),不是连续曲线。
  • "f1(x)=1/f(x)f^{-1}(x) = 1/f(x)":这是常见的符号混淆。f1f^{-1} 表示反函数,$1/f(x)$ 表示函数值的倒数。例如,(sin)1(x)=arcsinx(\sin)^{-1}(x) = \arcsin x(反正弦函数),而不是 1/sinx=cscx1/\sin x = \csc x

跨域连接

  • 药理学:剂量—反应曲线把"给多少"映到"起多大作用",单调且有饱和上限。单值性在这里是一个实质假设:同一剂量对同一个体在不同时间给出不同反应(耐受、昼夜差异),此时必须把时间也放进定义域,否则模型自相矛盾——把这条写明比事后解释异常更省事。
  • 供给与需求:需求曲线是价格到需求量的映射,但它只在"其他条件不变"时才是函数。推论是把观测到的价—量散点直接拟合成需求曲线必然出错——供给也在移动,识别问题因此是定义域设定问题而非统计精度问题,工具变量之所以必要,根源正在这里。
  • 集合论:把函数定义成满足单值条件的有序对集合,剥掉了"有公式"和"可计算"这两层附加要求。代价是绝大多数函数既写不出也算不出——可计算与可定义的函数都只有可数个,我们能逐一谈论的只是汪洋中的几滴水。
  • 语义学:形式语义把句子的意义处理成从可能世界到真值的映射,组合性要求整体意义由部分意义与结构决定。这条假设有可检验的边界:习语与依赖语境的指示词无法由部分意义算出,必须另加参数,这也是词典之外还需要语用规则的原因。
  • 神经网络:万能近似定理说单隐层网络能逼近任意连续函数,但它只给存在性,既不给所需宽度,也不给如何找到参数。把它读成"神经网络无所不能"是错的——可表示与可学习是两件事,宽度需求还可能随精度指数增长。

延伸阅读

  1. Michael Spivak, Calculus, 4th ed., Publish or Perish, 2008(函数与极限的严格处理,适合有一定基础的读者)。
  2. Richard Courant & Fritz John, Introduction to Calculus and Analysis, Springer, 1989(经典教材,对函数概念有深刻阐述)。
  3. 斯图尔特·沙皮罗(Stewart Shapiro),《数学哲学》(Philosophy of Mathematics),商务印书馆中译本(讨论函数概念的哲学基础)。
  4. Dirichlet, P. G. L., "Sur la convergence des séries trigonométriques", Journal für die reine und angewandte Mathematik 4 (1829)(狄利克雷函数的原始来源)。

参考文献

  1. A. P. Youschkevitch, "The Concept of Function up to the Middle of the 19th Century", Archive for History of Exact Sciences 16 (1976), pp. 37–85(函数概念演变的权威史学综述)。
  2. Israel Kleiner, "Evolution of the Function Concept: A Brief Survey", The College Mathematics Journal 20, no. 4 (1989), pp. 282–300(曾获 1990 年 Pólya 奖的概念史综述)。
  3. Leonhard Euler, Institutiones calculi differentialis, St. Petersburg Academy, 1755(函数作为"依赖关系"的广义定义见绪论)。
  4. P. G. L. Dirichlet, "Sur la convergence des séries trigonométriques qui servent à représenter une fonction arbitraire entre des limites données", Journal für die reine und angewandte Mathematik (Crelle) 4 (1829), pp. 157–169(狄利克雷函数的原始出处)。
  5. Joseph Fourier, Théorie analytique de la chaleur, Firmin Didot, Paris, 1822(任意函数的三角级数展开)。
  6. Alonzo Church, "An Unsolvable Problem of Elementary Number Theory", American Journal of Mathematics 58, no. 2 (1936), pp. 345–363(λ 演算的奠基论文)。