FreeMat—又一个 MATLAB 替代品

作者:Joey Bernard

许多程序试图作为 MATLAB 的替代品。它们的功能各不相同——有些扩展到 MATLAB 中可用的功能之外,另一些则提供专注于某些问题领域的功能子集。在本文中,让我们看看另一个可用的选项:FreeMat。

FreeMat 的主要网站托管在 SourceForge 上。对于大多数 Linux 发行版,安装应该像使用您友好的邻居软件包管理器一样容易。FreeMat 也可作为源代码以及 Windows 和 Mac OS X 的安装包提供。安装完成后,您可以继续启动它。这将弹出一个主窗口,其中包含一个工作控制台,该控制台应显示 FreeMat 的许可信息(图 1)。

图 1. 当您首次启动 FreeMat 时,您会得到一个全新的控制台。

与大多数像 FreeMat 这样的程序一样,您可以立即进行算术运算。所有算术运算都被重载为根据操作数的数据类型自动执行“正确的操作”。核心数据类型包括整数(8 位、16 位和 32 位,有符号和无符号)、浮点数(32 位和 64 位)和复数(64 位和 128 位)。除此之外,还有一个核心数据结构,实现为 N 维数组。N 的默认值为 6,但可以是任意值。此外,FreeMat 支持异构数组,其中不同的元素实际上是不同的数据类型。

FreeMat 中的命令是基于行的。这意味着当您按下 Enter 键时,命令完成并执行。一旦您这样做,命令就会运行,并且输出会立即显示在您的控制台中。您应该注意到,未保存到变量的结果会自动保存到名为“ans”的临时变量中。您可以使用此临时变量来访问和重用以前命令的结果。例如,如果您想找到边长为 3 的立方体的体积,您可以这样做


--> 3 * 3
ans =
 9
--> ans * 3
ans =
 27   

当然,更快的方法是这样做


--> 3 * 3 * 3
ans =
 27

或者,您可以这样做


--> 3^3
ans =
 27

如果您不想用中间计算的输出弄乱您的控制台,您可以告诉 FreeMat 通过在行尾添加分号来隐藏该输出。因此,与其这样


--> sin(10)
ans =
   -0.5440

您会得到这样


--> sin(10);
-->

FreeMat 中的赋值使用等号运算符 (=) 完成。变量名称是无类型的,因此您可以在工作表的各个部分为不同的数据类型重用相同的名称。例如,您可以将 tan(10) 的值存储在变量 a 中,将 2 乘以 a 的值存储在变量 b 中,使用


--> a = tan(10)
a =
    0.6484
--> b = 2 * a
b =
    1.2967

请注意,您当前会话中活动的变量都列在左侧的变量窗口中(图 2)。

图 2. 所有当前变量及其值和数据类型都列在变量窗口中。

当涉及到与数组交互时,算术运算符也会被重载。例如,假设您想要获取数组的所有元素并将它们加倍。在像 C 或 Fortran 这样的低级语言中,您需要编写相当多的代码来处理循环遍历每个元素并将其乘以 2。在 FreeMat 中,这就像这样简单


--> a = [1,2,3,4]
a =
 1 2 3 4
--> a * 2
ans =
 2 4 6 8

如果您习惯了 Python 编程语言中的 NumPY 之类的东西,这应该看起来非常熟悉。索引数组使用方括号完成。FreeMat 使用从 1 开始的索引,因此如果您想获取第二个值,您将使用


--> a(2)

您还可以使用相同的表示法设置特定索引处的值。因此,您可以使用以下命令更改第三个元素的值


--> a(3) = 5

这些数组都需要具有相同的数据类型。如果您需要元素的异构列表,这称为单元格数组。单元格数组使用花括号定义。因此,您可以使用以下命令设置姓名和电话号码矩阵


--> phone = { 'Name1', 5551223; 'name2', 5555678 }

这里引入了两个新的语法。第一个是如何定义字符串。在 FreeMat 中,字符串用一组单引号表示。因此,此单元格数组中有两个字符串。第二个新语法项是在数组定义中使用分号。这告诉 FreeMat 您正在移动到新的一行。本质上,您现在正在创建矩阵而不是数组。

FreeMat 中的绘图类似于 R 或 matplotlib 中的绘图。图形函数分为高级函数和低级函数。最基本的高级函数是 plot()。此函数被重载以尝试根据输入执行正确的操作。一个基本的例子是绘制正弦函数


--> t = -63:64;
--> signal = sin(2*pi*t/32);
--> plot(t, signal)

这将弹出一个新窗口来包含绘图函数的结果(图 3)。然后,您可以使用低级函数来更改这些绘图。例如,您可以使用以下函数设置图形的标题


--> title('This is my plot')

图 3. 图形在其自己的窗口中生成和显示。

有许多底层函数可以更改您图表几乎所有的元素。

FreeMat 尝试擅长的一个过程是使最终用户可以轻松导入外部代码。 import 函数用于从外部库导入函数,并使其像任何其他 FreeMat 函数一样可用。 import 函数的签名是


import(libraryname,symbol,function,return,arguments)

这样,如果您有一些已经用 C 编写和调整过的代码以获得最佳性能,您可以简单地导入它并在 FreeMat 中使用它,而无需太多麻烦。

由于 FreeMat 与 MATLAB 或 Octave 功能相当,您可以认为我在这里几乎没有涵盖 FreeMat 提供的所有功能。 希望您已经看到了足够激发您兴趣的内容,并将抽出一些时间去探索更多。

资源

加载 Disqus 评论