Matlab作为一个数学软件,对矩阵运算的支持是非常强大的。实际上,Matlab的英文全称就是Matrix Laboratory(矩阵实验室)。因此,我们可以把Matlab中的大多数数据都看作矩阵,一维数据看作是1×1的矩阵,行向量或者列向量可看作1×n的矩阵或n×1的矩阵。因此,实际上不需要对数值运算和矩阵运行加以区分。本文中大多数情况会默认把所有数据看作矩阵:
数值的四则运算没有什么特别的,就是普通的+、-、*、/
,而矩阵的四则运算就有所不同:
基本运算
矩阵相加减
矩阵的加减法和数值加减法相同,为对应元素相加减。
>> a = ones(3)
a =
1 1 1
1 1 1
1 1 1
>> b = eye(3)
b =
1 0 0
0 1 0
0 0 1
>> a + b
ans =
2 1 1
1 2 1
1 1 2
>>
矩阵乘除法
在Matlab中,*
运算符表示矩阵乘法;而/
表示矩阵除法,这里相当于对第二个矩阵求逆,然后用第一个矩阵乘第二个矩阵。
>> a * b
ans =
1 1 1
1 1 1
1 1 1
>> a / b
ans =
1 1 1
1 1 1
1 1 1
>> a * pinv(b)
ans =
1 1 1
1 1 1
1 1 1
>>
利用.*
和./
可以计算两个矩阵对应元素乘除法:
>> a .* b
ans =
1 0 0
0 1 0
0 0 1
>> b ./ a
ans =
1 0 0
0 1 0
0 0 1
>>
实际上,当矩阵的维度将为1×1之后,矩阵运算就是数值运算。
此外,kron()函数可以求两个矩阵的张量积,这里不赘述。
矩阵幂运算
矩阵幂运算的运算符为^
,表示做若干次矩阵运算;而矩阵元素的幂运算符为.^
,作用是对矩阵中的每个元素进行幂运算。
>> a^2
ans =
3 3 3
3 3 3
3 3 3
>> a.^2
ans =
1 1 1
1 1 1
1 1 1
>>
符号标记
下面列出一些常见的标记:
符号 | 意义 |
---|---|
[ ] | 表示一个矩阵 |
() | 函数调用或者数据索引 |
: | 生成等间隔序列或者序列索引 |
; | 列分隔,抑制输出显示 |
, | 元素分隔 |
' | 矩阵转置 |
.' | 矩阵共轭转置 |
% | 注释 |
在Matlab中,用[]
表示矩阵,而利用"()"来进行索引,例如:
>> A = [1, 2; 3, 4; 5, 6]; % generate
>> A(2,:)
ans =
3 4
>> A
A =
1 2
3 4
5 6
程序中,用[]
生成了一个矩阵并赋值给A
;然后利用()
进行索引,(2, :)
表示索引第2行的所有元素,相当于(2, 1:3)
。此外,第一行代码中利用,
对一行的元素进行分隔,利用用;
对每列进行分隔,然后在最后面加一个分号来抑制显示输出矩阵A
,如果不加最后一个分号,则结果如下:
>> A = [1, 2; 3, 4; 5, 6]
A =
1 2
3 4
5 6
>>
Matlab交互界面直接输出了矩阵 A
。
特殊常量变量
Matlab中有一些常见的特殊常量和变量如下:
符号 | 意义 |
---|---|
ans | 最近计算的答案 |
eps | 浮点数精度 |
pi | 圆周率 |
NaN | 非数值 |
Inf | 无穷 |
i,j | 虚数(−1\sqrt{-1}−1) |
其中,eps
默认返回最大的浮点数精度。当作用于一个数时,则返回该数的最大精度。如:
>> eps
ans =
2.2204e-16
>> eps(1)
ans =
2.2204e-16
>> eps(10000)
ans =
1.8190e-12
NaN
表示非数值,通常情况下是程序中出现了不合理的运算,如:
>> 0/0
ans =
NaN
>> Inf - Inf
ans =
NaN
>> Inf/Inf
ans =
NaN