实分析习题解答:从公理化数系到完备性与一致收敛
简介这份习题解答面向正在系统学习《陶哲轩实分析》的读者适合希望从头到尾逐题演算、梳理推导细节并查漏补缺的自学者与在校学生。内容围绕教材章节展开覆盖自然数与Peano公理、集合论、整数与比例数、实数的构造、序列极限、级数、无限集合等核心主题答案力求简单自然、思路清晰便于对照原书习题理解证明脉络也可作为复习时快速回看的参考。资源包共1个PDF文件大小约624KB单文件结构便于在电脑或移动设备上随时阅读与检索。已有722人学习说明其在同类习题解答中具备一定参考价值。对于不满足于只看结论、希望把每一步推导弄清楚的读者这份解答能帮助定位疑问点、比较不同解法并逐步建立分析学的证明习惯。1. 实分析到底在讲什么从「112 也得证明」说起很多人翻开一本严格的实分析教材都会在目录第一页愣住开头不是极限也不是积分而是「什么是自然数」。讲实分析的书为什么要从 112 重新讲起于是大量的人半路去找配套的习题解答想先看看别人是怎么把「显然」一步步写成证明的再决定自己要不要继续往下读。实分析这门学科的核心恰恰就是不肯放过任何一个「显然」微积分课上那句「n 足够大时这个量趋于零」到这里必须翻译成一个带 ε 的不等式再用定义和公理一格一格推过去。一份好的习题解答价值不在于给出答案而在于示范这种翻译的完整过程。2. 为什么要把数系重造一遍公理化到底在防什么初学者最常见的反应是这些东西我小学就会了为什么还要证一遍这个疑问很自然但它问错了方向。公理化要解决的是「我凭什么相信它一定成立」。在中学阶段数的性质是按「直觉加例题」的方式给你的加法交换律是常识乘法分配律是常识负负得正是常识。常识的问题在于它没法告诉你一条性质成立需要什么条件也没法告诉你到了无穷的场合还能不能靠。实分析要做的事就是把所有常识暂时放进抽屉只留下几条约定然后看能从这几条约定里推出多少东西。2.1 五条约定如何撑起整个自然数系整个自然数系只靠五条约定建立起来。它们通常被称为 Peano 公理用大白话讲是这样的第一条0 是自然数。 第二条每个自然数 n 都有一个后继记作 n并且后继也是自然数。 第三条对任何自然数 nn 都不等于 0。 第四条如果 n m那么 n m。 第五条如果某个性质对 0 成立并且只要它对 n 成立就必然对 n 成立那么它对所有自然数都成立。这五句话看起来很朴素但每一条都在阻止一种灾难。少了第三条数系就可能绕圈像钟表一样从 12 点回到 1 点那样「加下去」就不再产生新数加法会立刻失去意义。少了第四条数轴就会分叉两个不同的数可以有同一个后继消去律不成立减法也没法定义。第五条最容易被人轻视。它的作用是排除「多出来的数」。举个例子如果只保留前四条把「后继」理解成「加 1」那么实数系同样满足前四条0 是实数每个实数加 1 还是实数没有实数的后继是 0并且 x1 y1 能推出 x y。可是归纳法在实数上显然不成立你没法用「0 成立、递推成立」去证明「所有实数都成立」。第五条就是那把筛子把不属于自然数的东西挡在外面保证自然数刚好是 0、0、(0)……一直数下去不多不少。打个比方这五条约定就像给一副牌规定合法出牌规则。规则不解释牌为什么存在只规定什么动作被允许。后面所有关于自然数的结论都必须是这些允许动作的组合一步都不能跳。2.2 加法、乘法与被重新定义的顺序有了五个自然数接下来要定义加法。加法的定义只有两行a 0 a a (b) (a b)第一行说明「加零等于自己」。第二行说明「加一个后继等于先加原来的数再取后继」。这是一个递归定义右边的式子里加号右边的数变小了所以最终会落到 0 上停下来。你可能会觉得这太绕了可正是这种「一步一步退到零」的写法让加法变成了可以被归纳法处理的对象。接下来是证明结合律(ab)c a(bc)。做法是对 c 归纳。c 0 时左边是 (ab)0 ab右边是 a(b0) ab成立。 假设对 c 成立那么 c 的情形左边 (ab)(c) ((ab)c)这一步用定义接着用归纳假设把它变成 (a(bc))再用一次定义它等于 a(bc)也就是 a(bc)。通篇只有三个动作用定义、用假设、取后继。这就是「严格」在实分析里的真实含义它不是故意把话说长而是每一步都能指出依据。乘法的定义同样是两行a × 0 0a × (b) a × b a。交换律、结合律、分配律全都要从这两行加上归纳法推出来。比如 (ab)² a² 2ab b² 这个中学公式在这套体系里也是一条需要证明的命题证明过程就是把分配律按顺序用过去。2.3 为什么要忍受这种「啰嗦」看到这里很多人会有一个反弹这么做到底有什么用平时算数又不靠它。用处在于分层。日常计算用的是直觉层做题考试用的是技巧层而实分析建立的是地基这一层。地基层的任务不是让你算得更快而是让你在遇到反常情况时知道哪里出了错。玄学一点的感受是当你亲手把交换律证过一遍之后再看任何一个数学结论都会习惯性地问一句「这个结论用了哪条性质」。这种习惯在后续章节会反复得到回报。比如序列极限的加法法则本质上是把绝对值的三角不等式和「足够大」这个说法拼起来一旦你知道每一步用的是什么就不容易在「两个极限相加」的时候想当然地跳步。还有一个现实的收益这一章是整本书的工具箱。归纳法、递归定义、良序原理后面讲序列、级数、可数性、甚至 Lebesgue 测度的时候都在用。这一章偷懒后面每章都会以加倍的代价还回来。血泪经验就是很多人卡在第十几章翻不动回头一看卡的是第二章。3. 实数是怎么「造」出来的有理数里那道填不满的缝自然数造完接着造整数再造成比例数有理数逻辑上是把「减法做不通」和「除法做不通」这两个缺口依次补上。每一步都遵循同一个套路先造出对象再定义运算再证明运算的性质最后确认旧的数系能被嵌进新的数系里而且不产生矛盾。到有理数这一步直觉上已经够用了任意两个有理数之间还有有理数数轴看上去密密麻麻没有空隙。可偏偏就是在这里出现了一道填不上的缝。3.1 有理数看起来密密麻麻其实全是洞用反证法可以证明不存在有理数 q 使 q² 2。假设 q m/n其中 m、n 是整数且已经约到最简那么 m² 2n²。右边是偶数所以 m² 是偶数于是 m 是偶数设 m 2k。代回去得到 4k² 2n²即 n² 2k²同理 n 也是偶数。这与「已经约到最简」矛盾。这个证明中学就见过但实分析关心的不是结论而是后果数轴上存在一个位置有理数可以无限逼近它却永远占据不了它。1、1.4、1.41、1.414、1.4142……这个序列的项全是有理数它们彼此之间越来越挤看起来「应该」收敛到某个东西可那个东西不在有理数里。这就是麻烦的根源。分析学里最重要的几个工具中值定理、最大值定理、单调有界定理全靠「极限一定存在」这句话撑着。如果数系本身有洞那么定理就会在最关键的地方失效你可以构造一个在有理数范围内「本该有零点却没有」的连续函数。3.2 用 Cauchy 序列把洞补上补洞的办法很巧妙既然不知道极限具体是什么那就换一个角度只看序列自己。定义是这样一个序列是 Cauchy 序列如果对任意 ε 0都存在一个 N使得当 m、n 都大于等于 N 时|a_m − a_n| ε。注意这个定义里没有出现「极限」两个字。它只描述一件事后面的项互相之间越来越靠近。这样就不需要预先知道终点在哪里。接下来的构造思路更妙把所有「应该收敛到同一个点」的 Cauchy 序列归成一类每一个等价类就定义成一个实数。那个不存在的 √2就这样被定义为「所有平方趋近于 2 的有理数 Cauchy 序列组成的集合」。下面这段代码不是严格证明只是帮你建立手感给定一个有限长的数值序列看它在给定容差下从第几项开始满足 Cauchy 条件。def first_cauchy_index(seq, eps): 在有限序列上近似检验 Cauchy 条件。 seq: 数值列表代表一个有限前缀 eps: 容差越小要求越严格 返回最小的 N使得从 N 开始任意两项之差都小于 eps 若不存在返回 None n len(seq) for N in range(n): ok True for i in range(N, n): for j in range(N, n): if abs(seq[i] - seq[j]) eps: ok False break if not ok: break if ok: return N return None # 用有理数逼近根号 2 approx [round(2 ** 0.5, k) for k in range(1, 8)] print(approx) print(first_cauchy_index(approx, 0.01)) print(first_cauchy_index(approx, 0.0001))逻辑说明外层循环枚举起始下标 N内层两层循环检查从 N 开始的所有项两两之差。参数 eps 控制严格程度eps 越小返回的 N 越大或者直接返回 None。这段代码只能验证有限前缀无法证明一个无限序列是 Cauchy 的因为无限性没法靠枚举穷尽真正的证明仍然要靠不等式推导。值得一提的是「收敛序列一定是 Cauchy 序列」在一般度量空间里成立反过来「Cauchy 序列一定收敛」却不一定成立。实数系之所以特殊正是因为它是完备的Cauchy 序列在里面一定能找到归宿。这个区别后面会反复出现。3.3 最小上界性质分析学真正的地基实数构造完成之后最有价值的一条性质登场了最小上界性质。任何非空且有上界的实数子集一定存在上确界。上界好理解一个集合 S 的上界就是不小于 S 中所有元素的数。上确界则是所有上界中最小的那个。这条性质说的是这个「最小的上界」永远存在不会缺位。它为什么重要因为分析学里大量定理的证明结构是「取一个上确界然后证明它就是要找的那个点」。单调有界定理取上确界闭区间套定理取上确界连续函数在闭区间上取得最大值的证明也取上确界。整条推理链的起点就是这条性质。对比一下有理数就很清楚了性质有理数实数对加减乘除封闭是是任意两数之间还有数稠密是是Cauchy 序列必收敛完备否是非空有上界集合必有上确界否是能支撑中值定理、最大值定理否是前两行看不出差别后三行才是分水岭。这也是为什么教材要花整整一章去「造」实数而不是直接宣布「实数就是数轴上的点」。数轴上的点是直觉上确界性质才是可以拿来推理的东西。4. 从极限到积分分析学的主干是一层层搭起来的数系造好之后后面的章节顺序不是随意排的而是一条严格的依赖链先有序列极限才有级数先有极限的 ε 语言才有连续先有连续才有微分和积分积分做不下去了才有度量空间和 Lebesgue 那一套。每一层都建立在前一层之上跳层阅读是这类教材最典型的翻车方式。4.1 ε-N 与 ε-δ把「趋近」变成可检验的不等式序列收敛的定义是对任意 ε 0存在 N使得当 n ≥ N 时|a_n − L| ε。初看这句话很多人会被量词顺序绕晕。换个角度把它想成一场挑战和回应对方随便报一个 ε报多小都行你的任务是拿出一个 N保证从第 N 项往后所有项都落进 (L−ε, Lε) 这个区间里。能应对任何 ε就叫收敛。关键在于顺序N 可以依赖 ε但 ε 不能依赖 N。如果允许倒过来任何序列都能「收敛」定义就废了。这个量词顺序是后面所有概念分歧的源头包括一致连续和一致收敛。def find_N(seq, L, eps): 数值演示找出使后续所有项都落在 L 的 eps 邻域内的最小下标。 seq: 数值列表 L: 极限的候选值 eps: 容差 找不到返回 None for N in range(len(seq)): if all(abs(x - L) eps for x in seq[N:]): return N return None seq [1 / n for n in range(1, 1000)] for eps in (1e-2, 1e-3, 1e-4): print(eps, find_N(seq, 0, eps))逻辑说明从下标 0 开始逐个尝试检查从该位置起的所有项是否都进入邻域第一个满足的位置就是 N。参数 eps 越小返回的 N 越大直观体现「ε 报得越小回应要越大」。同样这段代码只做数值感受证明必须靠不等式推导不能靠样本点。4.2 连续、一致连续与紧致性函数在某点连续的定义是把 ε-δ 里的 N 换成 δ对任意 ε 0存在 δ 0使得当 |x − x₀| δ 时|f(x) − f(x₀)| ε。一致连续只改了一点δ 只依赖 ε不依赖 x₀。也就是说同一个 δ 要在整个定义域上通用。这个差别在有限闭区间上被抹平了因为紧致性保证了「局部性质可以升级成整体性质」。但在开区间或整个实数轴上差距立刻显现f(x) x² 在整个实数轴上连续却不一致连续因为 x 越大同样的函数值变化需要的自变量间隔越小1/x 在开区间 (0, 1) 上连续也不一致连续因为越靠近 0斜率越陡。而 x² 限制在闭区间 [0, 1] 上就变成一致连续了。为什么非要区分因为一致连续是「极限与函数可以交换顺序」的通行证。函数列一致收敛到某个函数时连续性会被保留下来只是逐点收敛的话连续的函数列可以收敛到一个不连续的函数。这个坑背后要单独讲。4.3 从 Riemann 积分到 Lebesgue 积分Riemann 积分的思路是分割把定义域切成小块每块上取函数的上下确界画出一排高高低低的矩形上和的极限和下和的极限相等时就称函数可积。这个思路直观但有两个软肋。一是可积函数类偏窄像「有理数点取 1、无理数点取 0」这种函数在任何区间上上下和都差得远不可 Riemann 积分。二是它对极限运算太苛刻函数列一致收敛时积分和极限可以交换条件一放宽结论就崩。Lebesgue 积分换了个方向不去切定义域先切值域。先问「函数值落在某个范围内的那些点组成的集合有多大」这个「有多大」就是测度再把这些大小加起来。第十八、十九章讲的就是这套东西的搭建过程先定义外测度发现外测度没有可加性于是收缩到可测集再定义可测函数和积分。从「测度」这个词就能看出它的野心它要度量的不只是长度而是一般集合的大小。这也是为什么这套方法能覆盖比 Riemann 积分宽得多的函数类。4.4 度量空间把「距离」抽出来单说到了第十二章教材做了一件抽象的事它不再讨论具体的数而是讨论任何满足三条性质的「距离」函数 d(x, y)非负且只在 x y 时为零、对称、满足三角不等式。满足这三条的对象都叫度量空间。实数轴上用的是绝对值距离平面上用的是欧氏距离函数空间上可以用「两个函数差的最大值」当距离也可以定义一个所有不同点距离都是 1 的离散度量。抽象的好处是复用。你只需要在度量空间这一层把开集、闭集、紧致、完备这些概念证明一次之后所有具体的空间都免费获得这些结论。这也是为什么教材先花一整章讲度量空间再讲其上的连续函数一次抽象换后面所有章节的省力。5. 习题解答里最容易混的几组概念区别到底在哪真正让人卡住的往往不是不会做而是两个概念在脑子里糊成了一团。下面这几组是翻解答时出现频率最高的混淆点。5.1 逐点收敛与一致收敛易混点两个定义都以「对任意 ε 0」开头都要求某项之后误差小于 ε。为什么混逐点收敛里N 可以依赖 ε 和具体的点 x一致收敛里N 只能依赖 ε。写在纸面上差别只是量词顺序调了一下肉眼很容易滑过去。怎么区分问自己一个问题那个 N 能不能「一个顶一片」。逐点收敛是每个点各自有各自的节奏有的点收敛得快有的点收敛得慢慢的那个拖住了整体。一致收敛要求存在一个统一的节奏从某项开始所有点同时进入容差。典型例子是 f_n(x) xⁿ 在 [0, 1] 上。对每个固定的 x 1xⁿ 趋于 0在 x 1 处它恒等于 1。所以逐点极限是一个在 1 处跳到 1 的函数而每个 f_n 都是连续的。一致性在这里失灵了越靠近 1需要的 n 越大没有统一的上界。def max_deviation(fs, xs, limit): 采样估计每个函数与极限函数的最大偏差。 fs: 函数列表按 n 增大排列 xs: 采样点列表 limit: 极限函数 return [round(max(abs(f(x) - limit(x)) for x in xs), 4) for f in fs] xs [i / 100 for i in range(101)] fs [(lambda n: (lambda x: x ** n))(n) for n in (5, 20, 50, 100)] print(max_deviation(fs, xs, lambda x: 0.0))逻辑说明对每个 n 采样计算与极限函数的最大偏差。如果一致收敛这串数应当趋近于 0。实际输出会停在接近 1 的位置不再下降因为采样点里始终包含 x 1 附近那里偏差不会减小。参数 xs 越密结论越可信但仍然只是数值证据。5.2 连续与一致连续易混点两个定义都是 ε-δ 结构写法几乎一样。为什么混在闭区间上两者等价做题时经常碰不到反例于是形成了「反正都一样」的印象。怎么区分看 δ 是不是「一店通用」。连续是每个点现配一个 δ允许不同点的 δ 差别巨大一致连续要求存在一个 δ 对所有点都管用。检验办法是找一个让函数「越来越陡」的方向如果斜率没有上界多半不一致连续。x² 在整条实数轴上就是典型1/x 在靠近 0 的地方也是。5.3 上确界与最大值易混点很多时候上确界恰好就是最大值于是两个词被当成同义词用。为什么混教材里的例子大多取得到最大值久而久之形成惯性。怎么区分最大值必须属于集合上确界不必。集合 {1 − 1/n : n 是正整数} 的上确界是 1但 1 不在集合里所以没有最大值。这条区别在证明里很要命一旦你在证明中写下「设 M 是集合中的最大值」而集合本身是开区间或者无最大元的集合整个证明就塌了。安全的写法永远是「取上确界」因为最小上界性质保证它存在。5.4 收敛序列与 Cauchy 序列易混点两个定义都在描述「项与项越来越近」在实数里它们恰好等价。为什么混等价性在实数范围内成立所以很多习题里互换使用不会出错形成了「本来就是一回事」的错觉。怎么区分收敛的定义里出现了极限 LCauchy 的定义里完全没有 L。收敛说的是「奔向某个具体目标」Cauchy 说的是「自己内部越来越挤」。在实数系里两者互相推出靠的正是完备性。换到有理数系Cauchy 序列可以存在却没有极限换到一般度量空间完备性是要单独验证的性质不是白送的。所以看到「Cauchy 序列必收敛」这句话先确认所处空间是不是完备的。6. 什么时候该翻这份习题解答什么时候最好先合上写到这里关于这份资料该扮演什么角色其实已经清楚了。它不是教材的替代品也不是「看完就会」的魔法。它是一面镜子照出你的证明缺了哪一步。具体到使用场景我自己会这样判断你的处境建议自己完整写过一遍只想核对结论放心看重点比对关键步骤卡住超过四十分钟思路完全打不开看但只看第一句提示就合上还没动笔先扫一遍答案找感觉别看这时候看了等于白看复习阶段想快速回忆证明骨架看但看完必须合上重写一遍把答案抄一遍当作完成作业千万别这是最贵的一种偷懒最容易踩的坑是第三种。答案读起来总是顺畅的因为它是别人把思路理顺之后写下的成品中间那些试错、绕路、推翻重来的痕迹都被抹掉了。读成品会产生一种「我懂了」的错觉可这种懂是识别性的懂不是生成性的懂。区别在于合上书你能不能从「对任意 ε 0」这五个字开始把后面三十行重新长出来。有一个很实用的自检办法。看完一段解答之后隔一天拿一张白纸只写命题不看书把证明重新推一遍。推到卡住的地方那里就是你真正的知识缺口而不是你以为的「粗心」。这个方法听起来笨但它把「读懂」和「会写」这两件事强行分开了而这两件事之间的差距比大多数人以为的大得多。另一件事是关于选取范围。这本书的习题量很大不是每一道都值得花同等力气。我的建议是定义刚出现的那几道题必须自己做因为它们在训练你使用新工具纯技巧性的构造题可以适当看答案学的是手法而涉及反例的题目要格外重视反例是概念边界的具体化看一个反例胜过背十条定义。像「构造一个逐点收敛但不一致收敛的函数列」这类题自己造出来一次比看十个别人的构造都管用。还有一个边界要说清楚这份解答是参考资料不是标准答案的最终裁决。数学证明可以有不同的写法同一道题可以有三种思路都成立。如果你的证明和资料里的不一样先别急着改检查两件事每一步的依据是否成立结论是否真的被推出。两件事都没问题那你的写法就是对的甚至可能更简洁。反之如果某一步你自己也说不清依据那才是需要修正的地方而不是结论长得不一样。从那以后我每次做题都强制走一遍「先写自己的、再看别人的、隔天重写一遍」这个流程哪怕慢一点。慢下来的那部分时间最后都省在了后面章节反复回看上。希望帮到你。本文还有配套的精品资源点击获取