博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scilab中文简介
阅读量:2066 次
发布时间:2019-04-29

本文共 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;
-->whos
Name                     Type           Size           Bytes
x                        constant       1 by 1257      10072
whos                     function                      7200
help                     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     4
undefined 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命令看一下工作空间存在的所有变量,你会发现即使你什么也没有干,空间中也会存在很多看起来不认识的东西,比如说,你看见的有可能是这样:
-->who
your 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       9231

your 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 变量名的办法清除。
六,高级特性:对象Objects

Chapter 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-1
C=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 then
a(i,j) = 2;
elseif abs(i-j) == 1 then
a(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 语句1
case 值1 then 语句2
.
.
.
else语句3
end
其中,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),end
or:
-->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

向量绘图champ
matplot
contour
grayplot
通用绘图设定及图形的保存
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
 插值
线性插值interpln
n维线性插值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 应用动态链接指令link
5.3 调用动态链接程序的指令call
第6章 SCILAB的应用举例
6.1 引言
6.2 在求解线性方程组方面的应用
6.3 在求解非线性方程(组)方面的应用
6.4 SCILAB在函数插值方面的应用
6.5 意犹未尽的话
附录 SCILAB部分函数指令表
参考文献
tips:
线性系统
round(5.4)//四舍五入,结果是5
floor
ceil
fix()//向零取整
sign(-0)//取符号
-->sort(A)//递减排序
gsort//递增排序

转载地址:http://gwfmf.baihongyu.com/

你可能感兴趣的文章
中小型园区网络的设计与实现 (一)
查看>>
别人的难题,就是你的价值。
查看>>
中小型园区网络的设计与实现 (二)
查看>>
中小型园区网络的设计与实现 (三)
查看>>
VLAN与子网划分区别
查看>>
Cisco Packet Tracer教程
查看>>
01. 开篇:组建小型局域网
查看>>
02. 交换机的基本配置和管理
查看>>
03. 交换机的Telnet远程登陆配置
查看>>
微信小程序-调用-腾讯视频-解决方案
查看>>
giuhub搭建及常用操作
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
详细介绍Oracle sqlplus命令
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>