上一章里,我们把输入和输出一列一列排进了表格。表格很像一叠小票:左边记下你做了什么,右边记下结果是什么。可是一张表要满足什么条件,才能叫作函数?这件事不能只凭“看起来有规律”来判断。
想象你站在自动售货机前。按下 A1,机器掉出薯片;按下 B3,机器掉出矿泉水。你敢扫码付款,是因为你相信按钮背后的规则不会临时改主意。同一次使用中,A1 不能一会儿掉薯片、一会儿又掉饼干。同一个输入必须有且只有一个输出,这就是函数最核心的规矩。

不过,函数远不只是一台“数字机器”。它可以藏在课程表、快递柜、计费规则和图像里,也不一定能写成一行漂亮的公式。我们这一章要做的,就是学会从各种外表下面认出同一件事。
数学里的“关系”其实很宽松。只要把一些对象配成对,就有了关系。比如“学生—社团”“城市—当天最高气温”“按钮—商品”,都在说明谁和谁有联系。
如果输入和输出都是数,我们常把一组配对写成有序数对 。例如:
这里 的意思是输入 对应输出 。括号里的顺序不能倒过来,因为 与 讲的是两次不同的配对。
函数是关系中的一种。它给关系加了两项检查:
合在一起,就是常说的“每个输入恰好对应一个输出”。“恰好一个”比“最多一个”更严谨:没有输出不行,有两个输出也不行。
判断函数时,目光始终放在输入这一侧。逐个输入检查:它有没有结果?结果是不是唯一?输出是否重复,是下一层问题,不是函数成立的门槛。
假设三位同学的鞋码分别是 、、。把“同学”当输入、“鞋码”当输出,这仍然是函数:每位同学都有一个确定鞋码。两位同学碰巧得到同一个输出 ,并没有让任何一个输入变得含糊。
所以,多对一允许。画成映射图时,几根箭头可以汇到同一个输出上。

把“同学”对应到“本学期参加的社团”,情况就不同了。如果小林同时参加篮球社和摄影社,那么输入“小林”会给出两个输出。这个关系当然有意义,却不是“社团是同学的函数”。
注意问题的方向。反过来问“某个社团对应它的指导教师”,只要每个社团安排一位确定教师,就可能成为函数。对象没换,只是输入与输出的方向换了,结论就可能改变。
一家早餐店规定:豆浆 4 元,包子 4 元,饭团 7 元。
这类题的捷径不是背“商品对应价格可以,价格对应商品不行”,而是每次先圈定输入,再检查这个输入会不会分叉。
很多人第一次见函数,是从 开始的,于是很自然地把“函数”和“含 的公式”画上等号。这个印象太窄了。
公式只是表达函数的一种办法。函数真正包含的是三件事:允许哪些输入、怎样把输入送到输出、每个输入最后得到什么。规则可以写成公式,也可以写在表格里、画成映射箭头、藏在一段操作说明中,甚至由程序执行。
把一本字典想成一张很大的查询表。输入一个汉字,输出它在检字表中指定的起始页码。我们不需要找出“页码关于汉字的代数式”,仍然可以逐字查到唯一结果。
再比如,输入一位报名学生的学号,输出系统分配给他的考场。分配也许来自数据库和排考程序,不会有一条简单的 公式,但只要每个已报名学号恰好对应一个考场,它就是函数。
函数甚至不要求输入、输出都是数字。输入可以是月份,输出可以是天数;输入可以是文件名,输出可以是文件类型;输入可以是一张订单,输出可以是当前状态。
看这个方程:
它画出来是一个半径为 的圆。把 代进去,会得到:
因此 或 。同一个输入 找到两个不同输出,这个方程描述的是一个关系,却不能把整个圆看成“ 是 的函数”。
反过来, 是函数,因为每个 平方后只有一个结果。这里也能看出:式子看上去复杂还是简单并不重要,关键仍是输入有没有唯一输出。
“能写成方程”不等于“就是函数”,“写不出简单公式”也不等于“不是函数”。公式负责描述规则,函数条件负责检查配对,两件事不要混在一起。
有两家影印店都按“每页 0.2 元”收费。甲店只接 1 到 50 页的小订单,乙店可以接任意正整数页数。两家店的费用都能写成 ,但它们允许的输入不同,因此不能说这是完全相同的函数。
再看一个纯数学例子。规则 若把定义域规定为全体实数,输入可以是负数、0 和正数;若把定义域规定为非负实数,负数就不再归这条函数处理。两个版本使用同一公式,却包含不同的输入—输出配对。
所以,一条完整的函数不能只看等号右边。至少要知道定义域和对应规则;如果题目还明确指定了陪域,也要把它算进函数的说明。公式像做法,定义域像这份做法负责接待的对象,缺一块就可能认错函数。
上一章已经学过怎样读表格,现在我们把判断标准接上去。表格里每一列或每一行都记录一组输入—输出配对。检查时,不必急着找递增、递减或差值,只要先找重复输入。

