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++类似。它支持包括逻辑（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是动态检查的，这意味着变量可以在未定义其类型的情况下赋值并且变量的类型也可以改变，除非将变量看做是符号对象。变量值可以取自常量，计算中的其他变量的值，或某一函数的输出。例如：
>> x = 17x =
 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保持一致，两者使用的均为列优先存储，而非行优先存储。在进行较大的矩阵运算时，这一差别对性能的影响是不应忽略的。
MATLAB提供了定义简单数组的简单方式，使用语法：初值:增量:终值。例如：
>> array = 1:2:9array =
 1 3 5 7 9
定义了一个名为array的变量（或向已存在的变量array赋予一个新值），其值为包含1, 3, 5, 7, 9的一个向量。即数组由1开始（初值），每次以增量2（增量）递增，当达到9（终值）时停止。
>> array = 1:3:9array =
 1 4 7
在该语法中增量可被省略（这样仅剩一个冒号），这时增量采用默认值1。
>> ari = 1:5ari =
 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） = 10M =
     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）可以进行代数或符号运算，如分解多项式因子和解代数方程：
>> 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
求得方程的两个解为和。

Maple

Maple是Waterloo Maple Inc.（简称Maplesoft）开发的商业计算机代数系统，用于快速计算、开发设计表单、教学基本概念或创建高保真模拟模型等。最新版本是2018年3月发布的Maple 2018.0，分Personal（个人版），Professional（专业版），Academic（学术版），Government（政府版）和Student（学生版）。

Mathematica

Mathematica是斯蒂芬·沃尔夫勒姆开发的科学计算软件，开发工作现由Wolfram Research公司负责。最新版本是2018年3月8日发布的Mathematica 11.3.0。

LabVIEW

LabVIEW是美国国家仪器公司开发的可视化编程平台，主要用于数据采集，仪器控制和工业自动化。最新版本是2017年8月发布的LabVIEW 2017。

FreeMat

FreeMat是一个与MATLAB和交互式数据语言（IDL）很类似的数值计算平台及程序语言。最新版本是2009年10月发布的FreeMat 4.0

GNU Octave

GNU Octave是一种主要用于数值计算的高级语言。它除了提供数值方法解决线性和非线性问题的命令接口，还提供了一种与MATLAB大抵兼容的语言。最新版本是2019年3月01日发布的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是一种高级通用语言。