MATLAB

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
MATLAB
L-shaped membrane商標[1]
MATLAB屏幕截圖
開發者邁斯沃克
首次發布1984年,​40年前​(1984
當前版本
  • R2023b Update 6 (2024年1月10日;穩定版本)
編輯維基數據鏈接
編程語言C語言C++Java
操作系統WindowsmacOSLinux[2]
平台IA-32x86-64
類型數值計算
許可協議專有軟件商業軟件
網站mathworks.com
MATLAB
編程範型多範式函數指令式過程式面向對陣列編程
設計者克里夫·莫勒爾
實作者邁斯沃克
面市時間20世紀70年代末
當前版本
  • R2023b Update 6 (2024年1月10日;穩定版本)
編輯維基數據鏈接
型態系統動態
文件擴展名.m
網站mathworks.com
啟發語言
影響語言

MATLAB(Matrix Laboratory,矩陣實驗室)是由美國The MathWorks公司出品的商業數學軟件。MATLAB是一種用於算法開發、數據可視化數據分析以及數值計算的高級技術計算語言和交互式環境。除矩陣運算、繪製函數/數據圖像等常用功能外,MATLAB還可用來創建用戶界面,以及調用其它語言(包括CC++JavaPythonFORTRAN)編寫的程序。

MATLAB主要用於數值運算,但利用為數眾多的附加工具箱,它也適合不同領域的應用,例如控制系統設計與分析、影像處理、深度學習、信號處理與通訊、金融建模和分析等。另外還有配套軟件包Simulink提供可視化開發環境,常用於系統模擬、動態/嵌入式系統開發等方面。

在R2017b後的MATLAB版本更新釋出了深度學習的工具,使其能夠視覺化的快速建立AI模型,並透過各種轉碼器,部屬於嵌入式硬體之中。

截至2020年,MATLAB在全球擁有超過400萬用戶。MATLAB用戶來自工程、科學和經濟學領域。

歷史

1970年代末到80年代初,時任美國新墨西哥大學教授的克里夫·莫勒爾為了讓學生更方便地使用LINPACKEISPACK英語EISPACK(需要通過FORTRAN編程來實現,但當時學生們並無相關知識),獨立編寫了第一個版本的MATLAB。這個版本的MATLAB只能進行簡單的矩陣運算,例如矩陣轉置、計算行列式和本徵值,此版本軟件分發出大約兩三百份[7][8]

1984年,傑克·李特克里夫·莫勒爾斯蒂夫·班格爾特英語Steve Bangert合作成立了MathWorks公司,正式把MATLAB推向市場[8][9]。MATLAB最初是由莫勒爾用FORTRAN編寫的,李特和班格爾特花了約一年半的時間用C重新編寫了MATLAB並增加了一些新功能,同時,李特還開發了第一個系統控制工具箱,其中一些代碼到現在仍然在使用[8]。C語言版的面向MS-DOS系統的MATLAB 1.0在拉斯維加斯舉行的IEEE決策與控制會議(IEEE Conference on Decision and Control)正式推出[8][10][a],它的第一份訂單只售出了10份拷貝[8],而到了現在,根據MathWorks自己的數據[11],目前世界上180多個國家的超過三百萬工程師和科學家在使用MATLAB和Simulink。

1992年,學生版MATLAB推出;1993年,Microsoft Windows版MATLAB面世;1995年,推出Linux[8]

主要功能

MATLAB的主要提供以下功能[12]

  • 可用於技術計算的高級語言
  • 可對代碼、文件和數據進行管理的開發環境
  • 可以按迭代的方式探查、設計及求解問題的交互式工具
  • 可用於線性代數、統計、傅立葉分析、篩選、優化以及數值積分等的數學函數
  • 可用於可視化數據的二維和三維圖形函數
  • 可用於構建自定義的圖形用戶界面的各種工具
  • 可將基於MATLAB的算法與外部應用程序和語言(如C、C++、Fortran、Java、COM以及Microsoft Excel)集成的各種函數

工具箱

MATLAB的一個重要特點是可擴展性。作為Simulink和其它所有MathWorks產品的基礎,MATLAB可以通過附加的工具箱(Toolbox)進行功能擴展,每一個工具箱就是實現特定功能的函數的集合[b]。MathWorks提供的工具箱分以下幾大類[13]

  • 數學和優化
  • 統計和數據分析
  • 影像處理和電腦視覺
  • 深度學習與機器學習
  • 控制系統設計和分析
  • 信號處理和通訊
  • 測試和測量
  • 金融建模和分析
  • 應用程序部署
  • 數據庫連接和報表
  • 分布式計算

這些工具箱大多是用開放式的MATLAB語言寫成,用戶不但可以查看源代碼,還可以可根據自己的需要進行修改以及創建自定義函數。此外,常有用戶在MATLAB Central: File Exchange頁面存檔備份,存於網際網路檔案館)發布自己編寫的MATLAB程序或工具箱,供他人自由下載使用。

