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 年，傑克・李特、克里夫・莫勒爾和斯蒂夫・班格爾特合作成立了 MathWorks 公司，正式把 MATLAB 推向市場。MATLAB 最初是由莫勒爾用 FORTRAN 編寫的，李特和班格爾特花了約一年半的時間用 C 重新編寫了 MATLAB 並增加了一些新功能，同時，李特還開發了第一個系統控制工具箱，其中一些代碼到現在仍然在使用。C 語言版的面向 MS-DOS 系統的 MATLAB 1.0 在拉斯維加斯舉行的 IEEE 決策與控制會議（IEEE Conference on Decision and Control）正式推出，它的第一份訂單只售出了 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）進行功能擴充，每一個工具箱就是實現特定功能的函數的集合。MathWorks 提供的工具箱分以下幾大類：

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

這些工具箱大多是用開放式的 MATLAB 語言寫成，使用者不但可以檢視原始碼，還可以可根據自己的需要進行修改以及建立自訂函數。此外，常有使用者在 MATLAB Central: File Exchange （頁面存檔備份，存於網際網路檔案館）發布自己編寫的 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 是動態檢查的，這意味著變數可以在未定義其類型的情況下賦值並且變數的類型也可以改變，除非將變數看做是符號物件。變數值可以取自常數，計算中的其他變數的值，或某一函數的輸出。例如：

### 向量和矩陣

MATLAB 的意思是 "矩陣實驗室"，因此它提供了許多建立向量，矩陣和多維陣列的便捷的方式。在 MATLAB 自己的語言中，一個_向量_（vector）指的是一維（1×_N_ 或 _N_×1）矩陣，在其他語言中通常被叫做陣列（array）。_矩陣_（matrix）通常指的是 2 - 維陣列，例如 _m_×_n_ 陣列其中 _m_ 和 _n_ 大於或等於 1。多維陣列通常指的是維數大於 2 的陣列。

需要注意的是，雖然 MATLAB 用 C 語言重寫，但是在矩陣儲存方式上卻和 FORTRAN 保持一致，兩者使用的均為列優先儲存，而非行優先儲存。在進行較大的矩陣運算時，這一差別對效能的影響是不應忽略的。

MATLAB 提供了定義簡單陣列的簡單方式，使用語法：_初值_`:`_增量_`:`_終值_。例如：

定義了一個名為 `array` 的變數（或向已存在的變數 `array` 賦予一個新值），其值為包含 1, 3, 5, 7, 9 的一個向量。即陣列由 1 開始（_初值_），每次以增量 2（_增量_）遞增，當達到 9（_終值_）時停止。

在該語法中_增量_可被省略（這樣僅剩一個冒號），這時增量採用預設值 1。

由於預設增量為 1，上面的語句對變數 `ari` 用 1, 2, 3, 4, 5 的向量賦值。 
在 MATLAB 內定義矩陣同樣很簡單，例如：

 
在 MATLAB 記憶體取矩陣元素同樣非常簡單，例如：

 
若要對矩陣內所有元素做同樣的運算，如次方倍，則需要在運算元前面加上 "."，例如：

 
若不在運算元前面加上 "." 則代表矩陣運算：

### 代數 / 符號運算

利用 MATLAB 的符號數學工具箱（Symbolic Math Toolbox）可以進行代數或符號運算，如分解多項式因子和解代數方程式：

把多項式 $A=x^{3}-3x^{2}y+3xy^{2}-y^{3}$ 簡化成了 $(x-y)^{3}$ 。

求得方程式 $x^{2}-2x-4=0$ 的兩個解為 $1+{\sqrt {5}}$ 和 $1-{\sqrt {5}}$ 。

## 圖形和圖形化使用者介面編程

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 大抵相容的語言。最新版本是 2019 年 3 月 1 日發布的 5.1.0。

#### Scilab

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

#### ScicosLab

ScicosLab 是由一些曾在 INRIA 和 ENPC 參與 Scilab 開發的研究人員，在 Scilab BUILD4 版本的基礎上開發出來的 GTK + 版本，它整合了建模 / 類比工具 Scicos 及其它數量眾多的工具箱，被認為是「惟一一款可以與商業軟體 MATLAB/Simulink 及 MATRIXx/SysstemBuild 媲美的開源軟體」。最新穩定版本是 4.4.1。

#### JAMA

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 官方網站 （頁面存檔備份，存於網際網路檔案館）
* MATLAB 線上教材 （頁面存檔備份，存於網際網路檔案館）
* Matlab 技術論壇 （頁面存檔備份，存於網際網路檔案館）
* 線上執行 Matlab 語法 （頁面存檔備份，存於網際網路檔案館）
* 矩陣實驗室（MATLAB）新浪微博 （頁面存檔備份，存於網際網路檔案館）
* Matlab 教學 （頁面存檔備份，存於網際網路檔案館）

## 參見

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