Scilab

programming language = Scilab, C 語言，C++, Java, Fortran

operating system = Linux、macOS、Windows

genre = 數值分析

license = GPLv2（原為）

website = Scilab, Scilab Enterprises

}}

Scilab 是由法國國立計算機及自動化研究院（l'Institut national de recherche en informatique et en automatique，簡稱 INRIA）和法國國立橋樑學院（l'École nationale des ponts et chaussées，簡稱 ENPC）開發的開放原始碼的科學計算自由軟體。Scilab 一詞來源於英文「Scientific Laboratory」（科學實驗室）詞頭的合併。

目前全世界使用 Scilab 的人數估計有 1,000,000 人。Scilab 也是以矩陣作為主要的資料型別，同時擁有豐富的繪圖功能。Scilab 能處理包括訊號處理、統計分析、影像增強、數值最佳化、動態系統模擬等方面的問題。網路上也有不少人為它寫了許多延伸函式庫、豐富了它的功能。

為推廣普及 Scilab，自 2002 年起，INRIA 跟中國科學院自動化研究所每年組織一次 Scilab 競賽。

歷史

Scilab 始源於 80 年代在 INRIA 開發的計算機輔助控制系統設計軟體 Blaise，其最初的開發者為弗朗斯瓦・底列貝克（François Delebecque）和舍齊・史迪爾（Serge Steer）。Blaise 的誕生受到了克里夫・莫勒爾（Steve Moler）當時用 Fortran 編寫的 MATLAB 軟體的啟發。

1984 年，Blaise 更名為 Basile，由 Simulog（INRIA 的第一個研發小組）負責分發。

90 年代初，Simulog 停止分發 Basile。Basile 更名為 Scilab，由來自 ENPC 的 Jean-Philippe Chancelier 和來自 INRIA 的 François Delebecque，Claude Gomez，Maurice Goursat，Ramine Nikoukhah，Serge Steer 共 6 人組成的 Scilab 小組繼續進行開發工作。後來 INRIA 決定把 Scilab 作為開源軟體分發。1994 年 1 月 2 日，Scilab 的第一個釋放版本，Scilab 1.1 上傳到一個匿名 ftp 站點。直到 2002 年底，Scilab 都是由 6 人小組與一些外部開發者一道共同開發並釋出的。從 2003 年開始，由新成立的 Scilab 協會負責 Scilab 軟體的後續開發以及相關技術支援。

Scilab 協會於 2005 年啟動了基於 Java 的 Scilab 5.x 的開發，而之前的部分 Scilab 開發小組成員（包括 ENPC 以及部分 INRIA 成員）則在之前的 Scilab 4.x 的基礎上另外發布了基於 GTK + 的 Scilab 版本：（該版本集成了）。

Scilab 協會在 2008 年加入 Digiteo 基金會，自此 Scilab 協會開始在 Digiteo 基金會的引領下對 Scilab 進行開發，這種情況一直持續到 2012 年 6 月。另外也是在 2008 年，Scilab 開始基於許可協議發行，CeCILL 是一個與 GPL 相容的開源許可協議。

為了保證 Scilab 的長遠發展，在 INRIA 的支援下，Scilab 事業公司於 2010 年 6 月成立。自 2012 年 7 月開始，Scilab 事業公司將完全負責對 Scilab 後續版本的開發與發布，此外公司也提供關於 Scilab 的專業服務與支援。2017 年，Scilab 事業公司被 ESI 集團併購。

主要特點

大約 1700 個用於科學和工程計算的數學函式
2 維和 3 維視覺化資料圖形
約束 / 無約束、連續 / 離散問題的最佳化
資料分析與建模
控制系統的分析與設計
訊號處理
用於自定義開發擴充套件功能的 API

語法

Scilab 的語法很大程度上基於 MATLAB 語言，執行 Scilab 程式碼的最簡單方式是在圖形視窗中提示符 --> 後輸入命令。此時，Scilab 以互動式的數學 shell 方式工作。

Scilab 的 Hello World! 為：

disp ('Hello World');

顯示 3 維曲面的函式為：

