MATLAB

維基百科,自由的百科全書
前往: 導覽搜尋
MATLAB
Matlab Logo.png
Matlab 2009a Screenshot.png
MATLAB R2009a螢幕截圖
開發者 The MathWorks
穩定版本 R2014a / 2014年3月6日;5個月前 (2014-03-06)
程式語言 C語言Java
作業系統 跨平台
型別 數學軟體
許可協定 專有軟體
網站 MathWorks
MATLAB
編程範型 多範式:命令式程式物件導向陣列英語Array programming
面市時間 二十世紀七十年代末
型態系統 動態
作業系統 跨平台
常用副檔名 .m

MATLAB(矩陣實驗室)是MATrix LABoratory的縮寫,是一款由美國The MathWorks公司出品的商業數學軟體。MATLAB是一種用於演算法開發、資料視覺化資料分析以及數值計算的高階技術計算語言和互動式環境。除了矩陣運算、繪製函式/資料影像等常用功能外,MATLAB還可以用來建立使用者介面及與呼叫其它語言(包括CC++FORTRAN)編寫的程式。

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

歷史[編輯]

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

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

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

主要功能[編輯]

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

  • 可用於技術計算的高階語言
  • 可對代碼、檔案和資料進行管理的開發環境
  • 可以按迭代的方式探查、設計及求解問題的互動式工具
  • 可用於線性代數、統計、傅立葉分析、篩選、最佳化以及數值積分等的數學函式
  • 可用於視覺化資料的2D和3D圖形函式
  • 可用於構建自訂的圖形化使用者介面的各種工具
  • 可將基於MATLAB的演算法與外部應用程式和語言(如C、C++、Fortran、Java、COM以及Microsoft Excel)整合的各種函式

工具箱[編輯]

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

  • 數學和最佳化
  • 統計和資料分析
  • 控制系統設計和分析
  • 訊號處理和通訊
  • 影像處理
  • 測試和測量
  • 金融建模和分析
  • 應用程式部署
  • 資料庫連線和報表
  • 分布式計算

這些工具箱大多是用開放式的MATLAB語言寫成,用戶不但可以檢視原始碼,還可以可根據自己的需要進行修改以及建立自訂函式。此外,常有用戶在MATLAB Central: File Exchange發行自己編寫的MATLAB程式或工具箱,供他人自由下載使用。

MATLAB語言[編輯]

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

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

變數與賦值[編輯]

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

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

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

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)[註 4]可以進行代數或符號運算,如分解多項式因子和解代數方程:

>> syms x y
 
>> A=x^3-3*x^2*y+3*x*y^2-y^3;
 
>> factor(A)
ans =
(x - y)^3

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

>> solve('x^2 - 2*x - 4 = 0')
ans =
 1 - 5^(1/2)
 5^(1/2) + 1

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

圖形影像[編輯]

MATLAB中常用的繪圖命令是plot,例如描繪一個在[-4,4]區間內的正弦函式:

>> x = -4:0.05:4;
>> y = sin(x);
>> plot(x,y)

Sine function.png

利用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)')

Multiple sine function.png

用MATLAB的畫圖命令可以生成複雜的3D圖形[註 5]

>> 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])
Complex 3d plot.png

版本歷史[編輯]

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

版本 釋放編號 年份
MATLAB 1.0 R? 1984年
MATLAB 2 R? 1986年
MATLAB 3 R? 1987年
MATLAB 3.5 R? 1990年
MATLAB 4 R? 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年

從2014a版起,Matlab介面支援中文[11]

其它科學計算軟體[編輯]

商業軟體[編輯]

Maple[編輯]

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

Mathematica[編輯]

Mathematica是史蒂芬·沃爾夫勒姆開發的科學計算軟體,開發工作現由Wolfram Research公司負責。最新版本是2013年1月發行的Mathematica 9.0.1。

LabVIEW[編輯]

LabVIEW是美國國家儀器公司開發的視覺化編程平台,主要用於資料採集儀器控制工業自動化。最新版本是2013年8月發行的LabVIEW 2013。

開源軟體[編輯]

FreeMat[編輯]

FreeMat是一個與MATLAB和互動式資料語言(IDL)很類似的數值計算平台及程式語言。最新版本是2009年10月發行的FreeMat 4.0

GNU Octave[編輯]

GNU Octave是一種主要用於數值計算的高階語言。它除了提供用數值方法解決線性和非線性問題的命令列介面,還提供了一種與MATLAB大抵相容的語言。最新版本是2012年9月4日發行的3.6.3。

Scilab[編輯]

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

ScicosLab[編輯]

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

JAMA[編輯]

JAMA英語JAMA,一種Java語言編程工具包。目前最新1.0.3版本,是2012年11月9日發行的。

注釋[編輯]

  1. ^ 在其創始人Moler的回顧文獻中, 誤將會議名稱的"Decision"誤植成"Design"[2], 而在IEEE該社群官方的歷史紀錄檔案中, 有明確提到MATLAB第一次公開展示的正確會議名稱[4].
  2. ^ MathWorks官方提供的工具箱需透過支付相對應的費用單獨獲取。
  3. ^ 以一個定義為為M的3x3矩陣為例:列優先儲存指的是MATLAB先保存第一列的3個元素,然後保存第二列的,最後保存第三列的元素,從而這9個矩陣元素在MATLAB中的排序是從1到9,所以在呼叫矩陣元素時,M(2)指的是第一列的第二個元素,M(6)指的是第二列第三個元素(當然這兩個元素也可以用2D的方式呼叫,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 Edition. Chapman & Hall/CRC. 2005. ISBN 1-58488-523-8 (English). 一書中的範例,形狀、顏色、角度等參數有修改。
  6. ^ 第一個版本的Scicos是完全用Scilab語言寫成的,但後續版本逐步改用C語言進行開發。由於在Scilab 5版本中出現穩定性及效能問題,開發人員決定此後Scicos僅在ScicosLab中進行後續開發。詳情見Scilab/Scicos history

參考文獻[編輯]

參照[編輯]

  1. ^ Thomas Haigh. The History of Numerical Analysis and Scientific Computing (PDF). Santa Barbara, California. 2004-03-08: (64–65) [2010-04-29] 網頁">(English>). 
  2. ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 Cleve Moler. The Growth of MATLAB and The MathWorks over Two Decades (PDF). January 2006 [2010-04-30] (English). 
  3. ^ MathWorks Founders. MathWorks. [2010-04-29]. 
  4. ^ 4.0 4.1 Schrader, C.B.; Spong, M.W. The IEEE Conference on Decision and Control - tracing CDC history. IEEE Control Systems Magazine. Dec. 2004, 24 (6): 56 – 66 [Jan. 14, 2011]. doi:10.1109/MCS.2004.1368481. 
  5. ^ About The MathWorks. MathWorks. [2010-04-29]. 
  6. ^ MATLAB 7.10-簡介及主要功能. MathWorks中國. [2010-04-29]. 
  7. ^ MATLAB附加產品. MathWorks中國. [2010-04-29]. 
  8. ^ Fundamental MATLAB Classes. MathWorks. [2010-05-01]. 
  9. ^ Documentation for the MATLAB Variables. MathWorks. [2010-05-01]. 
  10. ^ MATLAB Release Notes. MathWorks. [2010-04-30]. 
  11. ^ MATLAB Release Notes. MathWorks. [2014-03-06]. 

外部連結[編輯]

參見[編輯]