3.3 拉普拉斯方程的极坐标解法


3.3 拉普拉斯方程的极坐标解法

椭圆型方程还没有正式解过。本节把细杆弯成圆盘,在极坐标里重演分离变量:直角坐标下束手无策的圆形边界,在同心圆坐标里变成"半径方向与圆周方向解耦"的标准局面。推导的终点是泊松积分公式——圆盘内部任一点的温度,等于边界值与一个显式核的加权平均。这是全书第一次拿到"边界数据决定内部解"的闭式公式,也是下一节格林函数思想的预演。

把直角网格换成同心圆

拉普拉斯方程 u_xx + u_yy = 0 在直角坐标里形式最简,但圆盘边界(x² + y² = R²)在直角网格上参差不齐——分离变量要求边界恰好落在坐标线上。极坐标 x = r·cosθ、y = r·sinθ 下,拉普拉斯算子变成

Δu = u_rr + (1/r)·u_r + (1/r²)·u_θθ,

而圆盘边界恰是 r = R 的坐标线。形式变复杂是买路钱:买到的是边界的简单。这个取舍在数值方法里反复出现——坐标选择本质上是"把几何难度转移给方程系数"。

设定问题:圆盘 r 小于 R,边界温度给定为 φ(θ)(圆周上位置的函数),求稳态温度分布。注意椭圆问题没有初始条件——温度场不随时间变,输入只有边界(2.2 节性格档案的又一兑现)。

分离变量:半径与角度解耦

假设 u(r,θ) = R(r)·Θ(θ),代入并同除 R·Θ,乘以 r²:

