简介:这份资源是吴崇试编著《数学物理方法(第二版)》的配套习题解答,面向物理、数学及工科专业本科生与考研复习者,帮助读者在复变函数、积分变换、数学物理方程等课程中对照原书练习进行自检与查漏补缺。内容以曾焰整理的解答版本为基础,覆盖复数与复变函数、复变积分、无穷级数、解析函数的局域性展开、二阶线性常微分方程的幂级数解法、留数定理及其应用等章节,并延伸至Gamma函数、拉普拉斯变换、δ函数、Mathematica中复变函数的处理、定解条件、线性偏微分方程通解、变量分离法、正交曲面坐标系、球函数与柱函数、格林函数法、变分法初步等主题,每章分设正文练习题与章末习题解答,部分章节还附有Rayleigh–Ritz方法等补充内容。资源包为1个pdf文件,体积约799KB,轻便易存,适合打印或平板标注。目前已有1993人学习下载,可作为课堂同步练习的参考,也可用于期末与考研阶段的系统复盘。
1. 柯西-黎曼方程才是真正的分水岭
吴崇试《数学物理方法(第二版)》的第一道坎不是留数定理,而是解析函数那一章的柯西-黎曼方程。多数人把它记成"两个偏导相等",遇到 u、v 混合条件就卡壳。曾焰版本 0.1.4(2019-08-31 定稿)的这份习题解答,把第二章到第二十二章的正文练习与章末习题逐题写开,真正值钱的地方是它展示了"从条件反推函数"的完整链条:先用 C-R 方程把 u、v 的偏导锁死,再由全微分求原函数,最后回头验证是否真的是解析函数。
它适合正在自学复变、准备补数学物理方法基础的工科读者,也适合需要快速核对某道题结论是否写错的人。反过来,如果你只想要一个答案数字,这份材料并不划算——它的排版是 LaTeX 生成的,公式密集,扫描件式的阅读体验对只想抄答案的人并不友好。
2. 解析函数习题的复盘:从 C-R 方程到中值定理失效
2.1 三种等价形式各自解决什么问题
第 2.1 题证明的是 $i\frac{\partial f}{\partial x} = \frac{\partial f}{\partial y}$ 与 C-R 方程等价。把 $f = u + iv$ 代进去:
$$i\frac{\partial f}{\partial x} = i(u_x + i v_x) = -v_x + i u_x,\qquad \frac{\partial f}{\partial y} = u_y + i v_y$$
两边实部虚部分别相等,得到的就是 $u_x = v_y$、$u_y = -v_x$。这一步没有技巧,但它是后面所有变形的地基。
第 2.2 题更进一步,用 $x = \frac{1}{2}(z + z^)$、$y = -\frac{i}{2}(z - z^)$ 推出 $\partial x/\partial z^* = 1/2$、$\partial y/\partial z^* = i/2$,于是
$$\frac{\partial f}{\partial z^*} = \frac{1}{2}\left(u_x - v_y\right) + \frac{i}{2}\left(u_y + v_x\right)$$
所以 $\partial f/\partial z^* = 0$ 与 C-R 方程互为充要条件。这个形式在实际判断里比逐项验 C-R 快得多:拿 $f = |z|^2 = z z^$ 试一下,$\partial f/\partial z^= z \neq 0$,立刻知道它不解析。而 $f = z^2 + z$ 因为只含 $z$,直接判为整函数。
章末第 2 题把 C-R 方程写成极坐标形式的矩阵推导,结论是
$$\frac{\partial u}{\partial r} = \frac{1}{r}\frac{\partial v}{\partial \theta},\qquad \frac{1}{r}\frac{\partial u}{\partial \theta} = -\frac{\partial v}{\partial r}$$
同时给出导数的另一种写法 $f'(z) = \frac{r}{z}\left(\frac{\partial u}{\partial r} + i\frac{\partial v}{\partial r}\right) = \frac{1}{z}\left(\frac{\partial v}{\partial \theta} - i\frac{\partial u}{\partial \theta}\right)$。做圆形区域上的边值问题时,用极坐标形式能把 $r$、$\theta$ 的变量分离提前识别出来。
2.2 用 SymPy 复现恒等式与雅可比行列式
第 2.3 题和第 2.12 题都是恒等式证明,手推容易漏项,交给符号计算核对更快。下面这段直接取第 2 章章末第 4(1) 题的结果 $f(z) = z^2 + z + iC$(取 $C=0$):
import sympy as sp x, y = sp.symbols('x y', real=True) z = x + sp.I * y # 章末第 4(1) 题:u = x^2 - y^2 + x, v = 2xy + y, 对应 f(z) = z^2 + z + iC f = z**2 + z u, v = sp.re(f).expand(), sp.im(f).expand() ux, uy = sp.diff(u, x), sp.diff(u, y) vx, vy = sp.diff(v, x), sp.diff(v, y) # 第 2.1 题:C-R 方程两个分量 print('u_x - v_y =', sp.simplify(ux - vy)) # 应为 0 print('u_y + v_x =', sp.simplify(uy + vx)) # 应为 0 # 第 2.3 题:|f'|^2 = u_x^2 + v_x^2 = u_x^2 + u_y^2 fp = sp.diff(f, z) # f'(z) = 2z + 1 mod2 = sp.expand(fp * sp.conjugate(fp)) # x, y 为实符号,共轭可直接展开 print('|f\'|^2 =', mod2) print('u_x^2+v_x^2 =', sp.expand(ux**2 + vx**2)) print('差值 =', sp.simplify(mod2 - (ux**2 + vx**2))) # 第 2.12 题:dξ dη = |f'(z)|^2 dx dy,雅可比行列式应等于 |f'|^2 jac = sp.Matrix([[ux, uy], [vx, vy]]).det() print('Jacobian - |f\'|^2 =', sp.simplify(jac - mod2)) # 应为 0运行结果里 $|f'|^2 = (2x+1)^2 + 4y^2$,$u_x^2 + v_x^2 = (2x+1)^2 + (2y)^2$,两者一致;雅可比行列式 $u_x v_y - u_y v_x$ 同样等于 $(2x+1)^2 + 4y^2$。这里有个容易踩的点:sp.conjugate只有在符号被声明为real=True时才会把 $x + iy$ 的共轭展开成 $x - iy$,否则结果会停在conjugate(2*x+1+2*I*y)上不动。
如果换成一个非解析函数,比如 $f = |z|^2$,上面第二行打印出来的就不是 0,而是 $\bar z$ 的实虚分量组合,能立刻暴露问题。
2.3 中值定理失效与 e^z 在无穷远点的行为
第 2.5 题是个反直觉结论:罗尔中值定理在解析函数上不成立。解答给的构造是
$$f(z) = \exp\left(i\frac{2z - (z_1 + z_2)}{z_2 - z_1}\pi\right)$$
它满足 $f(z_1) = f(z_2) = -1$,但 $f'(z) \neq 0$ 恒成立,因为指数上的线性函数导数不为零而指数函数无零点。这个例子说明"解析"并不能补偿实数域中值定理所依赖的完备性结构。
第 2.9 题关于 $e^z$ 在无穷远点的讨论更实用。设 $z = re^{i\theta}$,则 $|e^z| = e^{r\cos\theta}$,收敛与否完全由 $\cos\theta$ 的符号决定:
| 趋于无穷的路径 | $\cos\theta$ | $|e^z|$ 行为 | 极限是否存在 |
|---|---|---|---|
| 正实轴 $z = r$ | 1 | $e^{r} \to \infty$ | 不存在,发散 |
| 虚轴 $z = ir$ | 0 | 恒为 1 | 不存在,有界震荡 |
| 负实轴 $z = -r$ | -1 | $e^{-r} \to 0$ | 存在,为 0 |
| 序列 $z_n = \ln|\alpha| + (\theta_\alpha + 2\pi n)i$ | 0 | $|e^{z_n}| = |\alpha|$ 恒成立 | 不存在 |
提示:复变函数里 $z \to \infty$ 的极限要求沿任意路径都收敛到同一个值。上表里路径不同结果不同,所以 $e^z$ 在无穷远点的极限根本不存在。想让 $e^z$ 沿某个序列趋于给定非零复数 $\alpha$,取 $z_n = \ln|\alpha| + i(\arg\alpha + 2\pi n)$ 即可,因为每加 $2\pi i$ 函数值不变。
原解答在 2.9 里把序列写成了 $z_n = \log|a| + (\theta + 2\pi n)i$,其中 $a$ 应为 $\alpha$,且这里的 $\log$ 是实对数而非多值复对数——这类排版笔误在公式密集的 LaTeX 稿里很常见,读到 $|a|$ 时先按上下文还原符号。
第 2.11 题的证明思路也值得记下来:假设 $|f(z)|$ 在区域 $G$ 内为常数,将其平方后对 $x$、$y$ 求偏导并代入 C-R 方程,会得到一个系数矩阵行列式为 $|f(z)|^2 \neq 0$ 的齐次线性方程组,从而 $v_x = v_y = 0$。$|f|^2$ 作分母这个细节决定了该证明为什么在 $f \equiv 0$ 时要单独拎出来说。
3. 复变积分与留数定理:围道怎么围、奇点怎么数
3.1 多连通区域的围道分解套路
第 3 章反复出现的模式是:先判断被积函数在围道内部有几个奇点,再决定用柯西积分定理还是留数。
以第 3(1) 题为例,$f(z) = \frac{1}{z^2-1}\sin\frac{\pi z}{4}$ 的奇点是 $z = \pm 1$。当围道取 $|z| = 1/2$ 时内部无奇点,积分为 0;取 $|z-1| = 1$ 时只包住 $z=1$,把 $f$ 写成 $\frac{1}{z-1}\cdot\frac{\sin(\pi z/4)}{z+1}$ 的形式套柯西积分公式,得
$$\oint_{|z-1|=1} f(z),dz = 2\pi i \left.\frac{\sin(\pi z/4)}{z+1}\right|_{z=1} = \frac{\sqrt{2}}{2}\pi i$$
取 $|z|=3$ 时两个极点都在内部,此时用多连通区域的柯西定理:在整个外部大圆与两个小圆之间的环形区域内 $f$ 解析,边界正定向积分之和为零,于是
$$\oint_{|z|=3} f,dz = \oint_{|z-1|=\delta} f,dz + \oint_{|z+1|=\delta} f,dz = \frac{\sqrt{2}}{2}\pi i + \frac{\sqrt{2}}{2}\pi i = \sqrt{2}\pi i$$
第 3(1)(iv) 题用的曲线是 $z = re^{i\theta}$,$r = 3 - \frac{\sin^2\theta}{4}$,$\theta$ 从 0 取到 $4\pi$。这个参数范围走两圈,等价于两个各自包住 $\pm i$ 的闭合围道,结果自然是单圈的 2 倍。
| 围道 | 内部奇点 | 使用工具 | 结果 |
|---|---|---|---|
| $|z| = 1/2$ | 无 | 柯西积分定理 | 0 |
| $|z-1| = 1$ | $z=1$ | 柯西积分公式 | $\frac{\sqrt2}{2}\pi i$ |
| $|z| = 3$ | $z=\pm1$ | 多连通分解 + 柯西公式 | $\sqrt2\pi i$ |
| $|z-i| = 1$ | $z=i$ | 柯西积分公式 | $\pi/e$ |
| $|z| = 2$ | $z=\pm i$ | 多连通分解 + 柯西公式 | $-2\pi\sinh 1$ |
3.2 奇点分类与留数速查
留数定理的计算速度取决于奇点分类是否准确。三类常见情况的公式如下:
| 奇点类型 | 判定方法 | 留数公式 | 典型题号 |
|---|---|---|---|
| 可去奇点 | 洛朗展开无负幂项 | $\mathrm{Res} = 0$ | 3(1)(i) |
| 一阶极点 | $\lim_{z\to z_0}(z-z_0)f(z)$ 有限非零 | $\lim_{z\to z_0}(z-z_0)f(z)$ 或 $\frac{P(z_0)}{Q'(z_0)}$ | 3(2)(i) |
| $m$ 阶极点 | 最小负幂次为 $-m$ | $\frac{1}{(m-1)!}\lim_{z\to z_0}\frac{d^{m-1}}{dz^{m-1}}\left[(z-z_0)^m f(z)\right]$ | 3(4)(4) |
| 本性奇点 | 洛朗展开负幂项无穷多 | 直接用 $a_{-1}$ | 3(3) 类 |
用 $P/Q'$ 规则算 $f(z) = \frac{e^{iz}}{z^2+1}$ 在 $z=i$ 处的留数:$Q' = 2z$,$Q'(i) = 2i$,于是 $\mathrm{Res}_{z=i} = \frac{e^{i\cdot i}}{2i} = \frac{e^{-1}}{2i}$。
注意:$\int |dz|/z$ 和 $\oint dz/z$ 是两个完全不同的量。第 3 章第 2 题里 $\oint_{|z|=1}\frac{dz}{z} = 2\pi i$,而 $\oint_{|z|=1}\frac{|dz|}{z} = 0$。前者是复微分,后者是弧长微分,参数化时一个带 $e^{i\theta}$,另一个不带,混用会直接得出错误符号。
3.3 用 SciPy 沿参数化围道做数值交叉验证
解析结果算完,最好再做一次数值验证。把围道参数化后沿实参数 $t$ 积分即可:
import numpy as np from scipy.integrate import quad # 题 3(2)(i):∮_{|z-i|=1} e^{iz}/(z^2+1) dz,围道 z(t) = i + e^{it} f = lambda z: np.exp(1j * z) / (z**2 + 1) z = lambda t: 1j + np.exp(1j * t) dz = lambda t: 1j * np.exp(1j * t) real = quad(lambda t: np.real(f(z(t)) * dz(t)), 0, 2*np.pi, limit=400)[0] imag = quad(lambda t: np.imag(f(z(t)) * dz(t)), 0, 2*np.pi, limit=400)[0] print('数值结果 =', real, '+', imag, 'i') print('解析结果 π/e =', np.pi / np.e)这段代码里limit=400是关键参数。被积函数在 $t = \pi$(对应 $z = i+(-1)$ 附近)处虽然不经过极点,但极点离围道很近,自适应积分会反复细分区间;默认的limit=50有时会给出形如IntegrationWarning的警告而不是报错,结果看起来正常但精度悄悄下降。把limit提到 400 以上,数值结果与 $\pi/e \approx 1.15573$ 能对上到小数点后 6 位。
如果要验证 $|z| = 2$ 那题的 $-2\pi\sinh 1 \approx -7.3846$,把 $z(t)$ 改成 $2e^{it}$ 即可,注意逆时针方向对应 $dz = 2i e^{it},dt$,方向反了结果就差一个负号。
4. 幂级数解法、球函数与柱函数:特殊函数的贯通路径
4.1 常点、正则奇点与解的适用范围
二阶线性常微分方程的幂级数解法,第一步永远是判断展开点是否"规则"。若系数 $p(x)$、$q(x)$ 在 $x_0$ 处解析,该点是常点,方程有泰勒级数解,收敛半径至少到最近的奇点;若 $p$、$q$ 本身在 $x_0$ 发散但 $(x-x_0)p$、$(x-x_0)^2 q$ 解析,$x_0$ 是正则奇点,需要设 $y = (x-x_0)^s\sum a_k (x-x_0)^k$,代入后令最低次幂系数为零得到指标方程 $s(s-1) + p_0 s + q_0 = 0$。富克斯定理保证了这类方程的两个线性无关解一定可以写成 Frobenius 级数形式。
| 方程 | 奇点位置 | 是否正则 | 指标方程 | 解的类型 |
|---|---|---|---|---|
| Legendre $(1-x^2)y'' - 2xy' + l(l+1)y = 0$ | $x = \pm 1$ | 是 | $s(s-1) = 0$ | $l \in \mathbb{N}$ 时截断为多项式 $P_l$ |
| Bessel $x^2y'' + xy' + (x^2-\nu^2)y = 0$ | $x = 0$ | 是 | $s^2 - \nu^2 = 0$ | $J_{\pm\nu}$、$N_\nu$ |
| 勒让德连带方程 | $x = \pm 1$ | 是 | 同上 | $P_l^m$、$Q_l^m$ |
| 一般二阶方程在常点展开 | 无 | — | 无指标方程 | 直接泰勒级数 |
这一章的价值不在记公式,而在记"什么时候必须用 Frobenius、什么时候普通泰勒就够"。常点强行套 Frobenius 也能算,但会多引入一个未知指数 $s$,白白增加计算量。
4.2 变量分离法与正交曲面坐标系中的拉梅系数
变量分离法在球坐标、柱坐标里的写法差别,全部藏在拉梅系数里。正交曲线坐标下 $\nabla^2$ 的标准形式是
$$\nabla^2 \Phi = \frac{1}{h_1h_2h_3}\left[\frac{\partial}{\partial q_1}\left(\frac{h_2h_3}{h_1}\frac{\partial \Phi}{\partial q_1}\right) + \frac{\partial}{\partial q_2}\left(\frac{h_1h_3}{h_2}\frac{\partial \Phi}{\partial q_2}\right) + \frac{\partial}{\partial q_3}\left(\frac{h_1h_2}{h_3}\frac{\partial \Phi}{\partial q_3}\right)\right]$$
| 坐标系 | $h_1$ | $h_2$ | $h_3$ | 分离后得到的方程 |
|---|---|---|---|---|
| 直角 | 1 | 1 | 1 | 常系数二阶方程 |
| 柱坐标 $(\rho,\varphi,z)$ | 1 | $\rho$ | 1 | Bessel + 三角函数 |
| 球坐标 $(r,\theta,\varphi)$ | 1 | $r$ | $r\sin\theta$ | 欧拉型径向方程 + 连带 Legendre |
| 抛物柱坐标 | $\sqrt{\xi^2+\eta^2}$ | $\sqrt{\xi^2+\eta^2}$ | 1 | 合流超几何方程 |
球坐标下分离 $l$ 之后,径向方程是 $r^2R'' + 2rR' - l(l+1)R = 0$,这是标准的欧拉型方程,直接设 $R = r^\alpha$ 得 $\alpha(\alpha+1) = l(l+1)$,即 $R = Ar^{l} + Br^{-(l+1)}$。构造格林函数时这一步决定了内场解与外场解的拼接形式。
4.3 用符号计算自动推出级数递推关系
手推 Legendre 方程的递推容易漏掉 $k(k-1)$ 那一项,用 SymPy 逐阶提取系数更稳:
import sympy as sp x = sp.symbols('x') l = sp.symbols('l', real=True) N = 8 a = sp.symbols('a0:%d' % (N + 2)) # 待定系数 a0 ... a_{N+1} y = sum(a[k] * x**k for k in range(N + 2)) # Legendre 方程:(1-x^2)y'' - 2xy' + l(l+1)y = 0 expr = sp.expand((1 - x**2) * sp.diff(y, x, 2) - 2 * x * sp.diff(y, x) + l * (l + 1) * y) repl = {} for k in range(N + 1): eq = sp.Eq(expr.coeff(x, k), 0) # 令 x^k 的系数为零 sol = sp.solve(eq, a[k + 2]) if sol: repl[a[k + 2]] = sp.expand(sol[0].subs(repl)) # 回代已求出的低阶关系 ys = sp.expand(y.subs(repl)) print(sp.collect(ys, [a[0], a[1]]))打印出来的奇次项与偶次项系数分别由 $a_0$、$a_1$ 生成,递推关系是
$$a_{k+2} = \frac{k(k+1) - l(l+1)}{(k+1)(k+2)},a_k$$
代码里的repl字典承担回代职责,sol[0].subs(repl)保证求 $a_4$ 时用的是已经化简过的 $a_2$,否则表达式会指数级膨胀。当 $l$ 取非负整数时,某一支递推的分子在 $k = l$ 处为零,级数自动截断成 $l$ 次多项式,这正是 $P_l(x)$ 的来源;另一支仍然是无穷级数,对应第二类解 $Q_l(x)$,它在 $x = \pm 1$ 发散,所以物理问题里通常被边界条件淘汰掉。
同样的手法可以套到 Bessel 方程上,得到 $a_{2k}$ 的递推并识别出 $\Gamma$ 函数形式的系数,这也解释了为什么第 8 章要把 $\Gamma$ 函数单独拎出来讲——它是级数系数归一化的记账工具。
4.4 边界条件如何把通解筛成特征值问题
分离变量之后得到的都是带参数的通解,真正决定物理结果的是边界条件。球形区域内 $R(r)$ 必须在 $r = 0$ 有限,于是 $r^{-(l+1)}$ 项被砍掉;柱函数 $J_\nu$ 在 $\rho = a$ 处为零的要求,把特征值锁定在 $J_\nu$ 的零点 $\mu_{\nu n}/a$ 上。这些零点没有初等闭式表达,只能数值求解,所以第 17 章之后的习题往往需要配合数值工具。
附录里提到的 Rayleigh–Ritz 方法提供了另一条路:不去解方程,而是把特征值问题写成泛函极值问题,用试探函数展开求近似特征值。对 Sturm–Liouville 问题,取试探函数 $\phi = \sum c_i \phi_i$ 代入 $\lambda = \frac{\int p\phi'^2 + q\phi^2}{\int \rho\phi^2}$,对 $c_i$ 求偏导令其为零,就化成一个矩阵广义特征值问题,代码实现上比求特殊函数零点简单得多。
5. 把 PDF 变成可检索、可核对的工作副本
习题解答用到后期,检索效率比阅读速度更重要。这份文档有 22 章加三个附录,靠翻页找一个公式的代价太高。我一般先把它转成保留版式的文本再做索引:
# 保留分栏与缩进,避免公式被拆成碎行 pdftotext -layout "数学物理方法习题解答.pdf" solutions.txt # 按章节号检索,-A 表示同时打印后 5 行上下文 rg -n "留数定理" -A 5 solutions.txt | head -40-layout这个参数不能省。默认模式下多栏排版和公式上下标会被压成一条竖线文本,$|z-1|=1$ 这类表达式可能散成三行,检索命中率明显下降。
如果要把章节号映射到页码,用pypdf抽一遍目录更快:
from pypdf import PdfReader import re, json reader = PdfReader("数学物理方法习题解答.pdf") pat = re.compile(r"^\s*(\d{1,2}(?:\.\d)?)\s+\S") # 形如 "7 留数定理及其应用" index = {} for page_no, page in enumerate(reader.pages, 1): for line in page.extract_text().splitlines(): m = pat.match(line) if m: index.setdefault(m.group(1), page_no) # 首次出现即目录条目 json.dump(index, open("toc_index.json", "w", encoding="utf-8"), ensure_ascii=False, indent=2)需要注意enumerate(reader.pages, 1)得到的是 PDF 物理页号,而目录里印的是正文页码,两者之间有个固定偏移,通常是前面的目录页数。做二次检索时把偏移量单独存成配置项,换版本时只需要改这一个数字。
勘误这块建议单独维护一张表,而不是在 PDF 上画高亮。原文档是 0.1.4 版本、2019-08-31 最后修订,作者在开头的摘要里留了反馈邮箱,但邮件往来不适合做版本追踪。我自己的做法是在同目录放一个errata.csv:
| 题号 | 原文写法 | 应改为 | 类型 | 影响 |
|---|---|---|---|---|
| 2.9 | $z_n = \log|a| + (\theta+2\pi n)i$ | $z_n = \ln|\alpha| + (\arg\alpha + 2\pi n)i$ | 符号笔误 | 中,影响序列构造 |
| 2.10 | 不等式两处 $\cos^2 x$ 与 $\sin^2 x$ 位置 | 按推导顺序核对 | 排版 | 低,自行可还原 |
| 章末 2.7(2) | $e^{iz} = \frac{i+1}{2}$ 分支 | 补 $n \in \mathbb{Z}$ 与辐角分支 | 表述省略 | 中,漏解 |
每次核对一条就在表里加一行,用题号做\label风格的引用,下次换版本重新排版时直接做 diff,比在阅读器里逐页找高亮快很多。这张表配合前面的toc_index.json,能实现"按题号跳页 + 按题号查勘误"的双向检索,也方便把符号计算验证过的结论回填成可执行脚本。
本文还有配套的精品资源,点击获取