[https://zh.wikipedia.org/wiki/MATLAB]
[https://zh.wikipedia.org/wiki/GNU_Octave]
MATLAB[编辑]
![]() | |
![]()
MATLAB R2017a屏幕截图
| |
开发者 | The MathWorks |
---|---|
稳定版本 |
R2017a / 2017年3月9日
|
编程语言 | C语言、Java |
操作系统 | 跨平台 |
类型 | 数学软件 |
许可协议 | 专有软件 |
网站 | MathWorks |
编程范型 | 多范式:命令式、程序、面向对象、阵列 |
---|---|
发行时间 | 二十世纪七十年代末 |
类型系统 | 动态、弱 |
操作系统 | 跨平台 |
常用文件扩展名 | .m .p .fig |
|
MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C、C++、Java、Python和FORTRAN)编写的程序。
尽管MATLAB主要用于数值运算,但利用为数众多的附加工具箱(Toolbox)它也适合不同领域的应用,例如控制系统设计与分析、图像处理、信号处理与通讯、金融建模和分析等。另外还有一个配套软件包Simulink,提供一个可视化开发环境,常用于系统模拟、动态/嵌入式系统开发等方面。
目录
[隐藏]历史[编辑]
1970年代末到80年代初,时任美国新墨西哥大学教授的克里夫·莫勒尔为了让学生更方便地使用LINPACK及EISPACK(需要通过FORTRAN编程来实现,但当时学生们并无相关知识),独立编写了第一个版本的MATLAB。这个版本的MATLAB只能进行简单的矩阵运算,例如矩阵转置、计算行列式和本征值,此版本软件分发出大约两三百份[1][2]。
1984年,杰克·李特、克里夫·莫勒尔和斯蒂夫·班格尔特合作成立了MathWorks公司,正式把MATLAB推向市场[2][3]。MATLAB最初是由莫勒尔用FORTRAN编写的,李特和班格尔特花了约一年半的时间用C重新编写了MATLAB并增加了一些新功能,同时,李特还开发了第一个系统控制工具箱,其中一些代码到现在仍然在使用[2]。C语言版的面向MS-DOS系统的MATLAB 1.0在拉斯维加斯举行的IEEE决策与控制会议(IEEE Conference on Decision and Control)正式推出[2][4][a],它的第一份订单只售出了10份拷贝[2],而到了现在,根据MathWorks自己的数据[5],目前世界上100多个国家的超过一百万工程师和科学家在使用MATLAB和Simulink。
1992年,学生版MATLAB推出;1993年,Microsoft Windows版MATLAB面世;1995年,推出Linux版[2]。
主要功能[编辑]
MATLAB的主要提供以下功能[6]:
- 可用于技术计算的高级语言
- 可对代码、文件和数据进行管理的开发环境
- 可以按迭代的方式探查、设计及求解问题的交互式工具
- 可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积分等的数学函数
- 可用于可视化数据的二维和三维图形函数
- 可用于构建自定义的图形用户界面的各种工具
- 可将基于MATLAB的算法与外部应用程序和语言(如C、C++、Fortran、Java、COM以及Microsoft Excel)集成的各种函数
工具箱[编辑]
MATLAB的一个重要特点是可扩展性。作为Simulink和其它所有MathWorks产品的基础,MATLAB可以通过附加的工具箱(Toolbox)进行功能扩展,每一个工具箱就是实现特定功能的函数的集合[b]。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的变量名字跟许多程序语言一样,严格区分大小写,例如,var、VAR和Var是三个不同的变量。另外,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)指的是一维(1×N或N×1)矩阵,在其他语言中通常被叫做数组(array)。矩阵(matrix)通常指的是2-维数组,例如m×n数组其中m和n大于或等于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
代数/符号运算[编辑]
利用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
把多项式A=x3−3x2y+3xy2−y3简化成了(x−y)3
。
>> solve('x^2 - 2*x - 4 = 0')ans =
1 - 5^(1/2)
5^(1/2) + 1
求得方程x2−2x−4=0的两个解为1+5
和1−5
。
图形图像[编辑]
MATLAB中常用的绘图命令是plot,例如描绘一个在[-4,4]区间内的正弦函数:
>> x = -4:0.05:4;
>> y = sin (x);
>> plot(x,y)
|
利用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)')
|
用MATLAB的画图命令可以生成复杂的三维图形[e]: