写一点基础的关于简谐波的基础知识,这部分的内容和记号很混乱,有必要整理一下。 这里不涉及到数值格式的色散耗散分析。

波函数

称定义在时空中的函数 \[ u(x,t) = A e^{i\phi(x,t)} \] 为波函数,其中\(\phi=\phi(x,t)\)是定义在时空中的相位函数:\(\phi: \mathbb{R}\times \mathbb{R}^+ \to \mathbb{R}\)

对于一般的相位函数,我们关注它对时空的偏导数:

  • \(k=k(x,t) := \phi_x \in \mathbb{R}\)称为波数,反映的是波在空间中的周期规律,可能与\((x,t)\)有关
  • \(w=w(x,t) := \phi_t \in \mathbb{R}\)称为相位速度,反映的是波在时间中的周期规律,可能与\((x,t)\)有关
  • \(c=c(x,t) := -\phi_t/\phi_x = - w/k \in \mathbb{R}\)称为波速,反应的是波在时空中的传播规律,可能与\((x,t)\)有关

\(A=A(x,t)\)是定义在时空中的复值函数:\(A: \mathbb{R}\times \mathbb{R}^+ \to \mathbb{C}\), 代表的是波函数的振幅和能量,初始时刻的相位也可能体现在其中。

还有很多相关的名词,实际上下文并不需要,这里只是列举一下:

  • 空间上的周期性:
    • \(k\) 波数
    • \(\lambda = \frac{2\pi}{k}\) 波长
  • 时间上的周期性:
    • \(w\) 相位速度,又称为角频率
    • \(T = \frac{2\pi}{w}\) 时间周期
    • \(f = \frac{w}{2\pi} = \frac{1}{T}\) 频率

简谐波

最简单的相位函数是波数和相位分别为常数的情形 \[ \phi(x,t) = k_0 x + w_0 t \] 称这种波函数为一个简谐波 \[ u(x,t) = \frac{A}{\sqrt{2\pi}} e^{i(k_0 x + w_0 t)} \] 这里使用\(k_0\)\(w_0\)来强调是一个常值。

我们关注简谐波的叠加,首先考虑有限个简谐波的叠加 \[ u(x,t) = \sum_{s=1}^N \frac{A_s}{\sqrt{2\pi}} e^{i(k_s w + w_s t)} \] 这里的\(A_s\)\(k_s\)\(w_s\)均取常值,关注每一个简谐波的波速(也是常值) \[ c_s = -\frac{w_s}{k_s} \] 如果各个简谐波的波速相等,叠加后的整体波形随着时间不会发生变化,而是整体以相同的波速传播,如左图 如果各个简谐波的波速不同,叠加后的整体波形随着时间就会不断变化,如右图,对应着物理现象中的色散(频散)。

这里顺便保存一下绘图的源码(由于代码根本不是重点,本文的所有代码都进行了折叠)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation


def get_wave(A, k, c):
w = -c * k

def func(x, t):
return A * np.sin(k * x + w * t)

return func

# same c
f1 = get_wave(A=1, k=1, c=1)
f2 = get_wave(A=1, k=2, c=0.5)
f3 = get_wave(A=1, k=3, c=0.9)
f4 = get_wave(A=1, k=4, c=1.4)

# different c
# f1 = get_wave(A=1, k=1, c=1)
# f2 = get_wave(A=1, k=2, c=0.5)
# f3 = get_wave(A=1, k=3, c=0.9)
# f4 = get_wave(A=1, k=4, c=1.4)


def update(frame):
t = frame / 10
x = np.linspace(0, 10, 100)
y = f1(x, t) + f2(x, t) + f3(x, t) + f4(x, t)

line.set_data((x, y))
ax.set_xlim(0, 10)
ax.set_ylim(-4, 4)
return line


fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ani = animation.FuncAnimation(fig=fig, func=update, frames=500)
ani.save("demo.gif")
plt.show()

对于固定时刻,这些简谐波在空间中的整体波形(包络线)也可能具有周期性规律, 例如考虑几个简谐波的叠加,它们的波数和波速都在一个固定值\(k_0\)\(c_0\)附近,但是存在一些小偏差,得到的结果如下图, 整体波形的包络线也会保持一定的结构进行传播,传播速度定义为群速度 \[ C(k) = - \frac{d w(k)}{d k} \]

