Matlab 矩阵与数组 gaunthan Posted on Oct 28 2016 ? Matlab ? > Matlab中的所有变量都是多维数组,不论其数据类型是什么。矩阵只是一个二维数组。 ## 创建数组 ### 使用方括号 在Matlab中,可以通过使用方括号 `[]` 来创建一个数组,如:  元素间的分隔符可使用空格、逗号和分号,其中空格和逗号的含义是一样的: - 空格/逗号:隔开列元素 - 分号:隔开一行 因此,我们可以通过下面的方式来定义一个矩阵:  ### 使用函数 也可以使用函数来创建数组。在Matlab中有三个常用的函数:`ones()`、`zeros()`与`rand()`,它们有多个重载版本。比如可以接收两个参数,用于指定生成的数组的行和列的大小的版本:  ### 从文件中加载 参阅[Matlab 工作区变量](http://leanote.com/blog/post/58134cf1ab644164d4001d17)。 ## 创建矩阵 注意Matlab里面的矩阵只是一个二维数组,因此用于创建数组的方法也都适用于创建矩阵。但由于矩阵在数学上的运用非常广泛,Matlab还提供了许多附加的函数来创建一些比较特殊的矩阵。 ### pascal() 使用`pascal()`函数可以生成对称矩阵(symmetric matrix):  ### magic() 使用`magic()`函数可以生成一个魔方矩阵。魔方矩阵的元素都是互异的,并且每一行、每一列、对角线以及反对角线上的元素之和都是相等的:  ### eye() 使用`eye()`函数可以生成单位矩阵:  ## 矩阵与数组操作 ### 概览 #### 矩阵运算概览 |矩阵运算符|说明| |--| |+|加法运算| |-|减法运算| |*|乘法运算| |/|右除运算| |\\ |左除运算| |^|幂运算| |'|共轭复数转置| |()|生成等差序列| #### 数组运算概览 |数组运算符|说明| |--| |+|加法运算| |-|减法运算| |.*|按元素乘法运算| |./|按元素右除运算| |.\\ |按元素左除运算| |.^|按元素幂运算| |.'|非共轭数组转置| ### 标量运算与函数 Matlab允许使用单个运算符或函数来对数组的每一个元素进行运算。如`m + 1`将数组m的每一个元素增一,而`sin(m)`对每个元素求sin:  ### 转置 在线性代数中,我们常常用到矩阵的转置。在Matlab中,使用一个英文单引号即可转置一个矩阵:  注意,使用 `'` 来转置矩阵,当矩阵的元素是复数时,虚部的符号会取相反。因此如果不想元素的虚部改变,可以使用 `.'` 运算符:  对于实数,这两个运算符的表现是一样的。 ### 行列式 可以使用`det()`命令来求一个方阵的行列式:  ### 求逆 可以通过使用`inv()`函数求一个方阵的逆矩阵,注意只有行列式不为零的方阵,才可以求逆。因此,若传递一个行列式为零或非方阵的矩阵给`inv()`,将会产生一个警告或错误:  ### 相乘 对矩阵进行乘法运算很简单,只需使用 `*` 运算符。我们可以让矩阵m乘以其逆矩阵来看看怎么用:  可逆矩阵乘以其逆矩阵等于单位阵。上面的过程满足要求。 ### 连接 连接(concatenation)将两个数组连接起来,以生成一个更大的数组。实际上,我们创建一个二维数组的时候,便是先把单个元素连接成一维数组,然后再连接这些一维数组连接成二维数组的。 连接使用方括号 `[]` 作为运算符,就像在创建一个数组一样,只不过”元素“现在变成了数组而已:  注意逗号、空格和分号的含义没有发生变化。另外,如果连接的两个数组维度不匹配将发生错误。 ### 逐元素运算 有时候我们不想进行矩阵相乘,而是想让对应位置上的两个元素相乘。这时候可以在乘法运算符前面加个点,即使用`.*`运算符:  其他常用的逐元素运算符还有: |运算符|功能| |--| |`./`|按元素相除| |`.^`|按元素求幂| ## 数组索引 ### 单元素索引 当只想获取数组中特定位置的元素时,可以使用索引。就跟其他编程语言一样,Matlab也支持下标索引,但又有一些不同,它使用的是圆括号而不是方括号:  另一个不同的地方是Matlab中的索引是从1开始的。除了支持指定各个纬度下标的方式,Matlab还支持线性索引。这种方式按列索引,从1开始。如上图中的`a(1, 2)`也可以用`a(3)`来代替。 ### 越界索引的处理 Matlab对于越界的数组索引做了特殊的处理,当读操作越界时,将报错;而写操作越界时,不会报错,相反还会开辟对应的存储空间,以将值写到正确的位置上。这意味着我们可以用下面这种方式而不是调用 `zeros()` 来同样快速地创建一个全零的大数组:  从上图中我们还发现了一个特点:对于填补的位置,其值为0。 ### 多元素索引 为了一次引用数组的多个元素,我们可以使用冒号运算符`:`,如下所示:  当然对于列也可以进行同样的操作。冒号`:`两边的数值指定起始和结束,如果缺少这两个数,则代表全部。因此,`a(:,:)`也代表整个数组。 另外,我们也可以使用`:`来快速创建一个等差序列,标准的格式定义为: start:step:end 如下面我们创建了从0到5的步长为1的等差序列:  由于Matlab默认步长为1,因此上面的例子我们也可以使用`0:5`而不是`0:1:5`。 赏 Wechat Pay Alipay Matlab 工作区变量 C++ Empty class optimization