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