(源代码如下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation


def get_wave(A, k, a):
w = -a * k

def func(x, t):
return A * np.sin(k * x + w * t)

return func


f1 = get_wave(A=1, k=1.0, a=1)
f2 = get_wave(A=1, k=1.06, a=0.99)
f3 = get_wave(A=1, k=0.98, a=1.01)


def update(frame):
t = frame
x = np.linspace(0, 100, 1000)
y = f1(x, t) + f2(x, t) + f3(x, t)

line.set_data((x, y))
ax.set_xlim(0, 100)
ax.set_ylim(-4, 4)
return line


fig, ax = plt.subplots()
(line,) = ax.plot([], [], lw=2)
ani = animation.FuncAnimation(fig=fig, func=update, frames=500)
ani.save("demo.gif")
plt.show()

色散

在物理中,不同频率的波在介质中传播时的规律通常体现为角频率与波数之间的关系: \[ w=w(k) \] 通常约定\(w(0)=0\),这个关系称为色散关系。注意到波速是定义两者之比的负值,因此有\(w(k) = -c(k) k\)

物理上的光波和声波是两个典型的例子: 人看见的光的颜色对应着不同的频率,由于光波在通常的介质中\(c(k)\)明显不为定值,不同频率的光波在传播时具有不同波速,叠加后的整体波形在传播时会不断发生变化,可以产生明显的色散效应(例如彩红)。 人听到声音的前提就是:机械波在通常的介质中传播时整体波形基本保持不变,也就相当于\(c(k)\)基本为定值,在日常环境中声波表现出较小的色散效应。

耗散

耗散在物理上直接的含义就是能量的损失,对于波函数而言 \[ E = \int_\Omega |u(x,t)|^2\,dx = |A|^2 m(\Omega) \] 因此关注的是\(|A|^2\)

  • 如果\(|A|^2\)与时间无关,代表着能量守恒
  • 如果\(|A|^2\)随着时间而减少,代表着能量在减少,就是耗散
  • 如果\(|A|^2\)随着时间而增大,代表着能量在增多,就是逆耗散

如果考虑的是一组波的叠加,那么耗散的定义也可以修改为:对每一个波都不增,并且至少对一个波减少。

微分系统中的波函数

我们考虑满足PDE的波函数所具有的传播规律,这也体现了PDE本身的性质,考虑两个最典型的PDE:

  • 常系数对流方程 \(u_t + \alpha u_x = 0\)
  • 常系数扩散方程 \(u_t = \beta u_{xx}\)\(\beta > 0\)

并且考虑的是一维区域,以\(2\pi\)为空间周期(这限制了波函数的波数\(k\)必须为整数,此时波长\(\lambda = \frac{2\pi}{k}\)才能和空间周期相协调)

对流方程

对于\(u_t + \alpha u_x = 0\),由于空间周期的限制,波数\(k\)必为整数,考虑如下的简谐波作为初值 \[ u(x,0) = e^{i k_0 x}, k_0 \in \mathbb{Z} \] 精确解易得 \[ u(x,t) = e^{i k_0(x - \alpha t)} = e^{i(k_0 x - \alpha k_0 t)} = A(x,t) e^{i \phi(x,t)} \] 因此相位函数 \[ \phi(x,t) = k_0 x - \alpha k_0 t \] 相位速度 \[ w(k_0) = -\alpha k_0 \] 波速 \[ c(k_0) = \alpha \] 振幅 \[ A(x,t) = 1 \]

因此波函数在传播时不会发生耗散和色散。

扩散方程

对于\(u_t = \beta u_{xx}\),由于空间周期的限制,波数\(k\)必为整数,考虑如下的简谐波作为初值 \[ u(x,0) = e^{i k_0 x}, k_0 \in \mathbb{Z} \] 精确解易得 \[ u(x,t) = e^{i k_0(x + \beta k_0 i t)} = e^{-\beta k_0^2 t} e^{i (k_0 x)} = A(x,t) e^{i \phi(x,t)} \] 因此相位函数 \[ \phi(x,t) = k_0 x \] 相位速度 \[ w(k_0) = 0 \] 波速 \[ c(k_0) = 0 \] 振幅(注意到\(\beta >0\)\[ A(x,t) = e^{-\beta k_0^2 t} \]

因此波函数在传播时波形不会移动,并且没有色散,但是存在明显的耗散效应。

一般PDE

考虑更一般的PDE \[ u_t = P u = \sum_{j=1}^n a_j \frac{\partial^j u}{\partial x^j} \] 其中\(a_i \in \mathbb{R}\),仍然以\(2\pi\)为空间周期。

取简谐波\(u(x,0)=e^{i k_0 x}\)为初值,其中\(k_0 \in \mathbb{Z}\),设精确解形如 \[ u(x,t) = e^{i (k_0 x + \widetilde{w}(k_0)t)} \] 注意这里的\(\widetilde{w}\)已经不是原本实值的相位速度,而是一个复值函数:实部对应的是相位速度,虚部对应的是振幅变化。

\[ \begin{aligned} i \widetilde{w} &= \sum_{j=1}^n a_j (i\, k_0)^j\\ \widetilde{w} &= - i \sum_{j=1}^n a_j (i\, k_0)^j \end{aligned} \]

复值表达式\(\widetilde{w}=\widetilde{w}(k_0)\)有时称为PDE的广义色散关系

如果已经解出\(\widetilde{w}=\widetilde{w}(k_0)\)的表达式,为了获取相位速度和振幅变化,需要拆分实部虚部 \[ \widetilde{w} = \text{Re} \widetilde{w}(k_0) + i\, \text{Im} \widetilde{w}(k_0) \Rightarrow \left\{ \begin{aligned} w(k_0) &= \text{Re} \widetilde{w}(k_0)\\ A &= e^{- \text{Im} \widetilde{w}(k_0) t} \end{aligned} \right. \]

一般的结论如下:

  • \(u_x\):不会对耗散和色散做出任何贡献
  • \(u_{xx}\)或者更高的偶数阶导数项:对耗散性有贡献,对色散性无贡献
  • \(u_{xxx}\)或者更高的奇数阶导数项:对色散性有贡献,对耗散性无贡献

例如对于\(u_t + \alpha u_{xxx} = 0\)\(\alpha \in \mathbb{R})\),代入可得 \[ \widetilde{w}(k_0) = \alpha k_0^3 \] 表达式只有实部,因此无耗散 \[ w(k_0) = \text{Re}\widetilde{w}(k_0) = \alpha k_0^3 \] 波速与波数有关,因此有色散 \[ c = -\frac{w(k_0)}{k_0} = - \alpha k_0^2 \]