看下面两张小表。
这张表是函数。输出 重复出现没有问题,因为输入 和输入 各自仍然只有一个结果。
这张表不是函数。输入 既对应 又对应 ,唯一性被破坏了。
如果同一个输入重复记录,但输出也相同,比如 写了两遍,那只是重复抄了一条信息,不会凭空产生第二个输出。把重复项合并以后,配对仍然是 。
映射图通常把输入放在左边,输出放在右边。最稳的检查方法是从左边第一项开始,逐项数箭头:
右侧可以有“没人去”的输出。因为右侧常画的是预先准备的输出集合,其中有些值可能暂时没有被取到。真正不能空着的是左侧定义域中的输入。
关系
是函数。第一坐标 都没有分叉,第二坐标 重复不影响结论。
而关系
不是函数,因为第一坐标 分别配到了 和 。
下面的表记录一家水果店三种水果的单价。
问“单价是不是水果的函数”时,输入是水果。苹果、梨、橙子各有一个单价,所以答案是函数;两个输出都是 8 元,不构成冲突。
问“水果是不是单价的函数”时,输入换成了单价。输入 8 元能找到苹果和橙子两个输出,因此答案不是函数。
如果题目再加一句“今天同一种水果上午和下午价格可能不同”,我们还要检查输入是否说完整了。只用“水果”当输入不够,因为苹果可能对应两个价格;把输入改成“水果与时段组成的配对”,例如“苹果,上午”,输出才重新变得唯一。
这个细节在现实数据里很常见。记录地点的温度时,只写“地点”通常不够,还要写时刻;记录某人的体重时,只写“姓名”也不够,还要写测量日期。函数是否成立,有时不是关系本身混乱,而是我们漏写了决定输出所需的条件。
如果一条规则要反复使用,总写“把输入先乘 2 再加 1”会很累。我们可以给这条规则取名叫 :
是函数的名字, 是暂时放输入的位置, 是输出。 读作“ 在 处的值”或“ 作用在 上的结果”。括号表示把什么送进规则,不表示乘法,所以 绝不是 。

字母可以换。温度关于时间的函数可以叫 ,费用关于路程的函数可以叫 ,库存关于日期的函数可以叫 。名字的作用是提醒我们在谈哪一条规则;括号里的量才是这一次交给规则的输入。
严格说, 与 也不是同一类东西。 指整条规则,好比自动售货机内部完整的按钮设置; 指这条规则接收输入 3 后得到的一个结果,好比按下 3 号按钮掉出的那件商品。把一台机器和它吐出的一件商品混为一谈,后面的符号就很容易读乱。
某仓库每天发出 8 箱饮料,开始时有 100 箱。若 表示经过 天后的库存,那么:
不只是一条算式。它完整地说:经过 6 天,仓库还剩 52 箱。这里 是库存规则的名字,6 的单位是天,52 的单位是箱。
反过来, 问的是“经过多少天库存会降到 20 箱”。解 ,得到 。同一条库存规则里, 是向前查询, 是拿着结果往回找时间。
应用题中的函数记号最好连单位一起读。 可能表示 4 千米收费 18 元,也可能表示 4 小时耗电 18 度;离开输入与输出的含义,数字本身讲不完整故事。
设:
求 ,就是把式子里的每一个 都换成 。负数最好先用括号包住:
把输入写进两个 的位置,得到 。
括号里也可以放一个式子。求 时,要把整个 代替每一个 :
常见错误是只把第一个 换掉,或者把 写成 。函数求值本身并不神秘,出错往往只是因为替换得不完整、括号没守住。
这两类问题长得很像,方向却正好相反。
仍取:
求 ,已知输入是 ,只需向前计算:
而“求哪些 使 ”给的是输出,要沿着规则往回找输入:
把要求的输出写到等号右边,得到 。
移项得到 ,再因式分解为 。
一个合法函数在给定输入后只能算出一个输出;但给定一个输出,反查输入时可能找到零个、一个或多个答案。原因正是函数允许多对一。
与 不是同一道题。 是把 8 当输入; 是寻找哪些输入会产生输出 8。先看 8 写在括号里还是等号右边,方向就不会弄反。
把函数想成快递分拣台会比较清楚。左边是一批允许进站的包裹,中间按规则分拣,右边是可能去往的区域。三个集合看起来都像“一堆对象”,职责却不同。

