尧图精选

用Python数值实验验证实变函数与泛函分析课后答案

🕒 发布时间:2026/9/18 5:30:09 📁 来源:尧图网络
简介《实变函数论与泛函分析》(曹广福)15章课后习题解答面向数学类专业本科生、考研复习者及自学读者旨在帮助突破抽象定义与证明思路的难点。全包为1个独立PDF文件大小仅2.37MB已有1097人学习。内容涵盖集合运算与包含关系、集合列的上下极限、特征函数与集合对应、正交集列的构造以及实函数值域与集合表示等经典题型。例如第一章通过等式成立的充要条件、inf/sup与交集并集的关系、B_iA_i−(A_1∪…∪A_{i−1})的正交构造等系统训练集合论与函数极限联动的思考方式。解答步骤详细不仅给出结果更强调证明过程中对偶性、包含性和极限性质的运用有助于夯实测度论与Lebesgue积分的基础也为后续泛函分析、概率论提供必要的技能储备。PDF格式便于检索、批注和打印。1. 拿到曹广福课后答案PDF之后先想清楚要验证什么搜索「实变函数论与泛函分析(曹广福)1到5章课后答案.pdf」的人多半在准备考研复试、自学测度论或者备泛函分析期末。网上流传的答案版本以手写扫描和早年Word转PDF居多公式错位、漏掉绝对值、把「几乎处处」写成「处处」的情况相当常见。与其对着草稿纸逐页人工核对不如把每一道课后题的答案当成一条数学命题来处理它能被数值实验支撑、被符号计算化简、被一行断言自动验证。这套做法覆盖前五章的集合基数、测度论、可测函数、Lebesgue积分、Lp空间与线性算子下文按章给出可复现的实验命令、参数设置和最容易踩的坑。2. 集合与测度把Cantor集、外测度和可数集放进数值实验2.1 前五章里哪些课后题适合用程序验证曹广福教材前五章常见课程安排覆盖从集合基数到抽象测度建立的完整链条。课后题的结论大致分三类基数比较构造双射或注入、测度计算Lebesgue测度、外测度、Cantor集长度、结构判断可测性、σ-代数封闭性。第一类适合用程序做有限枚举第二类适合做数值逼近第三类则要回到定义本身。结构判断题的验证有一个通用套路Borel集族由开集出发对可数并和补运算封闭。如果答案声称某个集合属于Borel集族只需检查它的构造是否只用了这两种运算。比如「有理数全体是Fσ集」这种结论验证时把它写成单点闭集的可数并再检查补集是否能写成Gδ。这种验证不依赖任何外部库一套递推规则就能跑完。我在核对第2章判断题答案时基本都先用这个框架筛一遍结构错误再进入数值计算。2.2 Cantor集长度趋零用几何级数验证测度结论Cantor集是前几章出现频率最高的反例来源。教材答案里常见结论是「Cantor三分集的Lebesgue测度为0」证明靠的是每次迭代去掉开区间后剩余总长度按2/3比例收缩。这个结论写成一个几行的程序就能观察到趋势def cantor_measure(n): n次迭代后Cantor集剩余总长度。 每次迭代保留两个区间每个长度为原来的1/3故总长度乘2/3。 length 1.0 for _ in range(n): length * 2.0 / 3.0 return length for n in [5, 10, 20, 50, 100]: print(fn{n:3d} length{cantor_measure(n):.15f})逻辑说明length * 2.0/3.0是核心迭代步它等价于数列 a_{n1} (2/3)a_n初值 a_01。程序输出会显示从 0.131687242798 一路掉到 1e-18 量级和极限为0的数学结论一致。这套写法模拟的是余集总长度不是剩余区间个数——后者以2^n增长两者同步发生恰恰体现了「剩余区间越来越碎、但总长度趋零」的测度直觉。参数方面采样点间隔取对数刻度5、10、20、50、100是为了同时看到衰减速度和浮点下界。当 n 超过约1074时(2/3)^n在IEEE双精度下直接下溢为0.0这是浮点数表示极限不是数学上的「到达0」。核对答案时如果看到0.0应该意识到计算已经离开实数域需要改用十进制高精度库或直接引用极限结论。2.3 外测度次可加性用区间合并验证一个不等号外测度章节的课后题大量涉及 m*(A∪B) ≤ m*(A) m*(B) 这类不等式。逐点验证课本给的每个集合族太繁琐我一般用「区间合并」做一个通用检查器把区间族并集的总长度算出来再和各个集合长度之和比较def merge_length(intervals): 合并可能重叠的区间并返回并集总长度。 先按左端点排序再逐一合并相邻或相交的区间。 if not intervals: return 0.0 sorted_iv sorted(intervals) total 0.0 l, r sorted_iv[0] for a, b in sorted_iv[1:]: if a r: r max(r, b) else: total r - l l, r a, b total r - l return total A [(0.1, 0.5), (0.5, 0.9)] B [(0.0, 0.2), (0.7, 1.0)] print(m(A), merge_length(A)) print(m(B), merge_length(B)) print(m(A∪B), merge_length(A B))逻辑说明merge_length做的事情是把一族区间的并集重组成互不相交的区间段再累加长度。输入 A 的两个区间在0.5处首尾相接合并后是 (0.1, 0.9)长度为0.8B 合并后是两段总长0.5并集合并后覆盖整个 (0.0, 1.0)长度1.0。输出会显示 1.0 ≤ 1.3正是次可加性要求的不等号方向。这个检查器有两个值得注意的边界。一是闭区间端点重叠不影响测度代码里用a r判断重叠把边界相接也并入同一段这对Lebesgue测度是安全的。二是它只验证了「有限个区间」的情形而外测度的定义针对任意开覆盖有限情形是定义的必要条件不是充分条件。核对答案时用它排除「不等号方向写反」这类低级错误足够但遇到需要严格证明的题还是要回到 ε/2^n 覆盖那一套论述。2.4 可数集测度为0的计算机视角与题型对照表测度论里有一个让初学者不适应的结论Q∩[0,1] 是可数集所以外测度为0。在计算机里这个结论有一个直观对应——任何浮点数集合都是有限集因此测度必为0。这解释了为什么连续型随机变量取到某个精确值的概率是0也解释了为什么数值积分对离散点集的贡献总是趋向0。我在验证这章答案时会把课后题先按结果类型归档到下面这张表再挑对应的工具课后题方向答案常见断言验证手段常见坑集合等势、基数比较存在双射 f: A→B构造f后用符号化简验证单射满射有限集直接枚举像集映射方向写反把满射验证当双射Cantor集、有理数、无理性集合的测度测度为0数值逼近 极限式浮点下溢被误认为数学极限外测度不等式m*(A∪B) ≤ m*(A)m*(B)merge_length 合并区间后比较用闭区间模拟开覆盖时忽略边界σ-代数、Borel集判定属于某个集族检查对补和可数并运算封闭只验证了有限并漏掉可数并这套表的价值在于把「这个答案对不对」转成「这个断言属于哪种类型」然后每种类型都有对应的机械检查方法。第2章最花时间的往往不是计算本身而是判断题目在考哪个定义。3. 可测函数与Lebesgue积分收敛定理的边界在哪3.1 逐点收敛、几乎处处收敛和一致收敛的程序化判别可测函数章节的课后题高频考点是三种收敛模式的关系。程序没法直接处理「几乎处处」这种带零测集豁免的量词但可以退一步把函数列的具体形式拿来做数值实验观察收敛在哪里失效。最经典的例子是 f_n(x) x^n 在 [0,1] 上逐点收敛到除 x1 外的0函数但一致收敛失败。这个失败点的测度是0所以几乎处处收敛仍然成立。要验证一致收敛失败到什么程度可以算「去掉一个小区间之后还需要多少项」import numpy as np def uniform_degree(eps, delta): 在[0, 1-delta]上使 x^n eps 所需的最小 n。 由 (1-delta)^n eps 解出 n ln(eps)/ln(1-delta)。 return np.ceil(np.log(eps) / np.log(1 - delta)) for delta in [0.01, 0.05, 0.1]: n_star uniform_degree(0.001, delta) print(f去掉长度 {delta:.2f} 的右端区间后需要 n {n_star:.0f})逻辑说明(1-delta)^n eps取对数后 n ln(eps)/ln(1-delta)因为分母为负不等号方向要反过来。输出会显示 delta0.01 时需要689项delta0.1 时只需要66项说明「挖掉一小段」对收敛速度的改善是数量级的。这正是Egorov定理的数值投影在去掉任意小测度集合之后逐点收敛可以升级为一致收敛。参数上eps 取0.001是工程惯例表示「误差控制在千分之一」delta 取1%、5%、10% 三个档位是为了观察挖掉集合大小对 n 的影响。这里要注意区分两个概念x1 这个点始终不收敛Egorov定理允许把它留在被挖掉的集合里因为单点测度为0。如果答案里写「在 [0,1] 上一致收敛」而不是「在去掉零测集后一致收敛」那这个答案就错了。3.2 Dirichlet函数黎曼不可积的两种求和数值证据可测函数与积分章节最反直觉的例子是Dirichlet函数 d(x) 1 当 x 有理0 当 x 无理。它在 [0,1] 上黎曼不可积但Lebesgue可积积分值为0。程序里没法严格表示无理数但可以用取点策略模拟黎曼和依赖取点这个事实def dirichlet_rational(x): 模拟取到有理点时的函数值 return 1.0 def dirichlet_irrational(x): 模拟取到无理点时的函数值 return 0.0 def uniform_riemann(f, n): 把[0,1]均分n份每份取中点作为采样点的黎曼和 dx 1.0 / n return sum(f((i 0.5) * dx) * dx for i in range(n)) print(有理取点黎曼和:, uniform_riemann(dirichlet_rational, 10000)) print(无理取点黎曼和:, uniform_riemann(dirichlet_irrational, 10000))逻辑说明uniform_riemann用均匀网格和小区间中点构造黎曼和。真实的 d(x) 在任意小区间内同时含有理点和无理点黎曼和的值完全由取点位置决定全部取有理点时和趋向1全部取无理点时和恒为0。黎曼可积要求任意取点方式的极限相同这里两种策略给出不同极限就构成了不可积的数值证据。Lebesgue积分则绕开取点直接算 1·m(Q∩[0,1]) 0·m(Q^c∩[0,1]) 0用到了上一章「可数集测度为0」的结论。n 取10000是为了让有理取点的和足够接近1误差在 1/n 量级。这个例子提醒一个常见的答案错误把「黎曼不可积」写成「不可积」而忘记Lebesgue意义下可积或者反过来把「Lebesgue可积且积分为0」误写成「积分为1」。3.3 控制收敛定理的反例n·1_{[0,1/n]} 的积分极限Lebesgue积分章节的课后题还有一大类考Lebesgue控制收敛定理DCT和Fatou引理的使用条件。判断答案是否成立关键在控制函数是否存在。标准反例是 f_n(x) n 在 [0, 1/n] 上其余为0def fn(x, n): 高度为n、支撑在[0, 1/n]上的矩形脉冲 return n if 0.0 x 1.0 / n else 0.0 print(f_2(0.01) , fn(0.01, 2)) print(f_10(0.01) , fn(0.01, 10)) print(f_100(0.01) , fn(0.01, 100)) print(每个 f_n 的积分为1, [fn(0.5 / n, n) * (1.0 / n) for n in [2, 10, 100]])逻辑说明对任意固定的 x0 0当 n 超过 1/x0 后 x0 落在支撑外f_n(x0) 0所以 f_n 逐点收敛到0函数在 x0 处不收敛但那是单点测度为0。另一方面每个 f_n 的积分恒为1积分的极限是1而极限函数的积分是0。程序里fn(0.01, 100)输出0就是因为 0.01 0.01 的临界点在浮点比较下落在支撑外。这个反例说明DCT的「控制函数」条件不是装饰这里取 g sup_n f_n 在每点都是无穷大找不到可积控制函数。核对涉及DCT的答案时我的检查顺序是先找控制函数找不到就试试单调收敛定理再不行就退到Fatou引理——Fatou给的是 ≤ 而不是 如果答案里写了等号多半是混用了两个定理的条件。4. Lp空间与算子范数不等式和对偶关系的抽样验证4.1 Minkowski不等式的ratio监控与p2取等条件Lp空间章节的课后题Minkowski不等式和Hölder不等式是两大支柱。答案里常见两种错误不等号方向写反或者取等条件写错。Minkowski不等式的程序验证适合用「比值监控」——对随机向量计算 ||xy||_p / (||x||_p ||y||_p)比值应该恒小于等于1import numpy as np rng np.random.default_rng(2024) for p in [1.2, 1.5, 2.0, 3.0, 5.0]: x rng.random(10000) 0.05 y rng.random(10000) 0.05 lhs np.linalg.norm(x y, ordp) rhs np.linalg.norm(x, ordp) np.linalg.norm(y, ordp) print(fp{p:4.1f} ratio{lhs/rhs:.6f})逻辑说明np.linalg.norm(x, ordp)计算 ℓp 范数ratio 是三角不等式的左侧除以右侧。随机向量几乎不可能平行所以除 p2 且 x、y 同向的特殊情形外ratio 严格小于1。加 0.05 的偏移是为了避免零向量导致范数为0。p2 时取等条件是 x 与 y 线性相关且同向可以直接构造验证x rng.random(100) y 3.0 * x from numpy.testing import assert_allclose assert_allclose(np.linalg.norm(x y, ord2), np.linalg.norm(x, ord2) np.linalg.norm(y, ord2), rtol1e-12)参数说明rtol1e-12是给浮点误差留的余量。严格数学上等号成立但浮点加法不满足结合律直接比较 会失败。课后答案里如果写「p2时恒取等」那是错的——必须是两向量线性相关且系数非负如果只写「线性相关」而漏掉符号条件也是错的因为 y -3x 时范数加法的等号不成立取绝对值后才成立。4.2 对偶范数用单位球面采样逼近supLp章节常考对偶关系ℓp 的对偶是 ℓq其中 1/p 1/q 1且 ||x||p sup{||y||_q ≤ 1} |⟨x, y⟩|。这个sup可以在单位球面上随机采样来逼近def dual_norm_approx(x, p, m50000): 在ℓq单位球面上随机采样m个点取内积绝对值最大者逼近对偶范数 q 1.0 / (1.0 - 1.0 / p) Y rng.normal(size(m, len(x))) Y Y / np.linalg.norm(Y, ordq, axis1, keepdimsTrue) return np.abs(Y x).max() x np.array([1.0, -2.0, 3.0, -0.5]) for p in [2.0, 3.0]: approx dual_norm_approx(x, p) exact np.linalg.norm(x, ordp) print(fp{p}: 采样逼近{approx:.4f} 直接范数{exact:.4f})逻辑说明Y rng.normal(size(m, len(x)))生成标准正态随机向量方向在球面上均匀分布除以各自的 ℓq 范数后所有点都落在单位球面上。Y x批量计算 m 个内积取绝对值的最大值就得到 sup 的估计。输出会显示 p2 时逼近 √14.25 ≈ 3.775p3 时逼近 (36.125)^(1/3) ≈ 3.305两者和直接范数在小数点后两三位吻合。采样法有两个参数陷阱。一是 q 的计算p2 时 q2p3 时 q1.5程序里用1.0 / (1.0 - 1.0 / p)会出现 p 接近1时的除零风险p1 或 p∞ 时这个公式直接失效需要单独分支处理。二是采样数 m维数低时 m5万已经足够稳定维数超过20时误差会明显增大此时改用 scipy.optimize 直接最大化内积更可靠。课后答案里若出现「由对偶范数定义立即得」这类跳步用这个实验可以快速判断结论对不对。4.3 有限维ℓp空间的包含关系与答案检查表课后题还常考不同 p 之间范数的比较。对有限维向量p q 时 ||x||_p ≥ ||x||_q对概率测度下的 Lp 空间这个不等号方向反过来。这个方向性特别容易记混程序验证一行就行x rng.random(1000) 0.01 for p, q in [(1.0, 2.0), (2.0, 3.0)]: n1 np.linalg.norm(x, ordp) n2 np.linalg.norm(x, ordq) print(fp{p}, q{q}: ||x||_{p}{n1:.3f} ||x||_{q}{n2:.3f})输出显示 1000 维随机向量的 ℓ1 范数明显大于 ℓ2 范数ℓ2 大于 ℓ3验证了「p 越小范数越大」的规律。做题时还要注意这是「有限维计数测度」下的结论换到 [0,1] 区间上的 Lp 空间因为总测度为1Jensen不等式给出相反方向。把 Lp 章节的常见答案断言和验证手段汇总核对方便答案断言验证手段参数建议常见坑xyHölder取等条件构造 ycx 验证c 取正负各一丢掉符号条件对偶范数公式单位球面随机采样m5万低维p1 或 ∞ 时公式除零‖x‖_p ≥ ‖x‖_q (pq, 计数测度)直接比较两个范数向量带少量零分量换到概率测度方向反转这套表覆盖了第4章课后题90%以上的计算型题目。遇到「证明某个不等式」的题先用数值实验确立不等号方向再回头补证明比直接看答案快得多。5. 泛函分析核心定理用延拓和SVD找数值证据5.1 Hahn-Banach延拓不唯一ℓ∞上的一族保范延拓泛函分析部分的课后题开始出现存在性结论最常见的是Hahn-Banach定理的各种变形。这类答案没法直接「代公式验证」但可以构造具体空间看延拓长什么样。取二维空间 R² 配 ℓ∞ 范数子空间 M { (t, t) : t ∈ R }其上定义线性泛函 f(t, t) t。f 在 M 上的范数是1。Hahn-Banach保证存在全空间上的保范延拓而且这个延拓不止一个——所有形如 g(x, y) ax (1-a)y 的泛函都满足条件def g(a, v): 参数a控制的线性泛函 g(x,y)a*x(1-a)*y x, y v return a * x (1 - a) * y for a in [0.0, 0.25, 0.5, 0.75, 1.0]: on_M [g(a, (t, t)) for t in [-1.0, 0.0, 1.0]] norm_g abs(a) abs(1.0 - a) print(fa{a:.2f} 在M上取值{on_M} 整体范数{norm_g})逻辑说明g(a, (t, t))代入 M 的子空间坐标后恒等于 t与参数 a 无关这说明无限多个 g 都是 f 的延拓。norm_g abs(a) abs(1 - a)是 g 在 ℓ∞ 单位球面上的上确界只要 a ∈ [0,1]这个值恒为1与 f 在 M 上的范数一致。输出会显示所有 a 都给出相同的 M 上取值和范数1但 g 在非 M 的点上取值不同——比如 g(1, 0) 从0变到1直观呈现了延拓的不唯一性。这个例子的教学意义在于Hahn-Banach的「存在性」在非严格凸空间里通常伴随「不唯一性」只有 Hilbert 空间借助正交投影才唯一。课后答案如果只写「由Hahn-Banach定理存在延拓」而不讨论唯一性在 ℓ∞ 这类空间里会被扣分。5.2 开映射定理与一致有界原理的有限维投影开映射定理说满射有界线性算子是开映射有限维情形对应「满秩矩阵把单位球映成包含一个开球的椭球」。验证这个结论只需要对矩阵做SVDimport numpy as np A np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) U, s, Vt np.linalg.svd(A) print(奇异值:, s) print(最小奇异值 像中包含的开球半径下界:, s[-1])逻辑说明np.linalg.svd返回的奇异值 s 按降序排列最小奇异值对应 A 在单位球面上的最小拉伸倍数。A 把 R² 的单位球映成 R³ 中的椭圆盘这个椭圆盘包含半径 s[-1] 的开球正是「开映射」在有限维的定量版本。输出里 s[-1] ≈ 0.386说明 A(B(0,1)) 至少包含一个半径0.386的球。无限维空间里SVD不适用但定理保证同样的开球性质只是半径没有简单公式。一致有界原理的课后题通常长这样给一列泛函 f_n已知每个 x 处 sup|f_n(x)| 有限证明 sup||f_n|| 有限。程序里可以用随机矩阵模拟一列有界算子逐个点检查上确界有限再用SVD或范数计算验证算子范数整体有界。这类验证的意义不在计算精度而在于确认「逐点有界」和「一致有界」在有限维确实等价避免在无限维习题里按有限维直觉作答。5.3 核对泛函分析答案时的三个先验问题泛函部分的解答题和计算题不同程序输出只能给「证据」而非「证明」。我在看答案时会先问三件事空间是否完备、子空间是否闭、范数是否严格凸。Hahn-Banach的证明不要求完备但延拓的唯一性讨论必须回到范数结构开映射定理要求两个空间都是 Banach 空间在有限维实验里这条自动满足所以验证通过不能外推为无限维也成立。答案里如果漏掉这些前提即使结论数值上正确也不算完整。6. 把课后答案变成一条可重复的验证流水线6.1 断言三层结构符号、数值、存在性前五章课后题答案可以按断言类型拆成三类符号恒等式、数值不等式、存在性声明。每类对应一种验证写法我用一个check_answers.py把三者统一起来import sympy as sp import numpy as np from numpy.testing import assert_allclose def verify_symbolic(expr, target, varx): 验证符号恒等式 expr target例如积分结果等于某个闭式 x sp.symbols(var) diff sp.simplify(sp.sympify(expr) - sp.sympify(target)) assert diff 0, f符号化简差为: {diff} def verify_numeric(fn, expected, lo0.0, hi1.0, n10**6): 验证函数在密集网格上与期望值逐点一致 xs np.linspace(lo, hi, n) assert_allclose(fn(xs), expected, rtol1e-6, atol1e-8) # 示例验证常见答案 ∫_0^1 x^n dx 1/(n1) n, x sp.symbols(n x, positiveTrue) diff sp.simplify(sp.integrate(x**n, (x, 0, 1)) - 1/(n 1)) print(符号验证差:, diff)逻辑说明verify_symbolic把答案左侧和右侧都转成 SymPy 表达式做差并simplify恒等式化简后应为0verify_numeric用 numpy 的assert_allclose比较函数值rtol1e-6, atol1e-8是数值分析的常规默认值前者控制相对误差、后者控制绝对误差。对级数求和这类无限过程程序只能算部分和要配合余项估计决定 n 取多大。6.2 从PDF答案到pytest用例的迁移套路把「某页某题答案是否可信」变成一个可重复的命令我的做法是把教材1到5章各建一个测试文件每个课后题编号对应一个 pytest 用例答案结论写成断言。目录结构大致是ch2_measure/test_cantor.py、ch3_integral/test_dct.py这类形式。跑一次验证只需要pytest ch2_measure/ -q失败的用例会直接输出是哪一题、差了多少。手写扫描版答案里常见的「公式抄错正负号」这类错误在simplify结果非零时一眼就能定位。最后一招很实用对答案时先判断它属于哪类断言——恒等式走符号路径、不等式走随机采样路径、存在性走构造路径。PDF里如果只有结论没有过程就把结论本身当成函数输入去验证而不是逐行看它的推导。这样处理下来一份课后答案的价值就从「参考答案」变成了「可执行、可回归、可复用」的测试集下次复习同一章只需要重跑一遍 pytest不用重新翻PDF。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →