MATLAB

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只能進行簡單的矩陣運算，例如矩陣轉置、計算行列式和本徵值，此版本軟件分發出大約兩三百份。
1984年，傑克·李特、克里夫·莫勒爾和Steve Bangert合作成立了MathWorks公司，正式把MATLAB推向市場。MATLAB最初是由莫勒爾用FORTRAN編寫的，李特和班格爾特花了約一年半的時間用C重新編寫了MATLAB並增加了一些新功能，同時，李特還開發了第一個系統控制工具箱，其中一些代碼到現在仍然在使用。C語言版的面向MS-DOS系統的MATLAB 1.0在拉斯維加斯舉行的IEEE決策與控制會議（IEEE Conference on Decision and Control）正式推出1=在其創始人Moler的回顧文獻中，誤將會議名稱的"Decision"誤植成"Design"，而在IEEE該社群官方的歷史紀錄文件中，有明確提到MATLAB第一次公開展示的正確會議名稱.，它的第一份訂單隻售出了10份拷貝，而到了現在，根據MathWorks自己的數據，目前世界上180多個國家的超過三百萬工程師和科學家在使用MATLAB和Simulink。
1992年，學生版MATLAB推出；1993年，Microsoft Windows版MATLAB面世；1995年，推出Linux版。

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

**工具箱**
MATLAB的一個重要特點是可擴展性。作為Simulink和其它所有MathWorks產品的基礎，MATLAB可以通過附加的工具箱（Toolbox）進行功能擴展，每一個工具箱就是實現特定功能的函數的集合1=MathWorks官方提供的工具箱需通過支付相對應的費用單獨獲取。。MathWorks提供的工具箱分以下幾大類：
*數學和優化
*統計和數據分析
*影像處理和電腦視覺
*深度學習與機器學習
*控制系統設計和分析
*信號處理和通訊
*測試和測量
*金融建模和分析
*應用程序部署
*數據庫連接和報表
*分佈式計算
這些工具箱大多是用開放式的MATLAB語言寫成，用戶不但可以查看源代碼，還可以可根據自己的需要進行修改以及創建自定義函數。此外，常有用戶在 MATLAB Central: File Exchange date=20210204221722 發佈自己編寫的MATLAB程序或工具箱，供他人自由下載使用。

**MATLAB語言**
MATLAB語言是一種交互性的數學腳本語言，其語法與C/C++類似。它支持包括邏輯（boolean）、數值（numeric）、文本（text）、函數柄（function handle）和異質數據容器（heterogeneous container）在內的15種數據類型，每一種類型都定義為矩陣或陣列的形式（0維至任意高維）。
執行MATLAB代碼的最簡單方式是在MATLAB程序的命令窗口（Command Window）的提示符處（>> ）輸入代碼，MATLAB會即時返回操作結果（如果有的話）。此時, MATLAB可以看作是一個交互式的數學終端，簡單來說，一個功能強大的“計算器”。MATLAB代碼同樣可以保存在一個以.m為後綴名的文本文件中，然後在命令窗口或其它函數中直接調用。

**變量與賦值**
MATLAB的變量名字跟許多程序語言一樣，嚴格區分大小寫，例如，var、VAR和Var是三個不同的變量。另外，MATLAB中變量名字必須以字母為首字母，3var、_var等是非法的變量名。變量由賦值運算符（=）定義. MATLAB是動態檢查的，這意味著變量可以在未定義其類型的情況下賦值並且變量的類型也可以改變，除非將變量看做是符號對象。變量值可以取自常量，計算中的其他變量的值，或某一函數的輸出。例如：
>> 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保持一致，兩者使用的均為列優先存儲，而非行優先存儲1=以一個定義為為M的3x3矩陣為例：列優先存儲指的是MATLAB先保存第一列的3個元素，然後保存第二列的，最後保存第三列的元素，從而這9個矩陣元素在MATLAB中的排序是從1到9，所以在調用矩陣元素時，M（2）指的是第一列的第二個元素，M（6）指的是第二列第三個元素（當然這兩個元素也可以用二維的方式調用，M（2）對應M（1,2），M（6）對應M（2,3））；行優先存儲則剛好相反，先保存第一行的3個元素，再保存第二行和第三行的元素。。在進行較大的矩陣運算時，這一差別對性能的影響是不應忽略的。reason=行與列在不同地區皆有指row之可能。
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） 1=從4.9版（對應於MATLAB R2007b+）開始，新的MuPAD運算引擎代替了之前版本使用的Maple引擎，詳情見 Version 4.9（R2007b+）Symbolic Math Toolbox Software可以進行代數或符號運算，如分解多項式因子和解代數方程：
>> 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區間內的正弦函數：
利用plot命令也可以在同一幅圖中描繪多個函數圖形：
用MATLAB的畫圖命令可以生成複雜的三維圖形：

**版本歷史**
到7.1版為止，MATLAB的釋放編號均以數字來命名，例如R7，R12.1，R14 SP1等；從7.2版開始，釋放編號以年份來命名，每年3月份推出的用a表示，9月份推出的則以b表示，例如R2006a代表2006年3月推出的版本，R2009b指2009年下半年推出的版本：
從2014a版起，Matlab界面支持中文。

**其它科學計算軟件**

**商業軟件**

**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。

**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**
是由一些曾在INRIA和ENPC參與Scilab開發的研究人員，在Scilab BUILD4版本的基礎上開發出來的GTK+版本，它集成了建模/模擬工具Scicos1=第一個版本的Scicos是完全用Scilab語言寫成的，但後續版本逐步改用C語言進行開發。由於在Scilab 5版本中出現穩定性及性能問題，開發人員決定此後Scicos僅在ScicosLab中進行後續開發。詳情見 Scilab/Scicos history及其它數量眾多的工具箱，被認為是“惟一一款可以與商業軟件MATLAB/Simulink及MATRIXx/SysstemBuild媲美的開源軟件”。最新穩定版本是4.4.1。

**JAMA**
(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。

**註釋**

**參考文獻**

**引用**

**外部鏈接**
  MATLAB官方網站 date=20101223113123 -   MATLAB線上教材 date=20191231120742 -  Matlab技術論壇 date=20201130231324 -  線上執行Matlab語法 date=20191013035506 -   矩陣實驗室（MATLAB）新浪微博 date=20200501142359 -  Matlab教學 date=20201001071211 

**參見**
 Maple- Maxima- Mathematica- GNU Octave- Scilab- R語言- Origin- Spyder- 基於模型的設計