(r²R'' + rR')/R = −Θ''/Θ。

左边只依赖 r,右边只依赖 θ,两边只能等于同一常数 n²。角度方程 Θ'' + n²Θ = 0 的解要求在 θ 环绕一周后回到自身(单值性),这立刻强制 n 取整数:n = 0, 1, 2…,Θ = cos(nθ) 或 sin(nθ)。半径方程是欧拉型方程:

r²R'' + rR' − n²R = 0。

试解 R = r^m,得 m² − n² = 0,m = ±n。于是每个 n 给出两个分支:r 的 n 次幂与 r 的负 n 次幂。关键抉择在此:r 的负幂在原点爆炸,而圆盘内部包含原点、温度必须有限——负幂分支整体出局。有界性条件不动声色地完成了筛选,这是椭圆问题"内部自动光滑"性格(2.2 节)的第一次显形。

于是通解是

u(r,θ) = A₀ + Σ (r/R)ⁿ·[a_n·cos(nθ) + b_n·sin(nθ)],

系数由边界值做傅里叶展开读出:a_n、b_n 正是 φ(θ) 的傅里叶系数(A₀ 是均值项)。与 3.1 完全平行的三件套再次出现:离散谱、正交基、系数公式——区域从线段换成圆周,剧本不变。

图解:圆盘上的分离变量图景

圆盘极坐标与边界数据示意

圆盘极坐标与边界数据示意

求和求出核:泊松积分公式

级数解好用但不直观——想要某点的温度,得把无穷级数加一遍。把系数代回、交换求和次序并动用几何级数求和,级数可以收敛成一个闭式积分(推导是标准的几何级数练习,值得自己在草稿纸上走一遍):

u(r,θ) = (1/2π)·∫[0,2π] P(r,θ−s)·φ(s) ds,其中核

P(r,α) = (R² − r²) / (R² − 2Rr·cos(α) + r²)。

这就是泊松积分公式。它的读法极富物理味:内部点的温度是边界温度的加权平均,权重由泊松核分配。核的两个性质可以直接核验:r = 0 时 P 恒等于 1,圆心温度是边界值的算术平均(对称位置互相抵消);r 趋近 R 时核收缩成德尔塔式尖峰,边界点附近的值由正对的边界数据接管。加权平均结构还立刻给出极值原理:平均不可能超过输入的最大值——2.3 节的契约在公式层面看得一清二楚。

数值实验:级数、核与离散拉普拉斯三方对表

解析两条路线(部分和、泊松积分)应当重合;再请来一条独立路线:在圆盘网格上直接离散拉普拉斯算子迭代求解(简单迭代法,第四章正式讲),三方互证。取边界值 φ(θ) = cos(2θ)(一侧热一侧冷的偶极分布),理论解恰是单项 u = (r/R)²·cos(2θ),这是极坐标分离变量的"教科书款"。

import numpy as np R = 1.0 # 理论单项解 u_exact = lambda r, th: (r/R)**2 * np.cos(2*th) # 路线一:级数(只有 n=2 项非零,系数 a2 = 1) th = np.linspace(0, 2*np.pi, 361, endpoint=False) r_in, th_in = 0.6, np.pi/5 u_series = (r_in/R)**2 * np.cos(2*th_in) # 路线二:泊松核数值积分 s = np.linspace(0, 2*np.pi, 3601, endpoint=False) phi_b = np.cos(2*s) P = (R**2 - r_in**2) / (R**2 - 2*R*r_in*np.cos(th_in - s) + r_in**2) u_poisson = np.trapz(P * phi_b, s) / (2*np.pi) # 路线三:极坐标网格上 Jacobi 迭代解离散拉普拉斯(n_r=40, n_th=90) nr, nt = 40, 90 rs = np.linspace(0.05, R, nr); ths = np.linspace(0, 2*np.pi, nt, endpoint=False) U = np.zeros((nr, nt)) U[-1, :] = np.cos(2*ths) # 边界条件 for _ in range(20000): Un = U.copy() c = (rs[1:-1]**2 + rs[1:-1]) / (2*rs[1:-1]**2) # 径向系数(步长均一简化) d = (rs[1:-1]**2 - rs[1:-1]) / (2*rs[1:-1]**2) ang = rs[1:-1]**2 * (1/rs[1:-1]**2) # 角向系数 = 1 U[1:-1,1:-1] = 0.5/(1+ang)*(c*Un[2:,1:-1] + d*Un[:-2,1:-1] + ang*(np.roll(Un[1:-1],1,axis=1)[:,1:-1] + np.roll(Un[1:-1],-1,axis=1)[:,1:-1])) i = np.argmin(np.abs(rs - r_in)); j = np.argmin(np.abs(ths - th_in)) print("理论:", u_exact(r_in, th_in)) print("级数:", u_series, " 泊松核:", round(u_poisson, 6), " 迭代:", round(U[i,j], 6))

四个数在网格与求和精度内重合。三方对表的意义各不相同:级数与核的重合验证了"求和可化为积分"的推导;迭代解与前两者的重合验证了离散拉普拉斯算子写对了——椭圆问题的数值路线在本节提前亮相,误差来源(网格分辨率、迭代次数)到第四章展开。

方法边界与延伸

两个延伸标注坐标。其一,圆环、扇形、半球沿用同一剧本:环域允许负幂分支回归(原点不在区域内),内外边界两组条件定系数;扇形需要额外的楔角条件。其二,泊松核是圆盘的格林函数:把边界点源对内部点的响应写成公式,就是下一节的主角——格林函数把"边界加权平均"推广成"源与响应的通用语言",泊松积分只是它在圆盘上的具体长相。

⚠️ 常见坑:n 从 0 数起还是 1 数起、常数项系数是 1/2 还是 1,是极坐标傅里叶展开最高频的记号事故。写完通解后必须做两个体检:r = 0 处有界、边界处退化回 φ——两条都过,记号才算对。

本节要点

  • 坐标换血:极坐标把圆边界变简单,代价是算子系数复杂化——几何难度被转移而非消灭;
  • 分离三件套再现:整数谱(单值性强制)、正交三角基、傅里叶系数公式,与 3.1 平行;
  • 有界性筛选:原点条件砍掉 r 的负幂分支,椭圆"内部光滑"性格的公式化显形;
  • 泊松积分:级数求和收缩为加权平均,核的性质直接给出均值与极值原理;
  • 三方互证:理论单项解、级数与核、离散迭代同台对表,数值路线提前试跑。

加权平均的核从哪里来?把"边界上的一点"想成一个源,答案就有了统一的名字:格林函数。下一节把点源响应讲成通用语言,椭圆问题的求解从此获得集成视角。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U