Scilab 语法与 Matlab 的主要区别【z】

Scilab 语法类似于 Matlab ,下面对比地列出一些他们的不同 , 详细的语法请参考参考文献 [1], 或其他 Scilab 或 Matlab 书籍 ( 由于 Scilab 语法和 Matlab 语法有很多相似之处 ).

数据类型:

Scilab 中的数据类型有 :

双精度浮点数

整数

字符串

布尔型

多项式

Scilab 默认的数据类型是双精度浮点数,这与 Matlab 一样

Scilab 中的一些固定的常量以 % 开头,比如: %pi( 圆周率 ) , %inf( 无穷大 ) , %nan(not a number), %e (2.17828...)

这与 Matlab 不同, Matlab 中的常量表示没有开头的 % ,比如 pi( 圆周率 ) , inf( 无穷大 ) , nan(not a number)

-->b = [%pi %e] //b 中存放的是已经定义好的常量

b =

3.1415927 2.7182818

字符串, string :

-->a= "Scilab" //a 是一个字符串

a =

Scilab

-->["I","like";"free","software"] // 字符串可以组合成矩阵。

ans =

!I like !

! !

!free software !

布尔型, boolean, Scilab 中布尔变量 true, false 分别用常量表示为 %t 和 %f

-->[%t, %f, 2>1, 3>4] //%t, %f 是布尔变量 true 和 false ,分别显示为 T,F , 2>1 true, 3>4 false,

ans =

T F T F

对布尔型操作的或且非 , 分别为 : 或 : |, 且 : &, 非 : ~.

-->a = rand(2,2) //a 是一个 2*2 的矩阵,其中存放 [0,1) 之间的浮点数

a =

0.2113249 0.0002211

0.7560439 0.3303271

-->a>0.5 // 比较 a 与 0.5 的大小,逐项比较的结构显示如下

ans =

F F

T F

Scilab 对象

Matrix , Scilab 和 Matlab 一样是主是基于矩阵的科学计算软件, Matrix 是 Scilab 的基本对象

-->a = [1, 2; 3 4] // 由逗号或空格隔开的是矩阵的列,由“;”隔开的是行

a =

1. 2.

3. 4.

-->b = ones(1,3) //scilab 内部定义一些创建矩阵的函数, ones 创建全部为一的矩阵

b =

1. 1. 1.

List ,除 Matrix 之外, list 也是 Scilab 对象

-->l = list(a,b) // 建立一个 list, 里面存储的是前面创建的 a,b

l =

l(1)

1. 2.

3. 4.

l(2)

1. 1. 1.

-->A.x = 32;A.y = %t //A 的数据类型是 mlist, 请查帮助以了解详情

A =

x: 32

y: %t

矩阵操作 :

在 Scilab 中 , 取矩阵中的元素的操作和 Matlab 中的一样 .

不同的有 :

matrix: reshape a matrix

-->a=ones(2,2)

a =

1. 1.

1. 1.

-->matrix(a,1,4) // 把一个 2*2 的矩阵转变成 1*4 的矩阵

ans =

1. 1. 1. 1.

矩阵元素删除 :

-->a=[11:14;21:24] // 创建一个 2*4 的矩阵

a =

11. 12. 13. 14.

21. 22. 23. 24.

-->a([1,2],[1,3])=[] // 选出指定的元素 :1,2 行的 1,3 列 , 并删除

a =

12. 14.

22. 24.

-->a(:,$)=[] //$ 代表矩阵末尾 , 删除矩阵最后一列

a =

12.

22.

-->a(:,$+1)=[4;5] // 给矩阵增加一列

a =

12. 4.

22. 5.

另外 Scilab 还有

多项式数据类型 , 具体请参考参考文献 [1]

Scilab 编程

或且非

或 : |

且 : &

非 : ~

选择

If-else 结构

if <condition> then

<instructions>

end

if <condition> then

<instructions>

else

<instructions>

end

if <condition> then

<instructions>

elseif <condition> then

<instructions>

else

<instructions>

end

类似于 c 语言中的 switch 的选择结构 :

select <expr> ,

case <expr1> then <instructions>

case <expr2> then <instructions>

...

else <instructions>

end

与 c 语言中的 switch 不同的是 , 每一个 case 后执行的 instructions 末尾不需要用 break, 程序运行完 instructions 的最后一条语句后自动跳出 select.

循环 , for 循环和 while 循环和 Matlab 中的一样

for <name>=<expr>

<instructions>

end

while <condition>

<instructions>

end

循环中可以用 continue 和 break 这样的关键字 .

Scilab 脚本和函数

运行 Scilab 脚本和函数的方法与 Matlab 有很大不同 .

Scilab 代码可以写入文件 , 再导入到 Scilab 中批量执行 ,

Scilab 代码编辑器可以用 Scilab 自带的编辑器 , 启动编辑器的命令是 scipad.

Scilab 程序的扩展名是 .sci 或 .sce

如写好一个文件 ,foo.sci

运行他方法是 ,

è exec(“ 目录 \foo.sci”)

如果 , 当前目录有 foo.sci, 运行方法可简化为

è exec(“foo.sci”)

è exec foo.sci

定义函数 :

文件 mymin.sci

function m = mymin(x)

//get minimum element from the matrix x.

m = x(1);

for i = 2:size(x, '*')

if x(i) < m then

m = x(i);

end

end

endfunction

“//” 后面的是 Scilab 中的注释

Size(x,’*’) 得到矩阵 x 总的大小 , 比如若 x 是 2*3 的矩阵 , Size(x,’*’) 值为 6.

函数的结尾为 endfunction.

载入和运行函数 :

首先要载入函数 :

转到存放 mymin.sci 的目录下 , 运行

è getf(“mymin.sci”) 或 getf mymin.sci

运行函数 :

-->mymin(1:10)

ans =

1.

创建脚本并运行 :

文件 testmymin.sce

x = rand(3,3);

xmin = min(x) // get min value of x

myminResult = mymin(x)

if xmin == myminResult then

disp("the result is correct");

end

运行脚本及结果

-->exec testmymin.sce

-->x = rand(3,3);

-->xmin = min(x) // get min value of x

xmin =

0.0437334

-->myminResult = mymin(x)

myminResult =

0.0437334

-->if xmin == myminResult then

--> disp("the result is correct");

the result is corret

-->end

原帖:http://blog.csdn.net/aidebear/archive/2009/03/12/3985761.aspx