MATLAB語言

MATLAB語言是一種交互性的數學腳本語言,其語法與C/C++類似。它支持包括邏輯(boolean)、數值(numeric)、文本(text)、函數柄(function handle)和異質數據容器(heterogeneous container)在內的15種數據類型,每一種類型都定義為矩陣或陣列的形式(0維至任意高維)[14]

執行MATLAB代碼的最簡單方式是在MATLAB程序的命令窗口(Command Window)的提示符處(>> )輸入代碼,MATLAB會即時返回操作結果(如果有的話)。此時, MATLAB可以看作是一個交互式的數學終端,簡單來說,一個功能強大的「計算器」。MATLAB代碼同樣可以保存在一個以.m為後綴名的文本文件中,然後在命令窗口或其它函數中直接調用。

變量與賦值

MATLAB的變量名字跟許多程序語言一樣,嚴格區分大小寫,例如,varVARVar是三個不同的變量。另外,MATLAB中變量名字必須以字母為首字母,3var_var等是非法的變量名。變量由賦值運算符(=)定義. MATLAB是動態檢查的,這意味着變量可以在未定義其類型的情況下賦值並且變量的類型也可以改變,除非將變量看做是符號對象[15]。變量值可以取自常量,計算中的其他變量的值,或某一函數的輸出。例如:

>> 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×NN×1)矩陣,在其他語言中通常被叫做數組(array)。矩陣(matrix)通常指的是2-維數組,例如m×n數組其中mn大於或等於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]

>> t = linspace(0, 2*pi, 512);
>> [u,v] = meshgrid(t);
>> a = -0.4; b = .5; c = .1;
>> n = 3;
>> x =(a*(1 - v/(2*pi)) .*(1+cos(u)) + c) .* cos(n*v);
>> y =(a*(1 - v/(2*pi)) .*(1+cos(u)) + c) .* sin(n*v);
>> z = b*v/(2*pi) + a*(1 - v/(2*pi)) .* sin(u);
>> surf(x,y,z,y)
>> axis off
>> axis equal
>> colormap(hsv(1024))
>> shading interp
>> material shiny
>> lighting phong
>> camlight('left', 'infinite')
>> view([-160 25])

版本歷史

到7.1版為止,MATLAB的釋放編號均以數字來命名,例如R7,R12.1,R14 SP1等;從7.2版開始,釋放編號以年份來命名,每年3月份推出的用a表示,9月份推出的則以b表示,例如R2006a代表2006年3月推出的版本,R2009b指2009年下半年推出的版本[16]

版本 發行編號 年份
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界面支持中文[17]

其它科學計算軟件

商業軟件

Maple

Maple是Waterloo Maple Inc.(簡稱Maplesoft)開發的商業計算機代數系統,用於快速計算、開發設計表單、教學基本概念或建立高保真模擬模型等。最新版本是2018年3月發布的Maple 2018.0,分Personal(個人版),Professional(專業版),Academic(學術版),Government(政府版)和Student(學生版)。

Mathematica

Mathematica是斯蒂芬·沃爾夫勒姆開發的科學計算軟件,開發工作現由Wolfram Research公司負責。最新版本是2019年4月16日發布的Mathematica 12.0。[18]

LabVIEW

LabVIEW是美國國家儀器公司開發的可視化編程平台,主要用於數據採集儀器控制工業自動化。最新版本是2021年8月發布的LabVIEW 2021。

開源軟件

FreeMat

FreeMat是一個與MATLAB和IDL很類似的數值計算平台及程序語言。最新版本是2009年10月發布的FreeMat 4.0

GNU Octave

GNU Octave是一種主要用於數值計算的高級語言。它除了提供數值方法解決線性和非線性問題的命令介面,還提供了一種與MATLAB大抵兼容的語言。最新版本是2024年3月14日發布的9.1.0。

Scilab

Scilab是一個交互性的數值運算平台,主要用於工程和科學應用方面,例如航空航天、汽車、能源、金融、化學、生物、醫學、國防等。最新版本是5.4.0。

ScicosLab

ScicosLab英語ScicosLab是由一些曾在INRIAENPC參與Scilab開發的研究人員,在Scilab BUILD4版本的基礎上開發出來的GTK+版本,它集成了建模/模擬工具Scicos[f]及其它數量眾多的工具箱,被認為是「惟一一款可以與商業軟件MATLAB/Simulink及MATRIXx/SysstemBuild媲美的開源軟件」。最新穩定版本是4.4.1。

JAMA

JAMA英語JAMA (JAMA : A Java Matrix Package英語JAMA : A Java Matrix Package),一種Java語言編程工具包。目前最新1.0.3版本,是2012年11月9日發布的。

NumPy與SciPy

NumPy是Python語言的一個擴充程式庫。支援高階大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式函式庫

SciPy是一個開源,基於NumPy的Python演算法庫和數學工具包,包含的模組有最佳化線性代數積分插值、特殊函式、快速傅立葉變換訊號處理圖像處理常微分方程求解和其他科學與工程中常用的計算。

Julia

Julia是一種高級通用語言。

中國大陸受限

2020年6月12日,美國對位列實體清單中的哈爾濱工業大學哈爾濱工程大學等高等院校實施制裁,禁止使用MATLAB。[19]

注釋

  1. ^ 在其創始人Moler的回顧文獻中,誤將會議名稱的"Decision"誤植成"Design"[8],而在IEEE該社群官方的歷史紀錄文件中,有明確提到MATLAB第一次公開展示的正確會議名稱[10].
  2. ^ MathWorks官方提供的工具箱需通過支付相對應的費用單獨獲取。
  3. ^ 以一個定義為為M的3x3矩陣為例:列優先存儲指的是MATLAB先保存第一列的3個元素,然後保存第二列的,最後保存第三列的元素,從而這9個矩陣元素在MATLAB中的排序是從1到9,所以在調用矩陣元素時,M(2)指的是第一列的第二個元素,M(6)指的是第二列第三個元素(當然這兩個元素也可以用二維的方式調用,M(2)對應M(1,2),M(6)對應M(2,3));行優先存儲則剛好相反,先保存第一行的3個元素,再保存第二行和第三行的元素。
  4. ^ 從4.9版(對應於MATLAB R2007b+)開始,新的MuPAD運算引擎代替了之前版本使用的Maple引擎,詳情見Version 4.9(R2007b+)Symbolic Math Toolbox Software
  5. ^ 本例子基於Davis, Timothy A.; Kermit Sigmon. MATLAB Primer 7th. Chapman & Hall/CRC. 2005. ISBN 1-58488-523-8 (英語). 一書中的範例,形狀、顏色、角度等參數有修改。
  6. ^ 第一個版本的Scicos是完全用Scilab語言寫成的,但後續版本逐步改用C語言進行開發。由於在Scilab 5版本中出現穩定性及性能問題,開發人員決定此後Scicos僅在ScicosLab中進行後續開發。詳情見Scilab/Scicos history

參考文獻

引用

  1. ^ The L-Shaped Membrane. MathWorks. 2003 [February 7, 2014]. (原始內容存檔於2019-04-23). 
  2. ^ System Requirements and Platform Availability. MathWorks. [August 14, 2013]. (原始內容存檔於2016-10-13). 
  3. ^ An interview with CLEVE MOLER Conducted by Thomas Haigh On 8 and 9 March, 2004 Santa Barbara, California (PDF). Computer History Museum. [December 6, 2016]. (原始內容 (PDF)存檔於2014-12-27). So APL, Speakeasy, LINPACK, EISPACK, and PL0 were the predecessors to MATLAB. 
  4. ^ Bezanson, Jeff; Karpinski, Stefan; Shah, Viral; Edelman, Alan. Why We Created Julia. Julia Language. February 14, 2012 [December 1, 2016]. (原始內容存檔於2019-02-19). 
  5. ^ Eaton, John W. Octave: Past, Present, and Future (PDF). Texas-Wisconsin Modeling and Control Consortium. May 21, 2001 [December 1, 2016]. (原始內容 (PDF)存檔於2017-08-09). 
  6. ^ History. Scilab. [December 1, 2016]. (原始內容存檔於2016-12-01). 
  7. ^ Thomas Haigh. The History of Numerical Analysis and Scientific Computing (PDF). Santa Barbara, California. 2004-03-08: 64–65 [2010-04-29]. (原始內容存檔 (PDF)於2018-10-12) (英語). 
  8. ^ 8.0 8.1 8.2 8.3 8.4 8.5 8.6 Cleve Moler. The Growth of MATLAB and The MathWorks over Two Decades (PDF). January 2006 [2010-04-30]. (原始內容 (PDF)存檔於2009-04-11) (英語). 
  9. ^ MathWorks Founders. MathWorks. [2010-04-29]. (原始內容存檔於2010-04-16). 
  10. ^ 10.0 10.1 Schrader, C.B.; Spong, M.W. The IEEE Conference on Decision and Control - tracing CDC history. IEEE Control Systems Magazine. 2004-12, 24 (6): 56 – 66 [Jan 14, 2011]. doi:10.1109/MCS.2004.1368481. (原始內容存檔於2015-01-09). 
  11. ^ About The MathWorks. MathWorks. [2010-04-29]. (原始內容存檔於2010-05-02). 
  12. ^ MATLAB 7.10-简介及主要功能. MathWorks中國. [2010-04-29]. (原始內容存檔於2010-08-06). 
  13. ^ MATLAB附加产品. MathWorks中國. [2010-04-29]. (原始內容存檔於2011-06-06). 
  14. ^ Fundamental MATLAB Classes. MathWorks. [2010-05-01]. (原始內容存檔於2010-05-05). 
  15. ^ Documentation for the MATLAB Variables. MathWorks. [2010-05-01]. (原始內容存檔於2010-05-05). 
  16. ^ MATLAB Release Notes. MathWorks. [2010-04-30]. (原始內容存檔於2010-05-02). 
  17. ^ MATLAB Release Notes. MathWorks. [2014-03-06]. (原始內容存檔於2014-03-14). 
  18. ^ Stephen Wolfram. Version 12 Launches Today! (And It’s a Big Jump for Wolfram Language and Mathematica). 2019年4月16日 [2019年11月19日]. (原始內容存檔於2020年4月9日). 
  19. ^ MATLAB被禁用:美国投向我国高校科研的第一颗炸弹!. 歐界頭條. [2020-06-29]. (原始內容存檔於2020-10-01). 

外部連結

參見