Scilab 入门

作者:Joey Bernard

介绍 Linux 上更大的科学实验室软件包之一。

Scilab 旨在成为一个全面的数值科学软件包,类似于 Maple、Matlab 或 Mathematica。尽管 Scilab 为各种科学计算提供了许多内置功能,但它还包括自己的编程语言,使您能够最大限度地利用这些功能。如果您愿意,您也可以使用这种语言将 Scilab 的功能扩展到全新的研究领域。一些功能包括 2D 和 3D 可视化和优化工具,以及统计函数。Scilab 还包括 Xcos,一个用于设计动态系统模型的编辑器。

有几种选项可用于在您的系统上安装 Scilab。大多数软件包管理系统都应该有一个或多个可用于 Scilab 的软件包,这些软件包还将安装几个支持软件包。或者,您可以简单地下载并安装一个 tarball,其中包含在您的系统上运行 Scilab 所需的一切。

安装完成后,使用 scilab 命令启动 Scilab 的 GUI 版本。如果您通过 tarball 安装 Scilab,则此命令将位于您解压 tarball 的 bin 子目录中。

首次启动时,您应该看到为您的项目创建的完整工作区。

""

图 1. 首次启动 Scilab 时,您将看到一个空的工作区,供您开始新项目。

左侧是文件浏览器,您可以在其中查看数据文件和 Scilab 脚本。右侧有几个窗格。顶部窗格是变量浏览器,您可以在其中查看工作区中当前存在的内容。中间窗格包含该工作区内的命令列表,底部窗格包含 Scilab 相关新闻的新闻源。工作区的中心是实际的 Scilab 控制台,您可以在其中与执行引擎交互。

让我们从一些基本数学开始——例如,除法


--> 23/7
 ans  =

   3.2857143

如您所见,命令提示符是 -->,您可以在其中输入要执行引擎执行的下一个命令。在变量浏览器中,您可以看到一个名为 ans 的新变量,其中包含计算结果。

除了基本算术之外,还有许多内置函数。需要注意的是,这些函数名称区分大小写。例如,语句 sqrt(9) 给出的答案是 3,而语句 SQRT(9) 返回错误。

还有用于数字(如 e 或 pi)的内置常量。您可以在语句中使用它们,例如使用此命令查找 pi/2 的正弦值


--> sin(%pi / 2)
 ans  =

   1.

如果您不完全记得函数名称是什么,但您记得它的开头,则可以使用 Scilab 控制台中的制表符补全功能。例如,您可以通过键入“fa”这两个字母,然后按 Tab 键来查看以“fa”开头的函数。

""

图 2. 使用制表符补全来避免在 Scilab 控制台中键入命令时出现拼写错误。

您可以使用“=”符号分配变量。例如,使用以下命令将您的年龄分配给 age 变量


--> age = 47
 age  =

   47.

然后您可以直接访问此变量


--> age
 age  =

   47.

该变量也将在变量浏览器窗格中可见。以这种方式访问变量基本上会执行该变量,这也是为什么您可以获得额外输出的原因。如果您只想查看值,请使用 disp() 函数,该函数提供如下输出


--> disp(age)

   47.

在继续更复杂的概念之前,您需要移出控制台。控制台的优点是语句立即执行。但是,这也是它的缺点。要编写更大的代码段,您需要使用随附的编辑器。单击“应用程序”→“SciNotes”菜单项以打开一个新窗口,您可以在其中输入更大的程序。

""

图 3. SciNotes 应用程序允许您编写更大的程序,然后在 Scilab 中将其作为一个单元运行。

完成代码编写后,您可以通过单击工具栏上的运行图标或选择“执行”菜单项下的选项之一来运行它。执行此操作时,SciNotes 会要求您先将代码保存到文件(文件扩展名为“.sce”)中,然后再运行。然后,它会使控制台使用以下命令运行此文件


exec('/home/jbernard/temp/scilab-6.0.1/bin/test1.sce', -1)

如果您在 Scilab 外部创建或接收 Scilab 文件,则可以使用类似命令自行运行它。

为了构建更复杂的计算,您还需要一种进行比较和循环多次计算的方法。可以使用以下方法进行比较


if .... then
   stmts
end


if .... then
   stmts
else
   stmts
end


if .... then
   stmts
elseif .... then
   stmts
else
   stmts
end

如您所见,ifelseif 行需要以 then 结尾。您可以根据您的特定情况设置任意数量的 elseif 部分。另请注意,整个比较块需要以 end 语句结尾。

还有两种类型的循环命令:for 循环和 while 循环。例如,您可以使用以下命令来查找前 100 个数字的平方根


for i=1:100
    a = sqrt(i) disp(a)
end

for 循环采用由 start:end 定义的数字序列,并且每个值都迭代地分配给虚拟变量 i。然后,您在 for 循环中包含代码块,并使用语句 end 关闭它。

while 循环类似,只是它使用比较语句来决定何时退出循环。

我要介绍的最后一个快速项目是 Scilab 中可用的绘图功能。您可以创建 2D 和 3D 图形,并且可以绘制数据文件或函数的结果。例如,以下代码绘制从 0 到 pi*4 的正弦函数


t = linspace(0, 4 * %pi, 100) plot(t, sin(t))

""

图 4. 调用 plot 函数会打开一个新的查看窗口,您可以在其中查看生成的图形。

您可以使用 linspace 命令生成函数将在其上执行的值列表。plot 函数打开一个新窗口来显示生成的图形。使用“编辑”菜单项下的命令来更改绘图的详细信息,然后再将结果保存到图像文件中。

您可以像绘制 2D 图形一样简单地绘制 3D 图形。以下代码绘制 0 到 4*pi 的参数曲线


t=linspace(0,4*%pi,100); param3d(cos(t),sin(t),t)

""

图 5. 生成 3D 图形与生成 2D 图形一样容易,如本参数曲线示例所示。

这也将打开一个新的绘图窗口来显示结果。如果默认视图不合适,请单击“工具”→“2D/3D 旋转”,并在选中此项后,右键单击图形并旋转它以获得更好的结果视图。

Scilab 是用于多种计算科学的非常强大的工具。由于它在 Linux、macOS 和 Windows 上都可用,因此如果您要与跨多个操作系统的其他人协作,这是一个不错的选择。它也可能被证明是在教学环境中使用的有效工具,让学生可以免费访问强大的计算平台,无论他们使用何种类型的计算机。我希望这篇短文为您提供了一些关于它可能对您有用的想法。我几乎没有介绍 Scilab 的许多功能,因此请务必访问主网站以获取许多优秀的教程。

加载 Disqus 评论