使用 Extrema 制作极限图形
高能物理实验倾向于生成大量数据。虽然这些数据会通过分析软件进行处理,但通常您可能想要做的第一件事是将其绘制成图表,看看它实际上是什么样子。为此,一个强大的绘图程序是绝对必要的。一个可用的软件包叫做 Extrema (http://exsitewebware.com/extrema/index.html)。Extrema 是从一个名为 Physica 的早期软件包发展而来的。Physica 是在加拿大不列颠哥伦比亚省的 TRIUMF 高能中心开发的。它既有完整的图形界面,用于交互式数据分析,也有命令行语言,允许您以批处理方式处理更大的数据集或重复性任务。
安装 Extrema 通常只需使用您发行版的软件包管理器即可。如果您想要源代码,可以在 SourceForge 网站 (http://sourceforge.net/projects/extrema) 上找到。在 SourceForge 上,还有一个 Windows 版本,以防您不得已使用这样的操作系统。
一旦它安装在您的 Linux 机器上,启动它就像输入 extrema
并按 Enter 键一样简单。启动时,您应该看到两个窗口:一个可视化窗口和一个分析窗口(图 1)。最重要的按钮之一是帮助按钮。在分析窗口中,您可以通过单击问号将其调出(图 2)。在帮助窗口中,您可以获得关于 Extrema 中所有可用函数和运算符的更详细信息。

图 1. 启动时,您会看到一个空白的可视化窗口和一个分析窗口。

图 2. 帮助窗口提供关于 Extrema 中所有可用函数、运算符和命令的信息。
Extrema 提供 3-D 等高线图和密度图。对于 2-D 图形,您可以控制几乎所有功能,如轴、绘图点、颜色、字体和图例。您还可以从 Extrema 内部进行一些数据分析。您可以进行各种类型的插值,如线性、拉格朗日或 Fritsch-Carlson 插值。您可以将方程拟合到您的数据,最多可有 25 个参数。Extrema 包含完整的脚本语言,包括嵌套循环、分支和条件语句。您可以写出文本编辑器中的脚本,也可以使用自动脚本编写模式,将您的点击操作转换为等效的脚本命令。
您需要做的第一件事是将您的数据导入 Extrema。数据存储在变量中,并通过变量的名称引用。变量名称的第一个字符必须是字母,且长度不能超过 32 个字符。除了这些限制外,变量名称可以包含任何字母或数字字符、下划线或美元符号。与 Linux 中的大多数事物不同,变量名称不区分大小写。请记住,函数名称是保留的,因此您不能将它们用作变量名称。
字符串变量可以包含单个文本字符串或文本字符串数组。数值变量可以包含单个数字、向量(1-D 数组)、矩阵(2-D 数组)或张量(3-D 数组)。所有数字都存储为双精度实数值。与大多数其他编程语言不同,这些数组的索引从 1 开始,而不是 0。这些数组的大小没有限制,除了机器上可用的内存量。在 Extrema 中索引数组可能很有趣。如果您想要数组 x 的第八个元素,您可以简单地使用 x[8]
引用它。您可以使用 x[8:10]
获取元素 8、9 和 10。这些索引可以替换为表达式,因此您可以使用 x[2^3]
获取第八个元素。
还有一些特殊字符可以在索引数组中使用。语句 x[*]
引用向量中的所有值。如果您想要最后一个元素,可以使用 x[#]
。倒数第二个元素可以使用 x[#-1]
引用。
您可能将所有数据存储在文件中。最简单的文件格式是逗号分隔的值列表。Extrema 可以读取这些类型的文件,并将数据直接存储到一组变量中。如果您的文件有两列数据,您可以使用以下语句将它们加载到两个变量中
READ file1.dat x y
您还可以读取所有数据并将其存储到单个矩阵中,使用
READ\matrix file1.dat m nrows
为了做到这一点,您需要提供正在读取的行数。您还可以生成数据以用于分析。如果您只需要一系列数字,您可以使用
x = [startval:stopval:stepsize]
这将为您提供一个数字数组,从 startval
开始,以 stepsize
递增,直到达到 stopval
。您也可以使用 GENERATE
命令来执行此操作。GENERATE 命令还将生成一个随机数数组,使用
GENERATE\RANDOM x min max num_points
Extrema 拥有所有标准函数,如各种类型的三角函数。标准算术运算符有
-
+ — 加法
-
- — 减法
-
* — 乘法
-
/ — 除法
-
^ — 指数运算
-
() — 项的分组
还有用于矩阵和向量运算的特殊运算符
-
>< — 外积
-
<> — 内积
-
<- — 矩阵转置
-
>- — 矩阵反射
-
/| — 向量并集
-
/& — 向量交集
还有一套完整的逻辑布尔运算符,给出真 (1) 或假 (0) 的结果。
现在您已经有了数据,并且已经了解了一些可用的基本函数和运算符,让我们来看看如何绘制这些数据的图形,并对其进行一些分析。最基本的图形类型是绘制一维数组。当您这样做时,Extrema 将数据视为 y 值,将数组索引视为 x 值。要查看实际效果,您可以使用
x = [1:10:1]
GRAPH x
这将绘制一条相当平淡的直线(图 3)。

图 3. 绘制值向量
要绘制二维数据,您可以使用
GRAPH x y
其中 x 和 y 是两个长度相等的向量。默认情况下,数据以实线连接。如果您希望数据是一系列不连接的点,您可以将点类型设置为负数,例如
SET PLOTSYMBOL -1
然后您可以继续绘制您的数据。
参数图也是可能的。假设您有一个名为 t 的自变量,它从 0 运行到 2*Pi。然后您可以使用以下命令绘制 t*sin(t) 和 t*cos(t)
t = [0:2*pi:0.1]
x = t * sin(t)
y = t * cos(t)
graph x y
这将给出图 4 中显示的图。

图 4. 绘制参数图
在科学实验中,您通常会对测量值存在一些误差值。您可以将其作为 graph 命令的额外参数包含在图形中,假设这些误差值存储在一个额外的变量中。因此,您可以使用
graph x y yerr
以获得一个漂亮的图。graph 命令有很多可用的选项(图 5)。

图 5. graph 命令有很多可用的选项。
更复杂的数据可以用三维图形绘制。有几种类型的 3-D 图形,包括等高线图和表面图。最简单的数据结构是矩阵,其中索引表示 x 和 y 值,矩阵中的实际数字是 z 值。如果这不起作用,您可以使用三个不同的向量来表示单独的 x、y 和 z 值,所有向量的长度都相同。最基本的等高线图可以使用以下命令制作
CONTOUR m
其中 m 是要绘制图形的值矩阵。在这种情况下,Extrema 将选择一些漂亮的等高线,创建合理的图形。
您可以使用 density 命令绘制相同数据的密度图,其中矩阵中的值被分配来自颜色映射的颜色,这就是绘制的内容。除非您另有说明,否则 Extrema 将尝试选择最适合您数据的颜色映射。表面图尝试在适当的透视图中绘制表面,以显示数据中 z 值定义的表面。
最后,让我们看一下更重要的分析步骤之一,将方程拟合到您的数据。科学的许多目的在于开发描述观测数据的方程,希望您随后能够预测在不同条件下会看到什么。此外,您可以通过查看拟合数据的方程结构来了解一些重要的潜在物理学知识。让我们看一下直线的简单拟合。假设数据存储在两个名为 x 和 y 的向量中。您还需要另外两个变量来存储斜率和截距。我们称它们为 b 和 a。然后您可以使用以下命令拟合您的数据
SCALAR\FIT a b
FIT y=a+b*x
然后,如果您想绘制直线拟合和数据,您可以执行以下操作
SET PLOTSYMBOL -1
SET PLOTSYMBOLCOLOR RED
GRAPH x y
SET PLOTSYMBOL 0
SET CURVECOLOR BLUE
GRAPH x a+b*x
现在您已经了解了 Extrema 可以做的基本知识,希望您能受到启发进一步探索它。它应该能够满足您的大多数数据分析需求,并且您可以享受使用与领先的粒子物理学家相同的工具的乐趣。