一项软件或者技术可能出现较早,但成熟应用或者受到重视往往需要经过较长时间,一方面是因为软件本身的稳定性有时间规律性,另一方面则是因为人们对于某个事物的接受需要过程性。随着博主研究的深入和各种阅历的增长,对于轻量级软件的爱好日益加深。它们能够完成大型软件的部分功能,且满足用户需求,专注于某个技术领域。Scilab是一款较为知名的开源软件,从易用性和易安装性等方面考虑,可以作为工程师或科研工作者的一个重要手段,替换复杂的MATLAB。
随着科学技术的普及发展,以及计算机应用进入各个领域,使用科学计算软件已经变成越来越常规的工作。在这样的背景下,MATLAB(主要是基于数值式计算)、MAPLE(主要是基于符号式计算)等科学计算软件得到了迅猛发展。SCILAB 是由法国国家信息、自动化研究院(INRIA)的科学家们开发的“开放源码”软件。SCILAB 一词来源于英文“Scientific Laboratory"(科学实验室)词头的合并。与MATLAB类似,SCILAB也是一种科学工程计算软件,其数据类型丰富,可以很方便地实现各种矩阵运算与图形显示,能应用于科学计算、数学建模、信号处理、决策优化、线性/非线性控制等各个方面。它还提供可以满足不同工程与科学需要的工具箱,例如SCICOS,信号处理工具箱,图与网络工具箱等。可以说,就基本的功能如科学计算、矩阵处理及图形显示而言,MATLAB能完成的工作SCILAB都可以实现。由于SCILAB的语法与MATLAB非常接近,熟悉MATLAB编程的人很快就会掌握SCILAB的使用。有意思的是,SCILAB提供的语言转换函数可以自动将用MATLAB语言编写的程序翻译为SCILAB语言。目前,SCILAB除了WINDOWS与NT版本外,还有多种UNIX或LINUX下的版本,如SGI MIPS Irix, PC Linux, Sun Sparc stations(SunSolaris) 等。
这里通过两个方面来初步介绍Scilab,其它复杂功能在此基础上非常容易读懂,且Scilab官方网站上提供了大量的文档和示例,开发生态链较为完备。
基本命令
由于Scilab主要针对向量和矩阵进行分析和运算,所以基本命令主要围绕着与它们相关的内容展开。
(1)简单数据处理
例1,生成向量和矩阵。
v=ones(1,120)
M=ones(5,5)
Scilab中生成矩阵和向量的方法有很多,例1中使用的是ones这个函数,生成全1元素的函数,还有zeros函数,生成全0元素的函数,rand函数,生成随机元素的函数。
例2,采用rand函数生成一个向量和矩阵,然后寻找其中的最大值和最小值。
v=rand(1,10)
M=rand(5,5)
max(M)
min(v)
对于常见的实验数据,通常采用向量来保存这些实验数据,实际中可以采用Scilab中的均值函数mean和标准方差函数stdev来分析这些实验数据。
例3,简单分析向量储存的实验数据。
mean(v)
stdev(v)
(2)Scilab编程
为了便于统一维护和实现数据分析的独立性,通常针对一批数据的处理书写一个Scilab处理脚本,这个脚本的书写就是Scilab里面的编程,它的若干语句类似于C语言,具备很强的可操作性,建议尽量采用这种方式来使用Scilab,减少后期的维护难度,提高可复用性。
例4,列举一个典型的Scilab脚本的内容。
// Data
x = -1:0.1:1;
y = -1:0.1:1;
[X,Y] = meshgrid(x,y);
Z = X.^2 + Y.^2;
// Plot
scf(14);
clf(14);
xset("colormap",jetcolormap(4));
surf(X,Y,Z);
xlabel('X');ylabel('Y');zlabel('Z');
上面列举的便是一个典型的Scilab编程脚本,里面包含了数据及其对数据的操作,每次只需要在Scilab的命令终端执行该脚本就可以得到相同的结果,并绘制出相应的图像,后续也可以修改该脚本,完成更复杂的任务。
(3)矩阵运算
Scilab中基本的矩阵运算与Matlab类似,实际工程运用中可以大量使用算术操作或矩阵函数,简化数据分析和处理的困难。2D网格
例1,可以轻易实现对2D曲线的绘制,例如绘制图形。采用如下的程序文件实现对曲线的绘制:
clear
x = linspace(-5,5,51);
y = 1 ./(1+x.^2);
plot(x,y,'o-b');
绘制出来的基本二维曲线为:
例2,在例1的基础上增加如下语句,添加2D曲线的网格。
xgrid(5, 1, 7)
在计算流体力学(CFD)和核反应堆计算中经常需要绘制2D情况下的流函数分布和中子通量分布,所以这里也简单通过实例介绍一下关于Sgrayplot函数的使用。
例3,使用Sgrayplot绘制二维平面的流函数分布。已知二维平面均匀化的网格点上的流函数值,采用矩阵方式进行存放,这里将使用Scilab内置的Sgrayplot函数来进行绘制。
zm = min(FV); zM = max(FV)
xset("colormap",jetcolormap(64))
colorbar(zm,zM)
Sgrayplot(x, y, FV)
相应的二维平面流函数分布如下图所示。
小结
推荐材料
[1] Campbell S L, Chancelier J P, Nikoukhah R. Modeling and Simulation in SCILAB[M].Springer New York, 2006.
[2] Van Zutven P W M. Scilab as an alternative for Matlab[J]. 2006.
[3] Baudin M. Floating point numbers in Scilab[J]. 2011.