|
|
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超越优秀,迈向卓越。
时间如水,我不得不到此为止。希望以后能继续发帖。
望能抛砖引玉。 |
|