定义域是函数允许使用的全部输入。它不是“题目碰巧拿来算的几个数”,而是这条函数规则真正负责的范围。
例如定义域为 ,就表示其他数暂时不属于这条函数。哪怕公式看上去还能计算 ,在这次定义里也不能擅自把 10 塞进去。
陪域可以理解成输出的“目标容器”或类型声明。函数承诺每个结果都会落在这个集合中,但不承诺容器里的每个元素都会真的出现。
例如把函数写成“从整数到整数的平方函数”,整数集合既说明输入类型,也说明输出被放在整数这个大容器里。负整数属于这个输出容器,可是平方以后不会真的得到负数。
值域是定义域中的所有输入经过规则后,真正出现的输出集合。它一定包含在陪域中,却可能比陪域小。
设定义域是:
规则是 ,并把陪域规定为 。逐个计算后,实际出现的只有 ,所以值域是:
陪域里的 没有被任何输入取到,它们仍在容器里,却不属于值域。
初学题有时不单独给陪域,只问“可能的输出”或“函数值能取哪些值”。这通常是在问值域,也就是实际能产生的输出。读题时抓住“实际能否取到”这几个字,会比死记术语更稳。
从表格读定义域,只收集输入行里的不同值;读值域,只收集输出行里的不同值。重复出现的输出在集合里只写一次。例如:
定义域是 ,值域是 ,不是 。集合只关心有哪些元素,不按出现次数重复记账。
从映射图读取时,左侧所有输入组成定义域;右侧真正接到箭头的输出组成值域。右侧画出来却没有箭头到达的元素,可能属于陪域,但不属于值域。
从图像读取时,可以把图像向两条坐标轴投影。图像在水平方向覆盖了哪些 ,这些 组成定义域;在竖直方向到达了哪些 ,这些 组成值域。读定义域像从左往右看图有多宽,读值域像从下往上看图有多高。
端点仍然要分清。实心点表示端点能取到,区间用方括号;空心点表示端点不取,区间用圆括号。图像末端若带箭头,说明还会沿那个方向继续,不能把画面边框误当成函数真正的终点。
设 ,但定义域只规定为 。逐个代入得到输出 ,因此值域是:
若把定义域改成全体实数,同一个公式的值域也会改成全体实数。这个例子再次说明,值域不是只盯着公式猜出来的,它由规则和定义域共同决定。
当题目只给一个代数式、没有另行说明时,通常默认在实数范围内寻找所有让式子有意义的输入。最常见的卡点有两个:分母不能为 0,偶次根号里的数不能为负。
设:
分母 在 时等于 0,所以必须排除 2。定义域可以写成:
也可以用区间写成:
这里排除 2,不是因为算起来麻烦,而是除以 0 在实数运算中没有定义。
设:
要让平方根在实数范围内有意义,根号里的量必须满足:
解得 ,所以定义域是:
方括号表示端点 可以取到,因为此时根号内为 0,而 有意义。
看这个函数:
根号要求 ,也就是 ;分母又要求 。两个条件必须同时满足,所以定义域是:
可以取,因为根号内等于 0 且分母不为 0;3 必须挖掉,因为它会让分母为 0。遇到多个限制时,不是随便挑一个条件,而是把所有条件叠在一起找交集。
如果根号出现在分母里,要求还会更严格。例如 不但要让 ,还要防止整个分母等于 0,所以实际需要 ,即 。
像 这样的多项式,对每个实数输入都能完成加、减、乘和整数次幂运算,所以定义域是全体实数。
这里说“通常”,是因为现实题还会带来额外限制。代数式能算,不代表现实输入就合理。
假设影印店的费用规则是每页 0.2 元,写成 。纯代数上,把 或 代进去都能算出一个数;可“打印页数”不能是负数,也不能是 2.6 页。因此现实定义域应是非负整数:
再比如,一个最多坐 40 人的小教室,输入“到场人数”时,定义域还要受容量限制:
现实定义域常从这几处收紧:
判断顺序可以这样安排:先保证式子在数学上能算,再问这个输入在故事里能不能发生。两道门都通过,才属于现实模型的定义域。
“班级人数”只能一个一个数,是离散输入;“水箱注水时间”在 2 分钟和 3 分钟之间还可以取 2.4 分钟,是连续输入。两者都能成为函数,不要因为图像是一串分开的点,就误以为它“不完整”。
从实际数据画出的图,是否需要把相邻点连起来,取决于中间输入有没有意义。人数、书本数这类离散量通常不连;时间、距离这类连续量在模型允许时才可能连。
把函数画到坐标平面时,横轴通常放输入 ,纵轴放输出 。图上的每个点 都记录一次配对。

