热门问题
时间线
聊天
视角

MATLAB

多範式數值計算環境 来自维基百科,自由的百科全书

MATLAB
Remove ads

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

快速預覽 開發者, 首次發布 ...
Remove ads
快速預覽 編程範型, 設計者 ...

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

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

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

Remove ads

歷史

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

1984年,傑克·李特克里夫·莫勒爾斯蒂夫·班格爾特英語Steve Bangert合作成立了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]

Remove ads

主要功能

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的變量名字跟許多程式語言一樣,嚴格區分大小寫,例如,varVARVar是三個不同的變量。另外,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×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
Remove ads

代數/符號運算

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

求得方程的兩個解為

Remove ads

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

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

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

Thumb

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

Thumb

用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])
Thumb
Remove ads

版本歷史

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

更多資訊 版本, 發行編號 ...

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

其它科學計算軟件

商業軟件

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。[19]

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。[20]

註釋

參考文獻

外部連結

參見

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads