本文共 25315 字,大约阅读时间需要 84 分钟。
scilab中文简介
2003年的时候就开始接触scilab,抽空翻译,自己写了一些学习体会,本来想写成一个完整的教程,可惜一直也没有完成,就先把未完成版放在这里吧,后面的章节,看情况吧.如果有人需要的话就写一写,没人用的话...
(我这有word版和pdf版的,如果有人想要的话,去lasg论坛画图软件版去找找,我发在那里了.================================================================
scilab简明介绍
---vertion:0.02左河疆 国家海洋局第一研究所~物理海洋室2006,7,19简短法律声明
对于本文档,任何人都可以免费得到、学习、使用、复制、传播,但务必请保证本文档的完整,以及作者之信息。 此外,未经许可,不得用于任何商业用途。原作者保留所有权利。如有问题,请与作者联系:关于本文档的最新版本,请关注:
水平有限,时间仓促,不足之处在所难免,还请大家多多指教,欢迎提供任何问题和建议:Chapter 1-scilab介绍一,简介 SCILAB是一个类似于MATLAB的免费的用于数值计算的科学计算软件,其功能强大操作,操作简便,目前它已经可以在WINDOWS、LINUX以及多种版本的UNIX上运行。SCILAB具有丰富的数据类型,不但包括一般的数据类型(整数,小数),还包括复数,向量数组,矩阵,多项式,有理式,字符,布尔型等,并可以进行相关的计算。 此外,SCILAB还具有大量的工具箱,比如求解常微分方程式、微分代数方程式的函数,Scicos动态系统模拟器,信号处理工具箱,传统控制及鲁棒控制,LMI优化,Metanet图形化表示,PVM并行,数据统计等工具箱,还具有与FORTRAN,C,Maple以及与 MuPAD 3.0及Tck/Tk 的接口等,此外,还可以根据需要加入自己的功能,基本可以满足一般的工作须要。 SCILAB具有强大的可视化能力,除可以进行一般的2D及3D绘图外,还可以产生简单的动画。与TCL/TK结合后,还可拥有GUI界面,进行一些自动化工作。对于程序高手,因为你可以得到SCILAB的源代码,你甚至可以自己改写SCILAB,做出自己的类似SCILAB的数学运算工来(关于这一部分,请阅读SCILAB的版权声明)!二,SCILAB的安装
1,LINUX下的安装: 首先从SCILAB官方网站:可以下载到LINUX下的二进制安装文件"scilab-4.0 binary file version for Linux";进入下载好的文件目录之后,以ROOT权限运行:tar --zxvf scilab-4.0.bin.linux-i686.tar.gz 以后设置好路径既可运行。2,WINDOWS下的安装:
在SCILAB官方网站下载"For Windows 9X/NT/2000/XP platforms"项下面的:Scilab-4.0 installer for binary version,然后双击文件即可开始安装。SCILAB不须要在系统中设置任何选项即可运行,是一个绿色软件,因此即使重装安装系统之后也不用重新安装。安装完之后就可以在开始菜单里点击"SCILAB"这一项来运行了。 也可以进入SCILAB所在目录scilab-3.0/bin目录中直接点击Wscilex来运行。3,编译源代码安装方法:
由于你可以download到scilab的源代码,因此你还可以使用源代码编译然后安装。这个办法比较麻烦,适合高手去钻研,这里不推荐。如果实在没有支持你的系统的precompiled binary版本,可以试一下这个办法。三,开始使用之前...
SCILAB的界面比较简明,只有一个主界面,在工作时,一般的操作全部在这个主界面里面进行。所有的变量输入、显示,都在这里。如果有其它的TCL/TK的GUI界面,或者新的图形界面,还会有其它的窗口。 1,界面 界面的样子如下,和一般的windows程序差不多: 2,菜单下面以SCILAB4.0为例,简单介绍一下菜单功能。一些常用的windows命令就不介绍了,例如print,exit,copy,paste等。File- Exec -执行一个脚本文件 Open -启用editpad打开指定的脚本文件 Load -从文件里装入变量 Save -把当前工作空间中的变量保存在文件里 Change -改变当前工作目录(可以在使用中用chdir()命令实现此功能) Get current directory-显示当前工作目录(与pwd(),pwd相同) Print -打印 Exit -退出程序Edit- Select all -选取所有内容 Empty clipboard-清空粘贴板中的内容 Preferences- Language -设置SCILAB的默认语言,目前有两种语言可以选择:英文和法文(建议大 家不要试,否则如果你不认识法文的话,改不过来就坏菜了)。 Colors -其中有Text,Background,Default三个子菜单,分别是设置显示的文字、 背景颜色,Default是重置颜色为系统默认。 Toolbar -显示或不显示工具条。 Files Association-设置由scilab打开的文件关联。 Chosce Font-设置文字字体。 Clear history-清空命令历史。 Clear command window -把主工作空间中乱七八糟的显示清空(与clc命令同)。 Console -启动一个控制台用以显示输出(这个东西在*NIX系统中会有用)。Control- Resume -从函数或脚本中退出。 Abort -从低层空间中退出。 Interrupt -中断当前运行,进入低层空间,这时在上一层中的变量全都可见(参见工作 空间一部分)Editor- 启动editpad。这是一个很好的scilab语法编辑器,由TCL/TK编写而成,非常棒。不过小心,这个东西有时候会死掉,注意保存你写的代码!!Application- Scicos -启动Scicos,好像是个仿真用的。 Editgraph -用于编辑SCILAB所产生的图形(4.0还不太好用!) M2sci -启动mfile2sci(),可以把一部分MATLAB的M脚本转换为SCILAB可以执行的脚本。一般的M文件还可以,不过要是复杂的不用说肯定会出问题。大家有兴趣可以试一下。 Browser variables-一直在郁闷SCILAB居然没法可视化看见自己工作空间中的变量,这下有了,不过与MATLAB的有些不一样,但是功能差不多,稍麻烦一点点吧。?- scilab help-启动HELP,最权威的Documents了,多数问题最后还是得找他! configure -设置SCIALB的HELP打开窗口类型。SCILAB可以有几种不同的HELP启动类型,可以选择OLD,这就和以前SCILAB2.7的帮助窗口差不多。要是选windows default browser,就是用浏览器打开帮助文件了。我一般都不动这个选项,SCILAB自带的帮助文件浏览器就不错 scilab demos-启动SCILAB的演示,这是一个很好的学习SCILAB的方法,如果你是新手的话,先点一下这个吧,看看SCILAB都能干些什么! web link -,指向几个网络上的连接,分别是: scilab web site -连到SCILAB的官方网站。 contributions -向scilab团队提供捐献。 report a bug or a request-如果发现SCILAB有什么问题或有什么新的要求,请务必 在此启动IE向SCILAB官方网站发送信息。(毕竟scilab还处于新生阶段,需 要大家提出问题才能改进。) scilab newsgroup-加入GOOGLE中SCILAB的newsgroup,目前(2006-7-17)已经可以使用,这里有不少人在用scilab。 about -显示一下Scilab的Log。3,主工作界面
在SCILAB主界面中,-->是提示符,告诉用户:"所有任务已经做完,等待下一条命令";如果是:-1->则表示,"当前任务未完成,处于中断状态,可以进行相关操作查看当前工作状态(比如查看变量的值)"。可以使用resume恢复。其中的1,是指当前运行的级别。主工作空间的级别最低为0,省略不显示。4,基本设置
设置工作目录 在SCILAB启动的时候,它默认的目录是SCILAB安装的目录。可以通过chdir函数来设置它的工作目录,这样新建的文件,就会默认存放在这里。并且可以自动调用在这个目录里面存放的函数。你可以在SCILAB的启动文件(scilab.star文件)里面最后加上这一句,这样每次你启动SCILAB的时候,就不用再更改你的工作目录了。记录命令历史
可以自动记录所以你所键入的命令,这在学习中是非常有用的,如果你忘记了刚才进行过什么操作,忘记了上一次你用SCILAB的时候都干过什么,可以用这个函数把你的命令历史记录在你所指定的文件里。具体方法是:--->diary("filename")这样就可以把所有的命令记录在名为"filename"的文件里。5,使用帮助
SCILAB功能浩如烟海,谁也无法记住所有的功能,在实际使用中,可以通过SCILAB自带的帮助系统获得自己所需的帮助,这一部分提供的帮助是最有用,最权威的。可以在命令提示符下,键入 help +空格+感兴趣的关键词来获得帮助。例如:-->help plot2d就会打开函数plot2d的帮助信息。在帮助中,出了底端的箭头外,还可以使用退格键的办法后退。如果想全文浏览SCILAB所带的help,还可以直接在命令行上键入help,就会打开总的帮助目录,可以查找自己所感兴趣的内容了。
6,关于系统环境
查看变量在工作中,如果涉及很多变量的话,有时会忘记一些变量是否存在,如果存在的话,又是什么类型,你可以通过whos(),who()这两个函数查询工作空间里都有哪些变量。比如:-->x=-2*%pi:0.01:2*%pi;-->whosName Type Size Bytesx constant 1 by 1257 10072whos function 7200help function 2160...你可以看见,现在工作空间里面已经多出了一个变量:x,它的类型是constant(常量),大小是1×1257,占用的空间大小是10072Bytes。 此外,这些命令都可以带几个参数,具体请查阅help文档。清除变量
对于自定义的变量,你可以用clear +变量名,或者clear(变量名)的方法把它清除掉,但是对于预定义的变量(系统变量),它们是不能清除的。工作空间
在SCILAB中,有一个“工作空间”的概念,好比楼层一样。假如在你现在的工作中,须要调用一个函数,则SCILAB自动转到函数中去,就像挖了一层地下室(打开了一个函数),在这一层中(函数的空间),你当前的变量全部是可见的(可以访问),但是它不能修改。它自己声明的变量,则为些函数所私有。就像放在地下室的东西一样,你在当前层不用关心,也看不见它(不可访问)。任务完成,则函数空间就被销毁了,仿若地下层又重新填成平地了一样。所有的它所用到的临时变量又都被系统没收了。下面举一个例子:-->function [z]=addxy(x) //这几步定义了一个函数addxy-->z=x+y-->t=4-->disp(y,"global y=")-->endfunction//定义结束-->y=5 y = 5.-->z=addxy(1) global y= 5. z = 6.可见在函数中可以访问上一层空间中的变量:y。反之,如果你这时在命令中打上:-->t !--error 4undefined variable : t 这说明在当前工作空间中,看不到函数自己声明的变量t。不过,SCILAB的函数有办法把自己声明的变量让下一次运行的函数看到的(记不记得fortran中save的用法?),只要在当前工作空间把变量声明为global,函数中使用global命令就可以改变这个变量了:
-->function [z]=addxy(x)-->global gt-->z=x+5-->gt=z-->endfunction-->gt gt = 0.-->y=addxy(6) y = 11.-->gt gt = 11. 可以发现,函数把当前工作空间中的变量gt的值从0改成了11。在脚本运行中,还可以使用这几个命令,在这里一并介绍:
pause:临时中断,可以使用resume恢复。resume:恢复被pause的脚本运行。abort:在pasue的时候,用这条命令可以跳出运行空间,如果函数出了错,比如说进入了一个无限循环。ctrl+c:强行中止当前运行。保存、读取变量
save("文件名")和load("文件名") 可以把当前工作空间的变量保存到一个文件里面去。假如今天太晚了,可是你的工作还没有完成,你可以把它们都保存在一个文件里面,关了机器,明天来了再接着干,所有的变量都恢复。这个命令甚至可以用在函数中。使用脚本
有时候完成一件工作,须要运行一系列的命令,这时最好把将要运行的命令写在一个文件里面,这样很方便。写完后,可以用exec("文件名")的方法执行"文件名"里面指定的脚本文件。如果是不是在函数里而是在主界面中,还可以把括号省略掉。清除屏幕
4.0版本已经可以使用clc命令清屏了,与matlab的用法一样。Chapter 2-基本语法 SCILAB的语法和MATLAB还有C都很像,你可以把一条语句写在一行上,然后按回车就可以执行,如果对于有很多显示的语句,你还可以在这条语句的末尾写上一个分号,这就告诉SCILAB:"不要把结果显示出来,我已经知道了"。平时用的时候要注意,scilab是大小写相关的。 如果想在一行内同时写上多条语句,可以使用逗号来分隔,这就和一条一条地写,每条语句最后都打这回车执行的结果是一样的,也会把结果显示出来。如果使用分号分隔,则不显示结果。 下面对基本语法做一个简单介绍。一,变量 在SCILAB中,是不用显示声明一个变量的。使用到的时候自动声明。它会自动根据所赋的值的类型调整变量的类型,你可以这样:-->a=5 a = 5.-->a="hello,everyone!" a =hello,everyone!这都是允许的。 注意:不用声明变量有好处也有坏处,好处是节省了你声明变量的功夫,坏处就是,如果你和代码很长,你常常会忘记这个变量是干什么的,用过没有!碰不到还好,碰到了可就很郁闷了!(如果是我,我宁可像pascal语言一样费些力气去声明,然后舒舒服服地去用我的变量,而不要像这样提心吊胆!)二,表达式 "表达式"可以是很多东西,只要是有返回值的东西,都可以。比如说一个常值5,它的返回值就是5,也可以是一个函数,函数有自己的返回值,还可以是别的东西。比如说,你可以这样:--->5这同样是一个合法的表达式,它的值就是5:ans = 5.三,赋值:变量=表达式 这里等号左边的必须是在运行时能够更改的东西---变量。如果你写上,3=5 这是什么意思呢?我很疑惑,scilab也一样疑惑。把3的值赋为5,这是什么意思呢?显然是不行的。但是你如果这样写:a=5 这样做有两重意思,先声明了一个变量叫做a,然后把它的值赋为常值5。四,注释: 在scilab中,可以使用像C++语言一样的注释方式(别和MATLAB的注释方法搞混了)。在一行中,两条斜杠”//”后面的就被认为是注释。Chapter 3-基本数据类型及运算
一,常量与变量运行期间值不变的数就是常数,比如5,6.5,5e+4,%pi,都是常数。运行期间值可以改变的就是变量。变量名应该是一个字母开头,后面跟0个到多个数字或字母。这和几乎所有编程语言的规定是一样的,就不多说了。如何查看变量size(变量名):可以返回变量的大小,如1X1,表示行数为一,列数也为一,其实就是一。typeof(变量名):返回变量的类型二,类型
整数、实数的表示与平时习惯完全相同,不多介绍了。 指数的表示方法是:基数e指数比如5e5,表示500000,也可以写成5e+5,是一样的。但如果是6.4e-5,表示0.000064,这里的负号就不能省略。 虚数的表示方法:7+0.7*%i表示一个实部为7虚部为0.7的复数。 BOOLEAN布尔型:只取两个值,真(%t)和假(%F) 字符型:用单引号或双引号包围起来的一串数字或字符。在SCILAB中,单,双引号均可以使用。比如:-->exec "mytest.sci"-->exec 'mytest.sci'-->exec("mytest.sci")都可以执行当前工作目录下的 "mytest.sci"文件。 多项式:可以这样定义多项式中的代数符号。下面是一个例子:-->s=poly(0,'s')://定义了一个代数符号s。还可以直接定义多项式:-->p=poly([1 2:3 4],'s')-->q=poly([1 2],'s','c')-->p+q ans = 2 - 1 - 3s + s 详细请看poly函数的说明。 定义了多项式后,才可以对其进行符号运算。 在SCILAB的INTRODUCTION(文件名为:intro.pdf)有很详细的说明。三,矩阵在SCILAB中,与MATLAB一样,所有的数都认为是矩阵!这样做会对之后的运算带来很多方便。关于矩阵的使用,请看下节。四,基本运算加减法:大多数数据类型都可以进行加减法运算。直接用加号就可以。乘除法:分别用*,/来表示,和我们普通的用法没什么不同。注意在矩阵的乖除法中,有“点乖/点除”和“叉乘/叉除”之分,分别是在.*,./。乘方、开方:乘方可以用一个"^"(向上的一个小箭头,在键盘的数字键6上)符号来表示,和C语言中的表示方法一样。至于开方,你当然可以使用乘方的办法来解决。如果是开平方,也可以使用函数sqrt。说明:对于矩阵的乘方、开方,要很小心应用。比如说,对于一个5x5大小的矩阵做乘方运算:-->a=1:25:-->a=matrix(a,5,5) a =! 1。 6。 11。 16。 21。 !! 2。 7。 12。 17。 22。 !! 3。 8。 13。 18。 23。 !! 4。 9。 14。 19。 24。 !! 5。 10。 15。 20。 25。 !-->a^2 ans =! 215。 490。 765。 1040。 1315。 !
! 230。 530。 830。 1130。 1430。 !! 245。 570。 895。 1220。 1545。 !! 260。 610。 960。 1310。 1660。 !! 275。 650。 1025。 1400。 1775。 !这和a*a的结果是一样的。注意,如果要想分别对矩阵中的元素做运算,应该这样:
-->a.^2
-->a.*a这里多了一个"点",意义完全不同。 诸如涉及矩阵的具体的运算,请看下面的关于矩阵的介绍。取对数运算:SCILAB中有专门的取对数的运算函数:log,log10,log2。五,特殊变量
如果你用who命令看一下工作空间存在的所有变量,你会发现即使你什么也没有干,空间中也会存在很多看起来不认识的东西,比如说,你看见的有可能是这样:-->whoyour variables are...... with_gtk with_tk demolist %helps LANGUAGE WSCI SCI MSDOS home PWD TMPDIR xdesslib with_texmacs percentlib polylib intlib elemlib utillib statslib alglib siglib optlib autolib roblib soundlib metalib armalib tkscilib tdcslib s2flib mtlblib %F %T %z %s %nan %inf COMPILER %gtk %pvm %tk %t %f %eps %io %i ... using 22038 elements out of 1000000。 and 67 variables out of 9231your global variables are...
的样子,这些%T,%F,%inf是什么呢?在SCILAB,为了工作的方便,它已经预先定义了一些可能要用到的值,比如说,你想要算一个圆的面积,你肯定要用到圆周率,每次你用到,你都得自己把它输入一遍,且不说你输入的时候会出错,而且为了达到一定的精度,就只看那么长的一串数字,就够可怕的。那个%pi,就是表示圆周率的。不信你在行上打上:-->%pi %pi = 3.1415927 这就是结果: 3.1415927!这些是预定义常量:%T,%t 布尔型 真 %F,%f 布尔型 假 %z,%s 常量 代数多项式中的字母 %nan 常量 不是一个数(代表:not a number的意思) %inf 常量 无穷大(scilab可以中的最大值) %eps 常量 无穷小(scilab可以察觉的最小值) %i 常量 虚数单位i %e 常量 自然对数单位e %pi 常量 圆周率此外,还有很多预定义值,比如
%gtk boolean 1 by 1 24%pvm boolean 1 by 1 24%tk boolean 1 by 1 24等,它们还有别的用途,暂时先不用管它。 预定义的变量,它们不能用clear 变量名的办法清除。六,高级特性:对象ObjectsChapter 4-矩阵
在SCILAB中,所有的变量的存储形式均为矩阵形式,这就是你为什么看到所有的变量大小的结果都是 "n by m"的形式(关于矩阵的定义,请大家自行查阅相关数学手册)。这里统一做一个简介。说明1:以下所有均以二维和一维为例,对于高维矩阵,操作完全一样,并无区别,但高维矩阵的乘除法令人费解,一般不用。如果读者对此有所经验,还请告之。说明2:对于一维数组,有时亦常称以“向量(vector)”,不予以区别。一,矩阵的存储 在SCILAB中,二维矩阵的排列方法是“列优先”的,也就是说,对于矩阵中的元素,存储的时候,是按列地进行的,先把第一列从上到下按顺序存储完,然后再存第二列。这与C,PASCAL中是不同的(C中则是“行优先”),而与fortran的存储方式相同。在SCILAB中,比如你写出一个矩阵:-->a=[1,2,3:4,5,6]的时候,如果再用-->b=matrix(a,1,6) //更改a的形状为1x6来查看,那么将会是b =! 1. 4. 2. 5. 3. 6. ! 的形式。而不是你所想的从1按顺序排到6。事实上,你还可以只用一个下标来访问一个二维数组的元素,打上:a(5),你看到了什么?-->a(5) ans = 3.如果你以前完全没有接触过FORTRAN,这里的下标尤其要注意,千万可别搞错。二,称疏矩阵
还有一类特殊的矩阵,叫做稀疏矩阵,它们的特点是很大,但是其中的大多元素的值为0。(本来这一小节应该放在上一节的,不过它有点特殊,放在上一小节难免看的时候就漏了,还是单独拿出来吧;) 称疏矩阵由于它的特点,实际上保存的时候并不是在内存中开出一块全部保存,因为其中有很多的0,那样的话,空间就浪费掉了。所以计算机其实只是保存了一个表,记下了不为0的元素的位置和这个元素的值。由于前辈们的贡献,我们用的时候完全不要考虑那么多,就和普通矩阵一样用就是了。下面简要介绍一下。 1,称疏矩阵的生成用sparse函数把一个普通矩阵转化为稀疏矩阵:-->m=zeros(100,100)-->m=sparse(m)tips:逆操作:full(),把一个稀疏矩阵转化为普通矩阵。直接生成稀疏矩阵:可以直接输入稀疏矩阵中的元素的方法来生成稀疏矩阵,用sparse(位置,值)的方法即可:-->row=[1 1 2 2 3 3 4]:-->col=[2 2 3 4 2 3 1]:-->i=[row',col']:-->val=[1 2 3 4 4 5 6]: val =! 1。 2。 3。 4。 4。 5。 6。 !-->m=sparse(i,val) m =( 4, 4) sparse matrix( 1, 2) 3。( 2, 3) 3。( 2, 4) 4。( 3, 2) 4。( 3, 3) 5。( 4, 1) 6。其它spones()可以用已有的稀疏矩阵产生非0元素均为1的稀疏矩阵speye():产生单位称疏矩阵,对角线上全为1,其它位置为0的稀疏矩阵spzeros():产生全0称疏矩阵sprand():产生稀疏随机矩阵查看稀疏矩阵的信息可以使用:spget()-->[i,v,dim]=spget(m) dim =! 4。 4。 !
v =! 3。 !
! 3。 !! 4。 !! 4。 !! 5。 !! 6。 ! i =! 1。 2。 !
! 2。 3。 !! 2。 4。 !! 3。 2。 !! 3。 3。 !! 4。 1。 !find():得到非0元素的下标
至于相关计算与操作,与一般的矩阵相同,大家要用的话,可以试一下。三,列表:矩阵的一个例外
列表:列表看起来就像一个一维的数组,不过区别是列表的元素可以是各种类型,而不用拘泥于一种类型。列表可以用list()函数来产生。列表的访问方法与一维数组一样,不再缀述。
四,矩阵的输入
如上所述,写法应该是:变量名=[…]的形式。在方括号里面,以分号表示一行的结束,同一行元素之间用逗号或者空格分开以示间隔。五,矩阵元素的访问 访问矩阵中的元素可以使用下列几种形式。直接使用变量作为列标、行标比如说如上例,想请问a的第二行第一个元素,则应写为:-->a(2,1) ans =4.使用数组作为下标
下标还可以指定为数组的形式:-->a([1,2],2) ans =! 2。 !
! 5。 !这样的意思就是,分别访问a(1,2),a(2,2),然后把结果组合成一个一维数组。使用BOOLEAN量下标
矩阵的元素甚至可以使用 BOOLEAN型矩阵来访问:-->a([%t %t]) ans =! 1。 !! 4。 !它的意思是和-->a([%t %t],%t)-->a([%t %t],1)一样,a([%t %t], 1)的意思是说,分别对行下标为1的元素,也就是a(:,1),与所指定的BOOLEAN矩阵做比较,如果矩阵的元素为%T,则输出,若为%F,则不输出。此外,在矩阵操作中,还有几个特殊变量可以使用。
1,如果要访问一行的末尾,除了可以用指定行,列的下标的方法外,还可以使用$(美元符号)来表示最后一个元素的下标。比如
-->a(1,$)//第一行的最后一个元素 ans =3.-->a($,$)//最后一行的最后一个元素 ans =6.-->a($)//把a视为一维,访问其最后一个元素 ans =6.如果用:-->a($:-1:1) ans =! 6。 !! 3。 !! 5。 !! 2。 !! 4。 !! 1。 !实现了元素的逆序访问。$:-1:1的作用是产生一个从$到1的向量,其间隔是-1。2,如果要访问一行(或一列)的全部元素,除了可以用所有下标来指定外,还可以
用:(冒号)来访问。比如-->a(1,1:3) ans =! 1。 2。 3。 ! 和-->a(1,1:3) ans =! 1。 2。 3。 !的结果是一样的。如果用:-->a(:) ans =! 1。 !
! 4。 !! 2。 !! 5。 !! 3。 !! 6。 !则得到了所以有元素,不过它们是以列排列的。总之,在SCILAB中,对矩阵的访问极为灵活,但也时常会出一些很奇妙的错误,犹如C语言中的指针一样,必须谨慎使用。
六,矩阵一般运算
加法、减法:同于一般的加减法操作,不多说了。如果是两个字符串相加,等同于把他们连接起来。减法则未定义。乘法:有“点乘”和“叉乘”之分。“叉乘”表示线代的数组乘法,“点乘”是对应元素相乘。* :“点乘”.* :“叉乘”(注意星号前面有个小点)^ :乘方运算除法:分为左除和右除:C=A/B :C=BA-1C=A/B :C=A-1B注意:乘除法必须小心,要满足可以操作的条件。七,矩阵的相关操作 矩阵的操作使用频繁,故在此做一简单介绍。也不那么多废话了,边举例边列出吧。生成矩阵--->A=1:6 //生成从1到6的线性数组,默认间隔为1-->A=1:0.5:6;//指定间隔-->A=linspace(1,5,7)//生成从1到5等间距分布长度为7的向量-->A=linspace(1,5)//不指定长度,默认为100-->A=logspace(1,5,7)//以10为底的对数分布,这里指定为7,不指定则默认为50-->A=ones(2,5)//各元素为1-->B=ones(A)//生成与A同形的各元素为1的矩阵。以下zeros,eye,rand等都可以这样用-->A=zeros(2,5)//各元素为0-->A=eye(5,4)//生成一个对角线上元素为1,其它元素为0的矩阵-->A=rand(5,4,'uniform')//生成0到1之间平均分布的随机数-->A=rand(5,4,'normal')//生成Gaussian(平均值为0均方值为1)的随机数-->matrix(A,2,3)//把Areshape为2 X 3的新矩阵-->B=[A',A']//由矩阵合并生成新的矩阵矩阵操作-
-->B=inv(A)//求A的逆矩阵-->B=A'//求转置-->diag(B)//求对角线上元素统计相关-
-->s=sum(A)/求和-->s=prod(A)//求积-->s=mean(A)//求平均-->max(B)//求最大值-->min(B)//求矩阵中最小值其它-
很多函数返回值即是一个矩阵,可以灵活运用。矩阵的元素可以是各种基本类型,包括: 复数矩阵 字符矩阵 多项式矩阵 布尔型矩阵等等。操作、运算的时候,应符合其对应的规则。高维的矩阵,声明的方法与二维的相似,例如:-->A=1:27;-->B=matrix(A,3,3,3)这是一个三维数组。更高维的数组不常用,如要使用,请查阅相关手册。Chapter 5-程序结构 对于很多问题,如果用人工监视程序的运行,然后再发出指令这样的办法,简直太慢了,不甚忍受。还好,SCILAB提供了完整的编程控制语句,你可以用它们编出完成复杂任务的脚本或者函数来。一,顺序结构 这个太简单了,你一行一行挨着写出来的就是顺序结构,哈!二,布尔表达式 因为下面要提到选择和循环结构,有必要先说一下布尔表达式。条件表达式的返回值应该是一个BOOLEAN型量,或者说,不管它是什么,总之它的值是个布尔型量就行了。例如,可以是一个布尔型变量,可以是一个运算式,它的结果是个布尔型,也可以是返回BOOLEAN型值的函数。 比如已经定义了一个BOOLEAN型函数 con (参数):-->function [z]=con(x)-->z=%T-->endfunction然后就可以调用这个函数了:-->t=1 t = 1。-->p=con(t) p = T可以看出,它的返回值是%T。也可以是一个BOOLEAN变量,比如:-->t=%T t = T 还可以是一个表达式,比如:-->6==6
ans = T或者:-->t=(6==6) t = T注意这里是两个等号,和一个等号是完全不同的,一个等号表示把右边的值赋给左边的变量,而两个等号则表示一个判断:"左边是否等于右边 "。这个表达式返回一个BOOLEAN型的值。下面是可以用的判断等号:== 左边是否等于右边 > 左边是否大于右边 >= 左边是否大于等于右边 < 左边是否小于右边 <= 左边是否小于等于右边 <>和~= 左边是否不等于右边 二,选择结构 有两种,一种是if...else...end,一种是select...case,分别举个例子大家就明白了。1,if...else...end,if...elseif...else...end例如:i=2,j=5;if i == j thena(i,j) = 2;elseif abs(i-j) == 1 thena(i,j) = -1;else a(i,j) = 0;end, 这和fortran的语法没什么不同,唯一的区别就是fortran最后是“END IF”,而这里变成了“end”。也没什么特别的,你写错了scilab会自动提醒你的。2,select...case...end这个与C语言中的switch...case...default差不多,如果有多重选择的话,用这个比if...elseif...else...end方便多了。要注意的是,与C语言不同,这里不必使用break。select 表达式:case 值1 then 语句1case 值1 then 语句2...else语句3end其中,select后面的表达式是将要判断的值,如果表达式为值1,就执行语句1,如果为值2,则执行语句2,等等,如果全都不满足,则执行else后面的语句3部分。select-cast中的else部分可以省略。三,循环结构
SCILAB中有两种循环方式可以使用,分别是for和while循环。1,for循环 for循环与MATLAB的没有什么差别,是最常用的循环结构了。 for 的基本语法为:for 循环变量=[循环下标]循环体语句end这里的循环下标应该是一个一维数组,比如下面就是一个例子:-->for i=1:10-->disp(i)-->end循环下标就是数组1:10,这就产生了一个一维数组,从1到10,步长为默认的1。 循环下标还可以是一个列表型,实际上,可以把它视为一个特殊的一维数组,只是它其中的元素可以不是同一个类型罢了。比如像这样:-->ll=list(1,%t,[1,3,5:2,4,6],"hello"):-->for k=ll-->disp(k)-->end for语句如果写在一行上,那么在循环体语句前面应该加一下逗号与循环变量相分开,但是也可以用一个"do"告诉SCILAB:"下面部分是循环体语句",效果是一样的,上面的例子可以写成这样的形式:-->for i=1:10,disp(i),endor:-->for i=1:10 do disp(i),end效果是一样的。2,while循环 while型循环适用于循环次数不知道的情况。可以用一个条件判别式来控制循环是否应该结束。它的基本形式是这样的:while 表达式,语句体1, [,else 语句体2], end或:while 表达式 do 语句体1 [,else 语句体2], end 此外,还可以是下面的形式while 表达式 then 语句体1 [,else 语句体2], end 它的执行顺序是这样: 首先判断表达式是否为真,若为真,则执行语句1,否则如果有else部分,则执行else中的语句2。下面是一个例子:-->x=5:while x>%eps,x=x/3,disp("go on。。。"),else disp("very small"),end结果可以看到:x = 。。。 。。。 。。。x = 9。994D-17 go on。。。 very small四,脚本文件与函数
1,脚本 脚本就是一个保存了许多命令的文本文件,一般存放成*.sci,*.sce的样子,不过实际上你可以存成任何后缀名,都没有关系。运行的时候,只要在命令窗口中打上: exec("文件名")就可以了。脚本文件中,可以在一开始使用mode函数,设置运行时的模式: k=0 :所有的新变量都显示出来k=-1 :函数的默认模式,变量不显示k=1 or k=3 :脚本文件的默认模式,每一行的结果都显示出来。k=7 :不但像k=1 or k=3一样把每行都显示出来,而且每运行一个命令都会冒出来>>符号,问你是否继续,按回车可以继续,或者按p可以停止。2,函数
SCILAB中,很多函数均放在一个名为:macro的目录中,在英文中,也常以这个单词指代一段完成一个功能的代码,故亦常以"宏"来称函数,下面称呼的时候不示区别。函数定义 函数的定义格式为:function [y1,。。。,yn]=foo(x1,。。。,xm)。。。endfunction其中:y1,。。。,yn是返回值,调用的时候,顺序不能随便颠倒。x1,。。。,xm是传给函数的参数。如果是一个很短小的函数,而且除了这一次使用,以后不大可能使用,你还可以选择用deff函数在程序中定义:
-->deff('a=exampl(y)',['a=y+5'])-->t=exampl(5) t = 10。 'a=exampl(y)'是函数名,相当于正式定义的'function [y1,。。。,yn]=foo(x1,。。。,xm)'一样,方括号中的是函数体。调用函数
对于一些通用的功能,我们可以用函数来解决。在SCILAB中,已经预先定义了大量有用的函数,这些函数可以大大方便我们的工作,如果你想要完成什么功能,应该首先查一查SCILAB是否已经具有了这个功能,不要白费力气,力气应该用在最需要的地方! 函数的标准调用方法是:变量名=函数名(参数1,参数2,。。。,[可选参数1,可选参数2,可选参数3,…]) 有的函数有返回值,有的实际上是没有的,它们在函数内部做完了一些事,就不用返回值了。这类函数可以没有左边的"变更名="部分。比如说刚才我们用过的函数:whos,它在屏幕上打印出了工作空间的所有的变量和它们的类型,然后它的工作就做完了,不需要再有什么返回值。须要指出的是,在SCILAB中,很多函数可以返回一个向量,使用的时候可以查看一下help。 函数中可以使用其它的函数,但是不能再调用自己,也就是说,不能进行递归调用。Chapter 6-可视化 SCILAB的一个重要的方面就是数据可视化。现在的工具一般都有两个特点:首先当然要功能强大,其次要有方便的可视化功能。SCILAB目前已经有了相当丰富的可视化功能。可能是我们在实际运用中使用最频繁的部分。下面大略介绍一下常用的几个函数,其它还有很多,不可能一一介绍,请读者自己在onlin help中查找相关的函数说明。1,二维绘图plot2d 请先在命令行中打上:plot2d,可以看一看plot的演示。plot2d可以说是二维绘图最有用的一个。它的完整形式是:plot2d([x],y)和plot2d([x],y,<opt_args>)其中方括号是可选的。参数: x 一维向量或矩阵,用作x方向的坐标值。如果省略的话,则自动产生一个与y相同 大小,间隔为1的一维数组。 y 一维向量或矩阵,关于x的函数值,长度应该与x相同。如果是矩阵,则对它的每 一列分别画图,相当于:plot(x,y[:,1]),plot(x,y[:,2]),等。如果x也是 一个矩阵(与y必须相同形状),刚分别以x和y的相应列进行绘图。可选项args:这里可选的,如果不管它的话,自动使用默认值。这些选项没有顺序,但最好 用: KEY=值 (比如用plot2d(x(:,1),y(:,1),rect=[0,0,1,1]))的形式 调用,以免SCILAB发生误解。以下是可选项的详细说明:style 设置每条线的风格。它是一个一维数组,大小应该与y的维数相等。如果要画两条 线,那么应该有这样的形式:style=[a1, a2],其中a1 ,a2均为整数,a1指定第 一条线的风格,a2指定第二条。它们代表的意义为:若a为正数,则用它所指定的颜色来画一条实线。至于具体每个数字代表什么 颜色,大家可以用getcolor函数看一下就知道了。另外,如果还想设置这条线 的画法,比如说是画实线还是画虚线,之类,可以通过对象来访问这条线,来 设置它的风格。下面举个例子:-->x=0:。1:2*%pi:-->y=zeros(2,size(x,'*'))-->y(2,:)=cos(x):-->y(1,:)=sin(x)-->plot2d(x,[y(1,:)',y(2,:)'],[-4,5],rect=[0,-1,2*%pi,1]) 如果想要设置第二条线的画法,可以用:-->a=gce()//得到当前图形句柄-->a.children//显示a的成员,可以发现它有两条"polyline",大小是2x1, 所以可以用-->a.children(1,1)和a.children(2,1)来访问每一条线。-->a.children(1,1)//查看第一条线的各项参数,会发现我们刚刚设置的颜色:foreground=5-->a.children(1。1)。polyline/_style=2//试一下,看看发生了什么?那条红线是不是不一样了? 这里的style的值,还可以有很多,可以通过查看help里的polyline/_properties 项查看。rect 设置输出画形的范围,这是一个大小为4x1的一维数组。分别指定四个角的坐标: [xmin,ymin,xmax,ymax] 。 logflag 指定是否使用以10为底对数坐标,大小为一个两字节长度的字符串且只能是l或 n,比如说可以是:"nn" , "nl" , "ln" and "ll" 。n代表一般坐标,l代表 对数坐标。注意,如果使用了"l",刚对应的坐标范围应该是正数!否则将会出现 log10(负数)的情况frameflag 指定如何确定画图的范围。只能是1到8之间的整数。 下面是它们的意义: 0 不使用任何范围,使用前一次的坐标范围,如果前一次也没有确定,则使用 默认的[0,0,1,1](???是吗?我也没确定,不过每次都是这个范围)。 1 则必须给出rect的参数,依据rect所给的参数确定范围,如果不指定rect, 则什么也不干。 2 则自动使用x,y的最小和最大值(rect=[Xmin,Ymin,Xmax,Ymax])自 动确定画图的范围。 3 则使用rect所指定的范围,但是将会放大一点,这样可以看见全图。不常用, 我觉得用这个画出来的图很难看。 4 效果相当于2和3,用x,y的最小和最大值确定rect,然后再放大一些。 5 使用rect所给定的范围,不过为了使坐标间隔好看些,会稍稍放大一些,然 后把坐标间隔取在整齐的位置。 6 效果形同2和5。 7 形同1,不过如果以前已经有一个图形的话,则用你新指定的rect把以前的 图重新画一遍。 8 形同2,自动使用x,y的最小和最大值(rect=[Xmin,Ymin,Xmax,Ymax]) 确定画图的范围,然后把以前的图用现在的新坐标重新画一遍。axesflag : 设置怎样画坐标,以及坐标的风格,间隔。可取范围为整数1到5: 0 不画坐标线 1 y坐标画在左边 2 坐标线上面不画出标记(现在好像不能用,和1一样) 3 y坐标画在右边 4 坐标线画在正中央而不是从左下角开始画(也不能用了?) 5 从(0,0) 开始画坐标,如果 (0,0) 点不在画图范围中,刚省略之注意,这些都可以通过访问图形对象,再访问它的子项来改变。如果所给数值大于5,则什么也不画!nax 只有当axesflag设为1的时候此项才有用。用于设置坐标线上的大小间隔,应该是 一个4x1的整型数组: [nx,Nx,ny,Ny],其中的大写N,表示主要标记,小写 n表示附标记,x,y分别对应于纵横坐标x,y。leg 在输出图形的底部画出相应的线的标题。它应该是"@。。。。"的形式,分 别对应于每一条线。类型应该为字符串。此外,还有一系列二维图形绘制函数,比如plot2d1,plot2d2,它们只是都与plot2d大致通用,只是所绘图形风格有所不同。具体请参阅help手册。如下是生成如下左图的程序代码,右边的比较长,就不列了,看一下就完了吧://// plot intensity of typhoon ( single , coupled ,fnl).//clear;//mclose('all');fn="PlotData.txt";u=file('open',fn,status='old');DataMatrix4=read(u,-1,4);file('close',u);//用file('open',...)打开的文件要用file('close',...)来关闭TotalTimes=28;Coupled=DataMatrix4(:,2);
Single=DataMatrix4(:,3);Fnl=DataMatrix4(:,4);//xclear;Xaxis=3*6:6:(TotalTimes)*6;minX=0;minY=985;maxY=1010;xset('window',0)drawaxis(x=0:6:TotalTimes*6,y=minY,dir='d',sub_int=2)drawaxis(x=0,y=minY:maxY,dir='l',sub_int=2);xgrid(18);plot2d(Xaxis,[Coupled,Single,Fnl],style=[1,2,5],rect=[0,minY,TotalTimes*6,maxY],axesflag=0,leg="");xtitle(['Typhoon Intensity-LongWang','Sep.25-Oct.2'],'Hours','hPa'); 2,二维极坐标绘图plzr语法:polarplot(theta,rho,[style,strf,leg,rect]) polarplot(theta,rho,<opt_args>) 参数:rho 一个向量,就是ρ的值theta 与rho维数相同的一个向量,就是θ<opt_args> 可选参数,用key1=value1, key2=value2 , ...的方式使用,这里keys可以是style , leg , rect , strf 或者 frameflag style 指定每条线的绘图方式,维数与要画的线数相同。其中style(i)就指定了第i 条线的风格。如果不指定,则系统自动对第一条线有风格1,往后按次序排。 -如果style(i)为负数,则曲线就用编号为abs(style(i))+1的标记方式。标记编 号可以用xset()查看。 -若style(i)大于0,则用一条颜色为style(i)的实线画曲线,或者用一条编号为 style(i)的虚线画出。线的编号可以用xset()查看。 -如果只画一条线,则style可以是一个长度为2的向量:[sty,pos],这里sty 是画线的风格;pos是一个介于1和6之间的整数,用于指定标题的位置。 strf 一个长度为3的字符串:"xy0" ,默认为"030" 。其中:x 指定标题的显示方式x=0 不显示标题x=1 显示由leg指定的标题y 指定框架的显示方法与frameflag相同。y=0 使用the current boundaries (set by a previous call to another high level plotting function) are used. Useful when superposing multiple plots. y=1 : the optional argument rect is used to specify the boundaries of the plot. y=2 : the boundaries of the plot are computed using min and max values of x and y . y=3 : like y=1 but produces isoview scaling. y=4 : like y=2 but produces isoview scaling. y=5 : like y=1 but plot2d can change the boundaries of the plot and the ticks of the axes to produce pretty graduations. When the zoom button is activated, this mode is used. y=6 : like y=2 but plot2d can change the boundaries of the plot and the ticks of the axes to produce pretty graduations. When the zoom button is activated, this mode is used. y=7 : like y=5 but the scale of the new plot is merged with the current scale. y=8 : like y=6 but the scale of the new plot is merged with the current scale.leg : a string. It is used when the first character x of argument strf is 1. leg has the form "@...." where leg1 , leg2 , etc. are respectively the captions of the first curve, of the second curve, etc. The default is "" .
rect : This argument is used when the second character y of argument strf is 1, 3 or 5. It is a row vector of size 4 and gives the dimension of the frame: rect=[xmin,ymin,xmax,ymax] .Description
polarplot creates a polar coordinate plot of the angle theta versus the radius rho. theta is the angle from the x-axis to the radius vector specified in radians; rho is the length of the radius vector specified in dataspace units.
Examples
t= 0:.01:2*%pi;clf();polarplot(sin(7*t),cos(8*t))clf();polarplot([sin(7*t') sin(6*t')],[cos(8*t') cos(8*t')],[1,2])
3,三维绘图plot3d
向量绘图champmatplotcontourgrayplot通用绘图设定及图形的保存xset族:格式:xset("键名",值) xset("alufunction",number) xset("auto clear","on"|"off" xset("background",color):设置画图所用的背景颜色 xset("clipping",x,y,w,h): xset("color",value): 设置缺省画图颜色 xset("colormap",cmap):设置颜色表,如果用默认的颜色表,因为颜色太少,画出的图(比如说等值线图)来常常很不好看,就是没设置好colormap的缘故,试试这个:xset("colormap",hotcolormap(64)),再画一遍。 xset("dashes",i):设置画图的线型,可以设置使用虚线 xset("default"):设置所有值为系统默认值 xset("font",fontid,fontsize) xset("font size",fontsize) xset("foreground",color) xset("fpf",string) xset("hidden3d",colorid) xset("line style",value) xset("mark",markid,marksize) xset("mark size",marksize) xset("pattern",value) xset("pixmap",flag) xset("thickness",value) xset("use color",flag) xset("viewport",x,y) xset("wdim",width,height) xset("wpdim",width,height) xset("window",window-number) xset("wpos",x,y) xset("wresize",flag) xdel():xset("wresize",1):plot2d():xset("wdim",1000,500) xdel():plot2d():xset("wresize",0):xset("wdim",1000,500) xset("wshow"): See xset("pixmap",1) above。 xset("wwpc"): See xset("pixmap",1) above。xgrid:设置是否在图中标上网格线。
说明
这些画图函数一般都是对矩阵或一维数组或一个函数使用,具体还请参照帮助文档。
对于一般的函数,常常有几个名称相似的一系列,这些函数名中,前面
加f的,代表function,表示对函数进行操作,加s的代表smooth,表示经过平滑处理。后面跟一个数字的,表示对原有的函数进行了一定的扩充。图形的保存保存图形最简单的方法是在画出图的窗口中选择"file->export",在这里,可以选择
好几种格式,如果只是想看一看,可以选择GIF,如果想要插入LATEX文章里,可以选择POSTSCRIPT-LATEX。至于在脚本或函数中保存图形,则请参见xbasimp,xs2fig,xs2gif,xs2ppm,
这几个函数以及关键词printing的帮助,可能还须要使用SCILAB提供的几个工具。 一些应用数值计算数值积分
一重定积分函数[v,err]=intg(a,b,f[,ea[,er]]) 参数说明: a,b:积分的上下界 f:积分函数 ea:积分结果的绝对误差,缺省为0 er:积分结果的相对误差,缺省为1。e-8 v:积分结果 err:积分结果的相对误差估计值若以I表示积分的精确值,则满足:
abs(I-v)<= max(ea,er*abs(I))请参照SCILAB的函数说明,其中有一个例子。二重定积分[I,err]=int2d(X,Y,f[,params])X:一个大小为3xN的矩阵,包含N个三角形项点的X坐标
Y:一个大小为3xN的矩阵,包含N个三角形项点的Y坐标 f:积分函数名 params:参数名,可选,应该是一个1x4的实型向量:[tol, iclose, maxtri, mevals, iflag]。如果不指定,则使用默认值:[1。d-10, 1, 50, 4000, 1]。其中:tol:积分结果的误差最大值。如果后面的参数iflag=0,则tol被认为
是相对误差,如果iflag= 1,绝对误差。 iclose :整数,决定选择LQM1( iclose=1) 还是 LQM0( iclose不为1)LQM0只使用三角形内部的点上的值。LQM1一般比LQM0精确,但将在三角形的点上的函数值须做更多的计算。除非积分函数在三角形边界上有奇点,LQM1一般会好一些。 maxtri :区域剖分的最大块数。 mevals :函数估计值的充许的最大数。如果使用LQM1,只有小于94* maxtri时,这个数字才能限制计算。 如果使用LQM0,则为56* maxtri。 iflag : 整数,请见参数tol的说明I : 积分值
err : 估计误差三重定积分
[result,err]=int3d(X,Y,Z,f[,nf[,params]])与二重定积分类似,但积分单元相应变为四棱体,因此要多给一个参数Z,用于与X,Y一同表示四棱体的项点坐标。nf:积分函数的个数(默认值为1)params :实数1x4的向量:[minpts, maxpts, epsabs, epsrel]。默认为:[0,1000, 0。0,1。d-5]。epsabs :绝对误差容限 epsrel :相对误差容限 minpts :函数估计值的最小个数。 maxpts :函数估计值的最大个数。在每个子区域中的函数估计值数为43 result :积分结果 err :误差估计(绝对值) 求解方程线性方程求解[x0,kerA]=linsolve(A,b[,x0])非线性方程求解[x,[,v,[,info]]]=fsolve(x0,fct [,fjac] [,tol]) 偏、常微分方程求解数据拟合函数
[p,err]=datafit([imp,] G [,DG],Z [,W],[contr],p0,[algo],[df0,[mem]], [work],[stop],['in']) 参数的意义:请参看SCILAB的帮助文档 非线性优化optim 插值线性插值interplnn维线性插值linear/_interpn样条插值splin二维双三次样条插值splin2d三维样条插值splin3d 平滑[pt]=smooth(ptd [,step]):使用三次样条曲线进行平滑pt:2xn的实数矩阵,第一行是等间隔的坐标,间隔为step所指定,第二行是平滑后的函数值step:切断步长ptd:2xn的实数矩阵,第一行是坐标,第二行是函数值统计
rand函数:用于产生随机数rand('uniform')产生位于0和1之间的随机数rand('normal')产生高斯分部随机数,平均值为0,方差为1符号计算工具包(未完成) maple并行计算工具包pvm(未完成)IO操作(未完成)scicos工具包(未完成)mannet工具包(未完成)与MATLAB的兼容性(未完成)
与FORTRAN,C的接口(未完成)
与tcl/tk结合(未完成)函数列表(未翻译完)
scilab group,introduction to scilab
scilab group,scilab help document胡包钢等, 科学自由软件 scilab 教程,清华大学出版社,2003目录:
第3章 SCILAB中的程序设计、脚本文件与函数3.1 引言3.2 顺序结构程序设计3.3 选择结构程序设计3.4 循环结构程序设计3.5 脚本文件与函数3.6 函数的应用第4章 计算结果可视化4.1 引言4.2 二维图形的绘制4.3 三维图形的绘制4.4 绘图全局参数与色图的设定第5章 SCILAB与C或FORTRAN程序的接口5.1 引言5.2 应用动态链接指令link5.3 调用动态链接程序的指令call第6章 SCILAB的应用举例6.1 引言6.2 在求解线性方程组方面的应用6.3 在求解非线性方程(组)方面的应用6.4 SCILAB在函数插值方面的应用6.5 意犹未尽的话附录 SCILAB部分函数指令表参考文献tips:线性系统round(5.4)//四舍五入,结果是5floorceilfix()//向零取整sign(-0)//取符号-->sort(A)//递减排序gsort//递增排序转载地址:http://gwfmf.baihongyu.com/