现在想象一条竖直的扫描线在图上从左向右移动。扫描线停在某个位置,就等于固定了一个输入 。它碰到图像几次,就表示这个输入找到了几个输出。

如果能找到哪怕一条竖线,与图像相交两次或更多次,那么同一个 对应了多个 ,这幅图就不能表示 是 的函数。
如果每一条竖线与图像最多相交一次,图像就通过竖线检验。这里说“最多一次”,是因为某些 不在定义域中,竖线一次也碰不到完全正常。
圆不能表示 是 的函数,因为穿过圆内部的大多数竖线都会碰到上、下两个点。竖直线段也不行,因为这段线上的同一个 对应许多 。普通斜线、抛物线 和波浪形但不回折的曲线通常都能通过。
分段图像在边界处常用实心点和空心点。实心点属于图像,空心点只是提示“这一段在这里结束,但这个点不取”。
假设在 处,一段曲线以空心点 结束,另一段以实心点 开始。竖线虽然看见两个圆圈位置,却只与图像中的实心点相交,所以 的唯一输出是 1,仍然可以是函数。
如果 和 都是实心点,同一个输入就真的有两个输出,不能通过检验。如果两个都是空心点,那么 没有输出;只要 2 本来就不在定义域中,这也不构成冲突。
它检验的是“纵坐标 是否为横坐标 的函数”。如果题目把输入画在纵轴、输出画在横轴,就不能机械地照搬竖线。先确认哪条轴表示输入,再沿着固定输入的方向去扫描。
函数不要求输出一定变化。自动售货机里,A1、B2、C3 三个按钮都装了同一种矿泉水,照样可以形成函数;输入不同,输出可以一直相同。
常量函数可以写成:
无论输入是 、0 还是 8,输出都是 5。若定义域是全体实数,它的值域只有一个元素:
图像是一条水平直线 。任意竖线只会碰到一次,所以它当然是函数。不要把“输出总不变”误判成“没有关系”;固定结果也是一种明确规则。
现实中的收费经常分段。某出租车的计费规则是:行程不超过 3 千米时收 12 元;超过 3 千米后,超出的部分每千米加 2.5 元。设路程为 千米,费用为 元,可以写成:
这不是两个互相打架的函数,而是一条函数在不同输入区间采用不同规则。输入 落在第一段,所以 ;输入 落在第二段:
分段函数是否合格,重点检查交界处。这里 只归第一段,第二段要求 ,没有重叠。即使两段公式在边界算出不同数,只要边界只归其中一段,输出仍然唯一。
如果两段都把 收进去,却给出不同费用,那就不是定义清楚的函数。写分段条件时,小于号和小于等于号不是装饰,它们决定边界到底归谁。
函数的定义从来没有要求输入必须能加减乘除。只要一批输入对象都能找到唯一结果,就可以谈函数。

