Scilab 语法与 Matlab 的主要区别

本文对比了Scilab和Matlab在数据类型、矩阵操作、Scilab对象如Matrix和List,以及编程结构如条件判断和循环等方面的主要区别。Scilab中的数据类型包括双精度浮点数、整数、字符串、布尔型和多项式,而Matlab常量的表示方式有所不同。在矩阵操作上,两者有相似之处,但Scilab提供了更多的元素删除和矩阵变形功能。此外,文章还介绍了Scilab的脚本和函数执行方式。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值