// A simple plot of z = f (x,y)

t=0:0.3:2*% pi';

z=sin (t)*cos (t');

plot3d (t,t',z)

工具箱

Scilab 有許多為不同目的設計的工具箱，例如：

（SIP）及其變種（例如 SIVP）
Scilab 小波工具箱
Scilab Java 和.NET 模組
Scilab 遠端訪問模組

更多工具包可在 ATOMS Portal 或 Scilab forge 上找到。

GUI 介面

Scilab 的 GUI 介面與 MATLAB 很類似，其主要部分是一個用於輸入命令的互動式控制臺；在 Scilab 控制臺中按 Tab 鍵，Scilab 會依據遊標之前的文字自動補齊變數、函式或檔案的名稱；此外，Scilab 也會儲存控制臺中輸入的命令，透過按「"↑","↓"」鍵就能前後檢索已鍵入的命令。

Scilab 語言

Scilab 語言也是一種互動性的數學指令碼語言，語法與 MATLAB 語言相近，也以矩陣作為資料的基本組織形式。Scilab 還有一個可以把 MATLAB 源程式轉換為 Scilab 源程式的程式碼翻譯器。

資料型別

常數（constant）型別（資料前面加 % 表示該資料是 Scilab 已經定義好的）

-->a = 1.5-2.5*% i, % pi; % inf, -1.5e2

a =

1.5 - 2.5i 3.1415927

Inf - 150.

字串（string）型別

-->b = "123", "456"; "Lets use", "SciLab!"

b =

123 456

Let's use SciLab!

有理式（rational）型別

-->x = poly（0, "x"）; // 定義 x 為多項式

-->c = x/（x^2+1）, 2; -1/x, x^3+1

c =

x 2

----- -

2

1 + x 1

3

1 1 + x

 -----

x 1

表（list）型別（類似於 C 語言中的 “結構” 資料型別，即可以包含不同型別的元素）

-->d = list（1,2;3,4, "abc", poly (1,2,3,"x","c"）)

d =

d (1)

d (2)

abc

d (3)

2

1 + 2x + 3x

程式設計

1.if 選擇語句

-->x = 1;

-->if x > 0

--> y = x - 1;

-->elseif x y = x + 1;

-->else

--> y = x;

-->end

-->y

y =

0.

2.select 選擇語句

-->x = 1;

-->select x

-->case 1

--> y = x + 1;

-->case -1

--> y = x - 1;

-->else

--> y = x;

-->end

-->y

y =

2.

3.for 迴圈語句

-->x = ;

-->for k = 1:4

--> x (k) = 2 * k;

-->end

-->x'

ans =
 6. 8.

4.while 迴圈語句

-->k = 1;

-->x = ;

-->while k x (k) = 2 * k;

--> k = k + 1;

-->end

-->x'

ans =
 6. 8.

另外，可以在 while 或 for 迴圈語句中使用 break 關鍵字跳出迴圈

自定義函式

-->function a,b = mp（x1,x2）

--> a = x1 + x2;

--> b = x1 * x2;

-->endfunction

-->x,y = mp（1+% i,2）

y =
2.i

x =
i

工具箱

同 MATLAB 軟體中的 Simulink 工具箱類似，Scilab 也擁有一個用於混合動態系統建模 / 模擬的工具箱：Xcos（它代替了 Scilab 5.2 之前的）。使用者可以自己編寫擴充套件的工具模組並新增於 Scilab 中，或者使用別人已編寫好的擴充套件模組。Scilab 提供了一個模組管理器（ATOMS）統一對擴充套件模組進行搜尋、安裝和更新。在 Scilab 官方的 wiki 頁面上對 Scilab 工具箱和 MATLAB 工具箱之間的相關性進行了詳細對比。

Scilab 的其它一些工具箱：影像處理（、SIVP）、小波變換（Scilab Wavelet Toolbox）、序列埠通訊（Serial Communication Toolbox）、圖形和網路計算（Metanet）、GPU 計算（sciGPGPU）、航天動力學分析（CelestLab）等等。

Scilab 的許多工具箱可以在網站 ATOMS Portal 上找到。