MATLAB(Matrix Laboratory,矩陣實驗室)是由美國The MathWorks公司出品的商業數學軟體。MATLAB是一種用於演算法開發、資料視覺化、資料分析以及數值計算的進階技術計算語言和互動式環境。除矩陣運算、繪製函數/資料圖像等常用功能外,MATLAB還可用來建立使用者介面,以及呼叫其它語言(包括C、C++、Java、Python、FORTRAN)編寫的程式。
MATLAB主要用於數值運算,但利用為數眾多的附加工具箱,它也適合不同領域的應用,例如控制系統設計與分析、影像處理、深度學習、訊號處理與通訊、金融建模和分析等。另外還有配套軟體套件Simulink提供視覺化開發環境,常用於系統類比、動態/嵌入式系統開發等方面。
在R2017b後的MATLAB版本更新釋出了深度學習的工具,使其能夠視覺化的快速建立AI模型,並透過各種轉碼器,部屬於嵌入式硬體之中。
截至2020年,MATLAB在全球擁有超過400萬使用者。MATLAB使用者來自工程、科學和經濟學領域。
歷史
1970年代末到80年代初,時任美國新墨西哥大學教授的克里夫·莫勒爾為了讓學生更方便地使用LINPACK及EISPACK(需要通過FORTRAN編程來實現,但當時學生們並無相關知識),獨立編寫了第一個版本的MATLAB。這個版本的MATLAB只能進行簡單的矩陣運算,例如矩陣轉置、計算行列式和本徵值,此版本軟體分發出大約兩三百份[8][9]。
1984年,傑克·李特、克里夫·莫勒爾和斯蒂夫·班格爾特合作成立了MathWorks公司,正式把MATLAB推向市場[9][10]。MATLAB最初是由莫勒爾用FORTRAN編寫的,李特和班格爾特花了約一年半的時間用C重新編寫了MATLAB並增加了一些新功能,同時,李特還開發了第一個系統控制工具箱,其中一些代碼到現在仍然在使用[9]。C語言版的面向MS-DOS系統的MATLAB 1.0在拉斯維加斯舉行的IEEE決策與控制會議(IEEE Conference on Decision and Control)正式推出[9][11][a],它的第一份訂單只售出了10份拷貝[9],而到了現在,根據MathWorks自己的資料[12],目前世界上180多個國家的超過三百萬工程師和科學家在使用MATLAB和Simulink。
1992年,學生版MATLAB推出;1993年,Microsoft Windows版MATLAB面世;1995年,推出Linux版[9]。
主要功能
MATLAB的主要提供以下功能[13]:
- 可用於技術計算的高階語言
- 可對代碼、檔案和資料進行管理的開發環境
- 可以按迭代的方式探查、設計及求解問題的互動式工具
- 可用於線性代數、統計、傅立葉分析、篩選、最佳化以及數值積分等的數學函數
- 可用於視覺化資料的二維和三維圖形函數
- 可用於構建自訂的圖形化使用者介面的各種工具
- 可將基於MATLAB的演算法與外部應用程式和語言(如C、C++、Fortran、Java、COM以及Microsoft Excel)整合的各種函數
MATLAB的一個重要特點是可延伸性。作為Simulink和其它所有MathWorks產品的基礎,MATLAB可以通過附加的工具箱(Toolbox)進行功能擴充,每一個工具箱就是實現特定功能的函數的集合[b]。MathWorks提供的工具箱分以下幾大類[14]:
- 數學和最佳化
- 統計和資料分析
- 影像處理和電腦視覺
- 深度學習與機器學習
- 控制系統設計和分析
- 訊號處理和通訊
- 測試和測量
- 金融建模和分析
- 應用程式部署
- 資料庫連接和報表
- 分散式計算
這些工具箱大多是用開放式的MATLAB語言寫成,使用者不但可以檢視原始碼,還可以可根據自己的需要進行修改以及建立自訂函數。此外,常有使用者在MATLAB Central: File Exchange (頁面存檔備份,存於網際網路檔案館)發布自己編寫的MATLAB程式或工具箱,供他人自由下載使用。
MATLAB語言
MATLAB語言是一種互動性的數學手稿語言,其語法與C/C++類似。它支援包括邏輯(boolean)、數值(numeric)、文字(text)、函數柄(function handle)和異質資料容器(heterogeneous container)在內的15種資料類型,每一種類型都定義為矩陣或陣列的形式(0維至任意高維)[15]。
執行MATLAB代碼的最簡單方式是在MATLAB程式的命令窗口(Command Window)的提示符處(>>
)輸入代碼,MATLAB會即時返回操作結果(如果有的話)。此時, MATLAB可以看作是一個互動式的數學終端,簡單來說,一個功能強大的「計算機」。MATLAB代碼同樣可以儲存在一個以.m為字尾名的文字檔案中,然後在命令窗口或其它函數中直接呼叫。
MATLAB的變數名字跟許多程式語言一樣,嚴格區分大小寫,例如,var、VAR和Var是三個不同的變數。另外,MATLAB中變數名字必須以字母為首字母,3var、_var等是非法的變數名。變數由設定運算子(=
)定義. MATLAB是動態檢查的,這意味著變數可以在未定義其類型的情況下賦值並且變數的類型也可以改變,除非將變數看做是符號物件[16]。變數值可以取自常數,計算中的其他變數的值,或某一函數的輸出。例如:
>> x = 17
x =
17
>> x = 'hat'
x =
hat
>> x = [3*4, pi/2]
x =
12.0000 1.5708
>> y = 3*sin (x)
y =
-1.6097 3.0000
MATLAB的意思是"矩陣實驗室",因此它提供了許多建立向量,矩陣和多維陣列的便捷的方式。在MATLAB自己的語言中,一個向量(vector)指的是一維(1×N或N×1)矩陣,在其他語言中通常被叫做陣列(array)。矩陣(matrix)通常指的是2-維陣列,例如m×n陣列其中m和n大於或等於1。多維陣列通常指的是維數大於2的陣列。
需要注意的是,雖然MATLAB用C語言重寫,但是在矩陣儲存方式上卻和FORTRAN保持一致,兩者使用的均為列優先儲存,而非行優先儲存[c]。在進行較大的矩陣運算時,這一差別對效能的影響是不應忽略的。[需要解釋]
MATLAB提供了定義簡單陣列的簡單方式,使用語法:初值:
增量:
終值。例如:
>> array = 1:2:9
array =
1 3 5 7 9
定義了一個名為array
的變數(或向已存在的變數array
賦予一個新值),其值為包含1, 3, 5, 7, 9的一個向量。即陣列由1開始(初值),每次以增量2(增量)遞增,當達到9(終值)時停止。
>> array = 1:3:9
array =
1 4 7
在該語法中增量可被省略(這樣僅剩一個冒號),這時增量採用預設值1。
>> ari = 1:5
ari =
1 2 3 4 5
由於預設增量為1,上面的語句對變數ari
用1, 2, 3, 4, 5的向量賦值。
在MATLAB內定義矩陣同樣很簡單,例如:
>> M = [1,2,3;4,5,6;7,8,9]
M =
1 2 3
4 5 6
7 8 9
在MATLAB主記憶體取矩陣元素同樣非常簡單,例如:
>> M = [1,2,3;4,5,6;7,8,9]
M =
1 2 3
4 5 6
7 8 9
>> M(2,2) ans =
5
>> M(2,:) ans =
4 5 6
>> M(:,1) ans =
1
4
7
>> M(2,2) = 10
M =
1 2 3
4 10 6
7 8 9
若要對矩陣內所有元素做同樣的運算,如次方倍,則需要在運算元前面加上".",例如:
>> M = [1,2,3;4,5,6;7,8,9]
>> M .^2
ans =
1 4 9
16 25 36
49 64 81
若不在運算元前面加上"."則代表矩陣運算:
>> M = [1,2,3;4,5,6;7,8,9]
M ^2 = M * M =
30 36 42
66 81 96
102 126 150
利用MATLAB的符號數學工具箱(Symbolic Math Toolbox)[d]可以進行代數或符號運算,如分解多項式因子和解代數方程式:
>> syms x y
>> A=x^3-3*x^2*y+3*x*y^2-y^3;
>> factor (A)
ans =
(x - y)^3
把多項式簡化成了。
>> solve('x^2 - 2*x - 4 = 0')ans =
1 - 5^(1/2)
5^(1/2) + 1
求得方程式的兩個解為和。
圖形和圖形化使用者介面編程
MATLAB中常用的繪圖命令是plot,例如描繪一個在[-4,4]區間內的正弦函數:
>> x = -4:0.05:4;
>> y = sin (x);
>> plot(x,y)
|
利用plot命令也可以在同一幅圖中描繪多個函數圖形:
>> x = 0:.01:2*pi;
>> y1 = sin (x);
>> y2 = sin(2*x);
>> y3 = sin(4*x);
>> plot(x, [y1; y2; y3])
>> legend('y=sin(x)', 'y=sin((2x)','y=sin(4x)')
|
用MATLAB的畫圖命令可以生成複雜的三維圖形[e]:
版本歷史
到7.1版為止,MATLAB的釋放編號均以數字來命名,例如R7,R12.1,R14 SP1等;從7.2版開始,釋放編號以年份來命名,每年3月份推出的用a表示,9月份推出的則以b表示,例如R2006a代表2006年3月推出的版本,R2009b指2009年下半年推出的版本[17]:
版本 | 發行編號 | 年份 |
---|---|---|
MATLAB 1.0 | 暫時不明 | 1984年 |
MATLAB 2 | 1986年 | |
MATLAB 3 | 1987年 | |
MATLAB 3.5 | 1990年 | |
MATLAB 4 | 1992年 | |
MATLAB 4.2c | R7 | 1994年 |
MATLAB 5.0 | R8 | 1996年 |
MATLAB 5.1 | R9 | 1997年 |
MATLAB 5.1.1 | R9.1 | |
MATLAB 5.2 | R10 | 1998年 |
MATLAB 5.2.1 | R10.1 | |
MATLAB 5.3 | R11 | 1999年 |
MATLAB 5.3.1 | R11.1 | |
MATLAB 6.0 | R12 | 2000年 |
MATLAB 6.1 | R12.1 | 2001年 |
MATLAB 6.5 | R13 | 2002年 |
MATLAB 6.5.1 | R13SP1 | 2003年 |
MATLAB 6.5.2 | R13SP2 | |
MATLAB 7 | R14 | 2004年 |
MATLAB 7.0.1 | R14SP1 | |
MATLAB 7.0.4 | R14SP2 | 2005年 |
MATLAB 7.1 | R14SP3 | |
MATLAB 7.2 | R2006a | 2006年 |
MATLAB 7.3 | R2006b | |
MATLAB 7.4 | R2007a | 2007年 |
MATLAB 7.5 | R2007b | |
MATLAB 7.6 | R2008a | 2008年 |
MATLAB 7.7 | R2008b | |
MATLAB 7.8 | R2009a | 2009年 |
MATLAB 7.9 | R2009b | |
MATLAB 7.10 | R2010a | 2010年 |
MATLAB 7.11 | R2010b | |
MATLAB 7.12 | R2011a | 2011年 |
MATLAB 7.13 | R2011b | |
MATLAB 7.14 | R2012a | 2012年 |
MATLAB 8.0 | R2012b | |
MATLAB 8.1 | R2013a | 2013年 |
MATLAB 8.2 | R2013b | |
MATLAB 8.3 | R2014a | 2014年 |
MATLAB 8.4 | R2014b | |
MATLAB 8.5 | R2015a | 2015年 |
MATLAB 8.6 | R2015b | |
MATLAB 9.0 | R2016a | 2016年 |
MATLAB 9.1 | R2016b | |
MATLAB 9.2 | R2017a | 2017年 |
MATLAB 9.3 | R2017b | |
MATLAB 9.4 | R2018a | 2018年 |
MATLAB 9.5 | R2018b | |
MATLAB 9.6 | R2019a | 2019年 |
MATLAB 9.7 | R2019b | |
MATLAB 9.8 | R2020a | 2020年 |
MATLAB 9.9 | R2020b | |
MATLAB 9.10 | R2021a | 2021年 |
MATLAB 9.11 | R2021b | |
MATLAB 9.12 | R2022a | 2022年 |
MATLAB 9.13 | R2022b | |
MATLAB 9.14 | R2023a | 2023年 |
從2014a版起,Matlab介面支援中文[18]。
其它科學計算軟體
Maple是Waterloo Maple Inc.(簡稱Maplesoft)開發的商業電腦代數系統,用於快速計算、開發設計表單、教學基本概念或建立高保真類比模型等。最新版本是2018年3月發布的Maple 2018.0,分Personal(個人版),Professional(專業版),Academic(學術版),Government(政府版)和Student(學生版)。
Mathematica是史蒂芬·沃爾夫勒姆開發的科學計算軟體,開發工作現由Wolfram Research公司負責。最新版本是2019年4月16日發布的Mathematica 12.0。[19]
LabVIEW是美國國家儀器公司開發的視覺化編程平台,主要用於資料採集,儀器控制和工業自動化。最新版本是2021年8月發布的LabVIEW 2021。
FreeMat是一個與MATLAB和IDL很類似的數值計算平台及程式語言。最新版本是2009年10月發布的FreeMat 4.0
GNU Octave是一種主要用於數值計算的高階語言。它除了提供數值方法解決線性和非線性問題的命令介面,還提供了一種與MATLAB大抵相容的語言。最新版本是2024年3月14日發布的9.1.0。
Scilab是一個互動性的數值運算平台,主要用於工程和科學應用方面,例如航空航天、汽車、能源、金融、化學、生物、醫學、國防等。最新版本是5.4.0。
ScicosLab是由一些曾在INRIA和ENPC參與Scilab開發的研究人員,在Scilab BUILD4版本的基礎上開發出來的GTK+版本,它整合了建模/類比工具Scicos[f]及其它數量眾多的工具箱,被認為是「惟一一款可以與商業軟體MATLAB/Simulink及MATRIXx/SysstemBuild媲美的開源軟體」。最新穩定版本是4.4.1。
JAMA (JAMA : A Java Matrix Package),一種Java語言編程工具包。目前最新1.0.3版本,是2012年11月9日發布的。
NumPy是Python語言的一個擴充程式庫。支援高階大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式函式庫。
SciPy是一個開源,基於NumPy的Python演算法庫和數學工具包,包含的模組有最佳化、線性代數、積分、插值、特殊函式、快速傅立葉變換、訊號處理和圖像處理、常微分方程式求解和其他科學與工程中常用的計算。
中國大陸受限
2020年6月12日,美國對位列實體清單中的哈爾濱工業大學、哈爾濱工程大學等高等院校實施制裁,禁止使用MATLAB。[20]