热门问题
时间线
聊天
视角

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