不考虑闰年时,把月份名称输入“本月天数”这条规则:一月得到 31,二月得到 28,三月又得到 31。不同月份得到相同天数没有问题。
也可以把输入写进函数记号。若 表示“月份的天数”,就可以写:
这里括号里的“二月”不是变量相乘,也不是待计算的数字,只是一个合法输入。函数记号表达的是查询动作:把二月交给规则 ,得到 28 天。
非数字例子还有很多:固定课表中的教学班编号对应上课教室,地铁站代码对应站名,账号对应当前权限等级。判断方法一点没变,仍然是逐个输入检查有没有唯一输出。这里特意说“教学班编号”,是因为只写课程名称可能不够:同名课程若分成几个班,就可能在不同教室上课。输入说得含糊,输出自然也会含糊。
遇到一个陌生关系时,可以按固定顺序做一次“配对体检”。第一步把输入说完整,尤其留意时间、地点、单位和对象编号;第二步列出允许输入,排除代数上不能算或现实中不可能发生的值;第三步逐个检查输入是否恰好得到一个输出;最后才去计算函数值、读图或找公式。
比如“手机电量对应使用时间”这句话本身还不够清楚。同样的 60% 电量,可能出现在上午 9 点,也可能出现在下午 4 点,所以把电量当输入、时间当输出时很可能一对多。反过来,在一段连续监测且每个时刻只记录一个电量读数的前提下,把时刻当输入、电量当输出,就能成为函数。函数判断不是看两个量有没有联系,而是看选定方向后,输出是否由输入唯一确定。
还有一种情况是数据本身带着随机波动。例如问“掷一次骰子的点数是不是投掷次数的函数”,如果每次投掷已经发生并被记录,那么第 1 次、第 2 次各有一个确定结果,这份记录可以看成函数;如果讨论的是未来尚未发生的随机试验,就不能预先给每次输入指定唯一点数。先说明对象是“已记录的数据”还是“尚未确定的过程”,结论才不会飘。
错。函数允许不同输入得到同一个输出。 中,,它仍是函数。
不一定。要继续看输出。如果两次都写成 ,只是重复记录;如果是 和 ,才发生冲突。
错。离散点、跳跃图像和分段图像都可能是函数。函数条件只问唯一输出,不要求图像一笔画完。
错。定义域由规则和情境共同决定。分母为 0、偶次根号内为负会被代数规则排除;人数必须是整数、时间不能为负会被现实情境排除。
错。 是规则的名字,括号标明输入。只有题目明确把 当成一个数时, 才可能表示乘法;在函数记号里不要这样读。
错。函数保证的是“输入向前走”时结果唯一,不保证倒着找也唯一。 能找到 和 ,这正是多对一在反查时留下的两个入口。
判断下面各关系是否为函数,并说明输入与输出。
函数 由下表给出。
求 ,并求所有满足 的输入 。
设:
求 与 。
在实数范围内,分别求下面两个函数的定义域。
某自助寄存柜前 2 小时收费 5 元,超过 2 小时后,每多 1 小时加 3 元。设使用时间为 小时,且 。
某电影院用座位编号查询所在排数。座位编号从 A01 到 A12 在第 1 排,从 B01 到 B12 在第 2 排,从 C01 到 C12 在第 3 排。把座位编号作为输入,排数作为输出。
这一章可以压成一条检查路线:先认清输入,再确认每个输入恰好有一个输出;接着看定义域允许什么、值域实际出现什么;最后用函数记号完成向前求值或从输出反查输入。
表格、映射图、公式和图像只是不同外衣。表格让配对容易核对,映射图让箭头是否分叉一眼可见,公式让规则便于计算,图像把大量配对压缩成整体形状。它们表达的仍是同一条输入—输出关系。
下一章会把这些表示法摆在一起,练习怎样从表格走到图像、从生活规则写出解析式,再从一种表示读出另一种表示没有明说的信息。到那时,函数不再只是一句定义,而会变成一套可以来回翻译的语言。
先算平方与乘法,,。
合并得到 。
因此输入可能是 ,也可能是 。代回去检查,两者的输出确实都是 。
对于 ,根号内要满足 ,解得 ,所以定义域为:
因此 。因为 ,使用第二段规则:
只属于第一段;第二段的条件是严格大于 2,所以边界没有重叠,也不会出现两个输出。