LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2817|回复: 16

scilab的部分数学功能简介

[复制链接]
发表于 2004-7-19 19:02:46 | 显示全部楼层 |阅读模式
scilab是法国科学院国际信息与自动化研究所开发的开放源代码(open source)的科学计算软件。它是SCIentific LABoratory字头的缩写,是一个与matlab很相似的科学计算和编程软件。目前最新版本是3.0。大家可以到
www.scilab.org
下载到源码tar包,如果觉得自己编译麻烦的话,你也可以下载binary包,保存在某个目录下,我是保存在/usr/lib下,然后make一下。接着搞一个shell链接。我的版本是scilab-3.0-RC1,所以我自己建的/usr/bin/scilab,这个shell文件是这样的:
#!/bin/sh
/usr/lib/Scilab-3.0-RC1/bin/scilab

就这么两行,就这么简单,只要运行它,scilab就出现了。
好,现在就让我们一起进入scilab的世界吧!
1.scilab中的常量。
scilab中有一些常量,是一些很常用数字,有:
%pi==>3.1415926..
%i==>i^2=-1
%inf==>无穷大
%eps==>2.22*10^(-16)
%t==>ture
%f==>false
%nan==>not-a-namber
2.基本运算。
运算的开始就是输入数据,scilab不像一般的解释性语言,它基于数学,如果你想让a等于10,你只要打:a=10,而不用(define a 10).与octave等语言一样。
向量(矩阵):用[]输入,如果你想输入一个3*4的向量,你就可以:a=[1 4 7 8;5 8 9 6;7 5 6 2],很简单。当然,你也可以这样:
a=[1 4 7 8
5 8 9 6
7 5 6 2]
向量的转置:用单引号(‘),如a'就是将a转置。
一些具有固定步长量的向量如:[0 0.5 1 1.5 2 2.5 3] 可以用0:0.5:3来表示,在这里0表示初始值,0.5表示步长值,3表示终值。与matlab是一致的。
在scilab中的代数运算也可以看成是矩阵运算。你可以随便将线性代数中的矩阵运算放在scilab中试验,如求A的逆矩阵,在scilab中用inv(A)表示,求行列式的值,det(B),当然这里的B必须是个n*n矩阵。
还有一种值相关运算,用.*和./表示,如
-->a=[1 5 6];
-->b=[2 2 5];
-->c=a.*b
c=! 2. 10. 30.!
如果你有兴趣知道一个矩阵中所有数加在一起等于多少,用sum(X)来运算,这里我也不多说那些林林总总的函数了。你可以用help命令来查找:如help sin等等。
以下是一些常用的scilab函数:
基本函数:
sum(各项相加)
例子:-->a=[1 5 7 8;1 5 9 3];
     -->sum(a)
     ans =
           39
prod(各项相乘)
例子:  -->prod(a)
       ans =
             37800
sqrt(平方根)
例子:-->sqrt(9)
      ans =
           3
diag(提取对角元素)
例子:-->diag(a)
     ans =
         ! 1. !
         ! 5. !
cos(余弦)
例子:-->cos(a)
     ans =
     !  0.5403023 0.2836622  0.7539023 -0.1455000 !
     !  0.5403023 0.2836622 -0.9111303 -0.9899925 !
max(求最大值及位置)
例子:-->max(a)
     ans =
       9.
round(四舍五入)
例子:-->round(5.8947)
     ans =
       6.
sign(判断正负)
例子:-->sign(-855)
     ans =
       -1.
    -->sign(255)
     ans =
       1.
fft(快速傅立叶变换)
例子:-->fft(a,1)
     ans =
   ! 4.875 -1.75-0.125i -0.375 -1.75+0.125i !
   ! 0.375  0.25-0.625i -0.875  0.25+0.625i !
排序函数:
sort(递减排序)
例子:-->sort(a)
    ans =
    ! 9. 7. 5. 1. !
    ! 8. 5. 3. 1. !
gsort(排序)
例子:-->[a1,k]=gsort(a,'g','i')
     k  =
   ! 1. 8. 3. 7. !
   ! 2. 4. 5. 6. !
     a1 =
   ! 1. 3. 5. 8. !
   ! 1. 5. 7. 9. !
find(查询)
例子:-->A=find(a>5)
   A =
! 5. 6. 7. !
特殊矩阵函数:
zeros(生成0矩阵)
例子:-->zeros(2,3)
ans =
! 0. 0. 0. !
! 0. 0. 0. !
eye(生成对角线上都是1的矩阵)
例子:-->eye(2,3)
  ans =
  ! 1. 0. 0. !
  ! 0. 1. 0. !
ones(生成由1组成的矩阵)
例子:-->ones(2,3)
   ans =
   ! 1. 1. 1. !
   ! 1. 1. 1. !
matrix(重组矩阵)
例子:-->matrix(a,4,2)
   ans =
   ! 1. 7. !
   ! 1. 9. !
   ! 5. 8. !
   ! 5. 3. !
