Skip to content
cfd-lab:~/zh/posts/2026-07-21-water-wave-di…● online

本文译自作者的韩语原文。 阅读原文(한국어)

NOTE #108DAY TUE 유체역학DATE 2026.07.21UPDATED 2026.10.19READ 4 min read#Water-Waves#Dispersion#Group-Velocity#Capillary-Wave#Flow-Phenomena

单个波纹比波群跑得快 — 波的色散与群速度

能量跟着包络走,不跟着单个波峰。水深一旦小于波长,这种错位就消失,只剩一个速度。

往平静的湖面扔一颗石子。波纹画着圆环向外扩散。这一点谁都知道。

可是仔细看这个圆环,会发现有些奇怪。每一道波纹都在圆环的后方生成。向外奔跑。然后在圆环的前缘消失。波群缓慢地扩大,而其中的波纹却超越波群向前。

每个波长各走各的速度,这就是色散(dispersion,按波长的速度差异)。单个波和一群波各有各的速度,那个差值叫群速度(group velocity)。石子的圆环看起来别扭,原因就在这里。

把表面张力 σ 的滑块拉向 0,左侧的毛细波分支会消失,曲线最低点会往短波一侧挪。

1mm1cm10cm1m10m0.01.02.03.03.9m/swavelength λ (log)gravity ↔ capillaryc_min ≈ 0.23 m/sphase speed cgroup speed c_g

Lower σ toward 0 and the capillary upturn on the left flattens — only gravity is left. Shrink h and the long-wave end levels off at the shallow-water speed √(gh), where waves stop dispersing.

看最低相速度是否贴在 0.23 m/s 附近。只剩重力时,波长越短,曲线越往下掉。

石子造出的圆环

水面波靠回到原位的力,也就是回复力(restoring force)运动。回复力有两个。

一个是重力。它把隆起的波峰拉回去。另一个是表面张力(surface tension,把水面绷紧的力)。它想把弯曲的水面抚平。

波长长时重力占上风。波长短于约 1.7cm 时表面张力主导。海上的涌浪是重力波。池塘的细波是表面张力波。

波长决定速度

支配水面波的关系,可归结为一个色散关系式(dispersion relation)。

ω2=(gk+σk3ρ)tanh⁡(kh)\omega^2 = \left( g k + \frac{\sigma k^3}{\rho} \right)\tanh(k h)

其中 ω\omega 是角频率,k=2π/λk = 2\pi/\lambda 是波数(单位长度内的波的个数),λ\lambda 是波长,gg 是重力加速度,σ\sigma 是表面张力,ρ\rho 是密度,hh 是水深。

单个波前进的速度是相速度(phase velocity)。定义为 c=ω/kc = \omega/k。

c=(gk+σkρ)tanh⁡(kh)c = \sqrt{\left( \frac{g}{k} + \frac{\sigma k}{\rho} \right)\tanh(k h)}

关键在于 cc 依赖于 kk,也就是依赖波长。波长不同,速度就不同。这就是色散。声音,以及真空中的光,无论波长如何速度都相同。水面波并非如此。

重力与表面张力的拉锯

来看深水。当 khkh 很大时 tanh⁡(kh)→1\tanh(kh) \to 1。式子变得简单。

c=gk+σkρc = \sqrt{ \frac{g}{k} + \frac{\sigma k}{\rho} }

第一项是重力的份额。波长越长(kk 越小)它越大。第二项是表面张力的份额。波长越短(kk 越大)它越大。

两项方向相反。所以速度存在最小值。解 dc/dk=0dc/dk = 0 就得到速度最慢时的波长。

λ∗=2πσρg≈1.7 cm\lambda_\ast = 2\pi\sqrt{\frac{\sigma}{\rho g}} \approx 1.7\,\text{cm}

在这个波长上相速度约为 0.23 m/s,是最慢的一点。重力项和表面张力项在这里一样大。只留一边,这个谷就没了。

表面张力把液柱掐断的长度,也由同一组 σ\sigma、ρ\rho、gg 决定。液柱断成液滴的 Plateau–Rayleigh 把这个长度放在射流半径上看。

深水与浅水

如果水深远小于波长会怎样。当 khkh 很小时 tanh⁡(kh)≈kh\tanh(kh) \approx kh。忽略表面张力,速度会简单得惊人。

c=ghc = \sqrt{g h}

波长消失了。在浅水中所有波长以相同速度前进。没有色散。这种状态称为非色散(non-dispersive)。

