Chinaunix首页 | 论坛 | 博客
  • 博客访问: 478448
  • 博文数量: 115
  • 博客积分: 3777
  • 博客等级: 中校
  • 技术积分: 1070
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-07 09:20
文章分类

全部博文(115)

文章存档

2015年(1)

2013年(3)

2012年(26)

2011年(30)

2010年(34)

2009年(21)

我的朋友

分类:

2010-11-13 07:56:10

标签: SCILAB  MATLAB  2007-11-28 20:45
1. Matlab的注释是用“%”引导;在Scilab里面是“//”。
2. 一些预设的变量的表示方法不同。比如圆周率pai在Matlab里面就是“pi”,而在Scilab里面要加上“%”,也就是说,调用圆周率的时候要写 “% pi”。类似的还有:虚数在Matlab里可以是“i”或者“j”;而在Scilab里面为“%i”(“%j”好像不可以)。例外的是默认变量 “ans”,两者都不需要加百分号。
3. 操作符的用法如:加减乘除,大于小于等大多一样。唯一例外是“不等于”,在Matlab里是“a ~= b”;在Scilab里是“a <> b”或者“a != b”。
4. 程序的编辑与执行的不同。Matlab中如果编辑sample.m文件,敲入:edit sample即可。执行时也就是输入:sample。而在Scilab里要复杂些。启动编辑器为“scipad();”,执行保存后的文件如 sample.sci要输入“exec('sample.sci');”。
5. 两者在矩阵的定义与矩阵元素的调用上都差不多。唯一不同的是对矩阵的最后一个元素的调用。在Matlab里,“最后”这个不定变量为“end”,而在 Scilab中为“$”。例:矩阵u=[1,2,3];。要调用最后一个3时命令为:u(end)——Matlab;u($)——Scilab。
6. 在矩阵的运算上也大多相同。不同点在length和sum命令上。Matlab中length输出矩阵行或者列中元素较多的一个的元素个数,sum输出各 个列相加的和;在Scilab中length为整个矩阵的元素数,sum输出全部元素的和。在Scilab中如果要输出各列或者各行的元素和要在sum命 令里加上参数,如:sum(A,'r');或者sum(A,'c');。
7. 方阵的构造在Matlab中是要一个参数,如:zeros(2);是一个二乘二的零矩阵,eye(3);是三乘三的单位矩阵。在Scilab里需要将两个维都写出来,即:zeros(2,2);和eye(3,3);。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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 then

end

if then

else

end

if then

elseif then

else

end

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

select ,

case then

case then

...

else

end

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

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

for =

end

while

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


阅读(2381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~