线性代数函数:
det(求行列式值),inv(矩阵的求逆),qr(二次余数分解),svd(奇异值分解),bdiag(求广义本征值),spec(求本征值),schur(schur分解),trace(求对角线元素总和)
这几个函数涉及线性代数,用法一看即明,在此就不予介绍了.
多项式函数:
poly(构造多项式)
roots(多项式求根)
例子:-->p=poly([1 2 3],'x');
      -->roots(p)
     ans =
     ! 1. !
     ! 2. !
     ! 3. !
coeff(求矩阵多项式的系数)
horner(多项式求值)
clean
freq(求响应频率)
这几个函数的例子见scilab的help文档,我不是很懂。
随机函数:rand
例子:-->rand(2,4) //生成2*4随机矩阵
编程函数:fuction,deff,argn,for,if,end,while,select,warning,error,break,return这些scilab编程中最常用的关键词。如果条件允许,我将在后面对其进行介绍。
比较符号:==,>=,>,<=,<,=,&(and),|(or)
文件加载运算:
exec 用法-->exec("****.sce")
调试:pause,return,abort
样条函数,内插法:splin,interp,interpln。这些在数值分析中很常用。
字符串:string,part,evstr,execstr
绘图函数:plot,xset,driver,plot2d,xgrid,locate,plot3d,Graphics
要查询它们的用法,只需:help plot 就可以了,一般的说明文档都说的很清楚,而且还带有例子,只要感兴趣时去实践一下,掌握不成问题。
当然scilab的功能远远不只这些,它能够实现matlab中,包括simulink在内的全部功能。
明天我要回衢州实习,然后回家全力复习,准备研究生入学考试。前日发布一帖,说的是自己写的一个scilab小程序。昨日心神不定,终于决定在临走前写完scilab的简介,然后安心复习。这篇小东西是我今天写成的,时间仓促,写的不是很清楚,有些东西我自己也不是很熟,所以错误一定是有的,望请各位朋友指正。我希望各位关心开源数学软件的朋友们能够在linuxsir上不断地学习提高,不断地相互交流,令open source超越优秀,迈向卓越。
时间如水,我不得不到此为止。希望以后能继续发帖。
望能抛砖引玉。
发表于 2004-7-19 19:22:20 | 显示全部楼层
支持搂主的帖子。

其实我现在在徘徊,是该用octave还是scilab?我想得精通一个数值运算的工具。楼主给点建议。
 楼主| 发表于 2004-7-19 21:38:34 | 显示全部楼层
如果你用matlab已经很多年了,且对字符界面不感冒,可以容忍gnuplot的话(或者说对gnuplot很精通),你就用octave吧。毕竟matlab的资源比较多,学得也快些。
scilab3.0对matlab程序已经很不错了。且scilab操作条件已经很好了,如果你精通matlab,你也会很快掌握scilab的,它们很像。我个人觉得要在linux上代替matlab,scilab应该是目前最好的了。
选择权在你,它们都是open source ,不必在意谁的头衔前有个gnu.
发表于 2004-7-20 08:17:07 | 显示全部楼层
支持仁兄!!
发表于 2004-7-20 08:38:19 | 显示全部楼层
我对gnuplot比较熟悉,那还是用octave吧,确实octave的资源也比较多:p

谢谢楼主的指点
发表于 2004-8-22 21:57:03 | 显示全部楼层
请教楼主:我装了scilab3.0之后默认目录是我自己的家目录,但是我想另外专门设一个scilab的工作目录。想把这个默认设置改了,但不知道scilab的配置文件在哪里,请高手指点。
 楼主| 发表于 2004-8-22 22:16:22 | 显示全部楼层
你能说清楚一点吗?
你是下载的是二进制包还是源码包?
 楼主| 发表于 2004-8-22 23:42:13 | 显示全部楼层
如果你的意思是想把scilab拷到另一个目录下,运行scilab/bin/scilab,可以使其能够工作的话。你只要用root身份,cd到那个scilab目录下,make一下就可以了呀。
发表于 2004-8-23 00:12:15 | 显示全部楼层
我装的是二进制包,就是那个解压缩以后只需要make一下即可的scilab-3.0.bin.linux-i686.tar.gz
最初由 mingyou 发表
你能说清楚一点吗?
你是下载的是二进制包还是源码包?
发表于 2004-8-23 00:22:01 | 显示全部楼层
嗯,按你说的做了,果然不错。
不过这时候pwd的结果变成XXX/scilab/bin了
可是我的目的是把工作目录定在XXX
不知道怎么搞法……
是否能在make的时候指定某个安装目录呢?还是到哪里去改scilab的设置?
最初由 mingyou 发表
如果你的意思是想把scilab拷到另一个目录下,运行scilab/bin/scilab,可以使其能够工作的话。你只要用root身份,cd到那个scilab目录下,make一下就可以了呀。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表