海啸可怕的原因就在这里。在水深 4km 的海面上,gh\sqrt{gh} 可达每小时 700km。波长数百 km 的长波几乎保持形状,以喷气式飞机的速度奔驰。

波群比波更慢

现在回到开头的谜题。为什么单个波纹会超越波群。

波群,也就是波包(wave packet)移动的速度是群速度。定义为 cg=dω/dkc_g = d\omega/dk。它是与相速度不同的量。

来看深水中纯粹的重力波。ω=gk\omega = \sqrt{gk}。求导后结果很干净。

cg=dωdk=12gk=c2c_g = \frac{d\omega}{dk} = \frac{1}{2}\sqrt{\frac{g}{k}} = \frac{c}{2}

群速度恰好是相速度的一半。波群以自身波一半的速度爬行。所以每道波纹在波群后方生成,向前冲,在波群前缘消亡。

能量以群速度移动。以相速度前进的只是波峰的形状。下面来跟随一个黄色的波峰。

At c_g/c = 0.5 (deep-water gravity waves) the yellow crest clearly outruns the pink envelope and fades at the front. Set the ratio to 1 and the crest freezes inside the lump — nothing disperses.

把 c_g/c 设为 0.5,黄色波峰会超越粉色包络线(envelope,波群的外形)并在前方变淡。把比值升到 1,波峰就固定在波群内部。这是无色散波的样子。

用 Python 画色散曲线#

只要有色散关系式,相速度和群速度就能直接画出。群速度通过对 ω(k)\omega(k) 做数值微分求得。

import numpy as np
 
g, rho = 9.81, 1000.0          # 重力加速度[m/s^2]、水的密度[kg/m^3]
sigma = 0.072                  # 水-空气表面张力[N/m]
 
def omega(k, h):
    return np.sqrt((g * k + sigma * k**3 / rho) * np.tanh(k * h))
 
def phase_speed(lam, h):
    k = 2.0 * np.pi / lam
    return omega(k, h) / k
 
def group_speed(lam, h):
    k = 2.0 * np.pi / lam
    dk = k * 1e-5                       # 用中心差分求 domega/dk
    return (omega(k + dk, h) - omega(k - dk, h)) / (2.0 * dk)
 
lam = np.geomspace(1e-3, 10.0, 400)    # 1mm ~ 10m,假设为深水
c = phase_speed(lam, h=100.0)
i = int(np.argmin(c))
print(f"最小相速度 {c[i]:.3f} m/s @ 波长 {lam[i]*100:.2f} cm")
# 最小相速度 0.232 m/s @ 波长 1.73 cm
 
lam_swell = 2.0                        # 2m 涌浪: 重力主导
cp = phase_speed(lam_swell, 100.0)
cg = group_speed(lam_swell, 100.0)
print(f"相 {cp:.3f} m/s, 群 {cg:.3f} m/s, 比 {cg/cp:.3f}")
# 相 1.767 m/s, 群 0.884 m/s, 比 0.500

最小相速度和手算一致。波长 1.73cm 处是 0.232 m/s。和正文里的 1.7cm、约 0.23 m/s 是同一个谷。2m 涌浪的相速度 1.767 m/s,群速度 0.884 m/s,比值 0.500。1.767 的一半是 0.8835,和输出的 0.884 在小数第三位相遇。这个波长上重力项远远压过表面张力,所以 cg=c/2c_g = c/2 原样成立。

最慢的那个波长不是这样。那里 g/kg/k 和 σk/ρ\sigma k/\rho 一样大。若把它当成纯重力波、把群速度锁死在一半,1.7cm 细波的能量速度就会放错。比值 0.500 只在重力已经占满的波长上成立,比如 2m 涌浪。

浅水是另一头。c=ghc = \sqrt{g h} 里没有 kk。对 ω=ck\omega = c k 求导得到 cg=cc_g = c。波峰和波群一起走。水深 4km 时这个速度是每小时 700km。把深水的一半规则套到这种波上,能量的位置会偏出一倍。

丢掉水深却套用 c/2,能量就会迟到#

打水漂的圆环接近深水。波峰以相速度跑,波群以一半的速度爬。圆环前缘波纹消失,就是这个差。

水深落到波长以下,这张图就该丢掉。速度只剩 gh\sqrt{gh},群速度和相速度相同。留哪一项,和雷诺数用长度切开流动世界是同一种比较。这里比的是水深、波长,还有 1.7cm。

如果对您有帮助,请分享。