本文译自作者的韩语原文。 阅读原文(한국어)
单个波纹比波群跑得快 — 波的色散与群速度
能量跟着包络走,不跟着单个波峰。水深一旦小于波长,这种错位就消失,只剩一个速度。
往平静的湖面扔一颗石子。波纹画着圆环向外扩散。这一点谁都知道。
可是仔细看这个圆环,会发现有些奇怪。每一道波纹都在圆环的后方生成。向外奔跑。然后在圆环的前缘消失。波群缓慢地扩大,而其中的波纹却超越波群向前。
每个波长各走各的速度,这就是色散(dispersion,按波长的速度差异)。单个波和一群波各有各的速度,那个差值叫群速度(group velocity)。石子的圆环看起来别扭,原因就在这里。
把表面张力 σ 的滑块拉向 0,左侧的毛细波分支会消失,曲线最低点会往短波一侧挪。
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)。
其中 是角频率, 是波数(单位长度内的波的个数), 是波长, 是重力加速度, 是表面张力, 是密度, 是水深。
单个波前进的速度是相速度(phase velocity)。定义为 。
关键在于 依赖于 ,也就是依赖波长。波长不同,速度就不同。这就是色散。声音,以及真空中的光,无论波长如何速度都相同。水面波并非如此。
重力与表面张力的拉锯
来看深水。当 很大时 。式子变得简单。
第一项是重力的份额。波长越长( 越小)它越大。第二项是表面张力的份额。波长越短( 越大)它越大。
两项方向相反。所以速度存在最小值。解 就得到速度最慢时的波长。
在这个波长上相速度约为 0.23 m/s,是最慢的一点。重力项和表面张力项在这里一样大。只留一边,这个谷就没了。
表面张力把液柱掐断的长度,也由同一组 、、 决定。液柱断成液滴的 Plateau–Rayleigh 把这个长度放在射流半径上看。
深水与浅水
如果水深远小于波长会怎样。当 很小时 。忽略表面张力,速度会简单得惊人。
波长消失了。在浅水中所有波长以相同速度前进。没有色散。这种状态称为非色散(non-dispersive)。
海啸可怕的原因就在这里。在水深 4km 的海面上, 可达每小时 700km。波长数百 km 的长波几乎保持形状,以喷气式飞机的速度奔驰。
波群比波更慢
现在回到开头的谜题。为什么单个波纹会超越波群。
波群,也就是波包(wave packet)移动的速度是群速度。定义为 。它是与相速度不同的量。
来看深水中纯粹的重力波。。求导后结果很干净。
群速度恰好是相速度的一半。波群以自身波一半的速度爬行。所以每道波纹在波群后方生成,向前冲,在波群前缘消亡。
能量以群速度移动。以相速度前进的只是波峰的形状。下面来跟随一个黄色的波峰。
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 画色散曲线#
只要有色散关系式,相速度和群速度就能直接画出。群速度通过对 做数值微分求得。
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 在小数第三位相遇。这个波长上重力项远远压过表面张力,所以 原样成立。
最慢的那个波长不是这样。那里 和 一样大。若把它当成纯重力波、把群速度锁死在一半,1.7cm 细波的能量速度就会放错。比值 0.500 只在重力已经占满的波长上成立,比如 2m 涌浪。
浅水是另一头。 里没有 。对 求导得到 。波峰和波群一起走。水深 4km 时这个速度是每小时 700km。把深水的一半规则套到这种波上,能量的位置会偏出一倍。
丢掉水深却套用 c/2,能量就会迟到#
打水漂的圆环接近深水。波峰以相速度跑,波群以一半的速度爬。圆环前缘波纹消失,就是这个差。
水深落到波长以下,这张图就该丢掉。速度只剩 ,群速度和相速度相同。留哪一项,和雷诺数用长度切开流动世界是同一种比较。这里比的是水深、波长,还有 1.7cm。
相关文章
如果对您有帮助,请分享。