使用 Linux 获得良好振动
振动和波动描述了许多不同的物理系统。事实上,大多数耗散能量的系统都是通过某种形式的波来实现的。在本文中,我将介绍 gvb (Good ViBrations, http://www.pietrobattiston.it/gvb),这是一个 Linux 应用程序,您可以使用它来可视化和建模波动和振动。
安装应该相对容易。它应该已经存在于大多数发行版的软件包系统中。例如,在基于 Debian 的系统上,您可以使用以下命令安装它
sudo apt-get install gvb
您会注意到还安装了大量的 Python 要求。这让您了解如果您想从源代码构建 gvb,您需要哪些要求。
现在您已经安装了 gvb 及其要求,您可以通过运行命令 gvb
来启动它。启动后,您将看到一个主显示窗口,右侧有一个窗格,其中包含计算选项。在主窗口中,将有一个起始正弦波形。

图 1. 当您首次启动 gvb 时,您将看到一个正弦波,可以开始建模。
为了确保一切正常,您可以单击右侧窗格中的“开始”按钮。这将启动用于建模波动的计算,并在主显示窗口中显示每个时间步。您应该看到基本正弦波的演变过程。
让我们使用这个起始波形来尝试一些可用的计算选项。第一个选项是波的速度。您可以在波被建模和动画化的同时更改它,这样您就可以实时看到波的速度变化。
在“开始”按钮下方有三个可用选项。“计算”下拉菜单允许您更改用于进行计算的算法。默认值为 eig,其他三种方法是 quad、naif 和 naif 矩阵。当您选择其他三种方法中的任何一种时,窗格顶部的“步长”选项将变为活动状态。
然后,您可以更改用于计算波动的步长大小。您可以设置每秒显示的帧数。此值越高,您的波浪动画将越流畅。您可能不会注意到超过每秒 30 帧的任何改进,这仅仅是由于人类视觉的限制。
最后一个选项允许您更改实际在显示器中渲染的图形。“波”显示波形本身。“温度”显示一个颜色图,用不同的颜色表示振幅。“速度”显示波形,如“波”,但它还包括沿着波的一系列条,指示波上这些点的速度大小。此显示有助于学生了解波的不同部分移动的速度。
在继续之前,值得花几分钟时间粗略了解一下 gvb 可以进行的计算类型。默认的计算方法是 eig。此方法实际上使用了 NumPy 的 linalg 部分中的 eig()
函数。这使用平面波展开方法来获得问题的特征值公式并解决它。
naif 计算方法是一种朴素的方法。它只是获取波在某一点的当前振幅,并根据该点当前速度的线性应用来计算它应该传播多远。
naif 矩阵方法只是尝试通过将波视为向量而不是逐点来加速 naif 方法。这两种方法都不应该用于任何其他原因,除了看看它们有多糟糕。
最后一种方法是 quad。此方法在 naif 方法的简单速度计算基础上进行了扩展,采用了一种更准确的方法。在大多数情况下,您只需使用 eig 方法,因为它在大多数情况下是最准确的。
到目前为止,我只讨论了弦上的正弦波。但是,当您可以查看其他起始波形时,会发生真正有趣的事情。在菜单项“Disposition→1 维度:预设”下,您可以找到一系列预编程的波形。在这里,您将找到十几个以上的可用选项。
您可能还注意到,还有一个用于二维预设选项的条目。没错,gvb 也可以模拟膜上的波。

图 2. 您甚至可以使用 gvb 模拟膜上的波。
如果您选择其中一个预设选项,您应该注意到图形选项已更改为 3-D,并且绘图类型已从绳索更改为膜。单击“开始”按钮将显示起始波形如何在给定的膜上传播。在“Disposition”菜单项下,还有用于高级一维和二维系统的条目。选择其中一个将弹出一个新窗口,您可以在其中设置您自己的模型的各种参数。

图 3. 高级窗口允许您创建自己的自定义波形。
您仍然仅限于正弦波、三角波、方波和峰值波作为基本形式。如果您有更复杂的东西,您实际上可以在文本文件中定义每个点的振幅和速度。例如,要模拟弦,文本文件将有三行。第一行将包含形状——在本例中,是沿弦的点数。第二行将包含一系列以逗号分隔的振幅值,每个点一个。第三行将包含一系列以逗号分隔的速度值,每个点一个。接下来,您需要在文件末尾添加一个换行符。然后,您可以将其读入 gvb 以提供您的起始波形。这为您提供了最大的灵活性。如果您想模拟膜而不是弦,您可以执行等效的二维输入文件。
您可能想要使用 gvb 做的最后一件事是生成您正在建模的波的电影。选择菜单项“选项→将帧另存为 png”将弹出一个文件选择窗口。您需要选择一个目录来存储动画每帧的所有图像文件。完成此操作并单击“开始”按钮后,将为每帧写出一个 PNG 文件。为了从这些文件中生成电影,您需要在系统上安装 FFmpeg。然后,您只需将目录更改为 gvb 正在写出这些图像文件的位置,并运行命令
ffmpeg -i *.png video.mp4
现在您有了一个视频文件,您可以共享它来展示您正在建模的波的演变。
正如您所看到的,gvb 可以是一个非常有趣的应用程序。它尤其让学生对波在一维和二维中的行为方式有了更直观的感受。可视化各个部分速度的能力也有助于概念化所涉及的物理原理。希望那里的教师在计划他们的下一堂科学课时会记住 gvb,以帮助学生理解波动 mechanics。