文章目录
矩阵运算
矩阵的代数运算应包括线性代数的各个方面,这里只介绍一部分
加减、数乘与乘法
>> A = [1 2 3;4 5 6;7 8 9],B = [9 8 7;6 5 4;3 2 1]
A =
1 2 3
4 5 6
7 8 9
B =
9 8 7
6 5 4
3 2 1
>> C = A + B,D = A - B,E = A * B %矩阵的加减与乘法
C =
10 10 10
10 10 10
10 10 10
D =
-8 -6 -4
-2 0 2
4 6 8
E =
30 24 18
84 69 54
138 114 90
>> F = 3 * A %矩阵的数乘
F =
3 6 9
12 15 18
21 24 27
矩阵的逆
矩阵的逆可以使用函数inv(A)来实现
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B = inv(A)
B =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
矩阵的除法
矩阵的除法分为左除和右除
- 左除 A * X = B X = A\B相当于X = inv(A) * B
- 右除 X * A = B X = B/A相当于X = B * inv(A)
例:求下列方程组的解
>> A = [1 4 -7 6;0 2 1 1;0 1 1 3;1 0 1 -1]
A =
1 4 -7 6
0 2 1 1
0 1 1 3
1 0 1 -1
>> B = [0; -8;-2;1]
B =
0
-8
-2
1
>> X = A\B
X =
3.0000
-4.0000
-1.0000
1.0000
>> X = inv(A) * B
X =
3.0000
-4.0000
-1.0000
1.0000
矩阵幂运算
如线性代数中定义的幂运算一样,用 表示 ,所以A必须为方阵才能进行幂运算。
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B = A ^ 3
B =
1197 1029 1149
1077 1125 1173
1101 1221 1053
数组运算
数组的加减与数乘与数乘运算与矩阵运算相同,但是乘除运算不同,矩阵的乘法与除法是把矩阵看做是一个整体,而数组的乘除运算是数组对应元素的运算,两个数组在运算时,必须保证两数组的规模相同,这一点也是和矩阵不同的地方。
另一个数组运算与矩阵运算不同的是,数组的运算符号是.*,./,.\,.^,前面有一个点,称为点乘、点除。
数组乘法
数组的乘法是两数组对应位置的元素相乘,注意事项在前面已经说明,注意两数组的规模要相同,并且用点乘。
>> A = [1 2 3;4 5 6]
A =
1 2 3
4 5 6
>> B = [1 1 2;3 2 1]
B =
1 1 2
3 2 1
>> C = A .* B
C =
1 2 6
12 10 6
数组除法
同矩阵除法,也分为左除和右除,但是意义与矩阵的左除和右除不一样,
- 右除:A ./ B 就是数组A对应元素除以B
- 左除:A .\ B 就是数组B对应元素除以A
>> A,B
A =
1 2 3
4 5 6
B =
1 1 2
3 2 1
>> C = A./ B
C =
1.0000 2.0000 1.5000
1.3333 2.5000 6.0000
>> D = A.\ B
D =
1.0000 0.5000 0.6667
0.7500 0.4000 0.1667
数组幂运算
数组的幂运算就是各个元素的幂运算,注意.^
>> A
A =
1 2 3
4 5 6
>> A .^ 2
ans =
1 4 9
16 25 36
矩阵的基本属性
行列式
使用函数det(A)实现
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> det(A) %计算魔方矩阵的行列式
ans =
-360
矩阵的秩
rank(A)可以用来求解矩阵的秩
>> A = [1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> ra = rank(A)
ra =
2
矩阵的特征值与特征向量
求矩阵A的特征值和特征向量的数值解,有两个函数可以用
- [X ] = eig(A)
- [X ] = eigs(A) 该种方法使用迭代法求解,所以规模上最多给出6个特征值和特征向量
>> A
A =
1 -3 3
3 -5 3
6 -6 4
>> [X lambda] = eig(A)
X =
-0.4082 -0.8103 0.1933
-0.4082 -0.3185 -0.5904
-0.8165 0.4918 -0.7836
lambda =
4.0000 0 0
0 -2.0000 0
0 0 -2.0000
lambda矩阵对角线给出了矩阵A的特征值,与这些特征值相对应的特征向量用X中相对应的列来代表。
矩阵的条件数
cond(A)函数用来求矩阵的条件数,条件数的大小反映出对于方程AX=b,如果A和b发生细微变化,解变化的剧烈程度,当条件数很大时,说明该矩阵是病态矩阵或者不稳定矩阵。
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> cond(A)
ans =
4.3301
一些常用函数
矩阵/数组的提取与翻转
函数 | 功能 |
---|---|
triu(A) | 提取A的上三角矩阵,其余补零 |
tril(A) | 下三角 |
diag(A) | 提取矩阵A的对角线元素 |
flipud(A) | 将A沿水平轴上下翻转 |
fliplr(A) | 沿垂直轴左右翻转 |
flipdim(A,dim) | dim=1,按行翻转;dim=2,按列翻转 |
rot90(A) | 矩阵A逆时针旋转90。 |
上述中diag()函数有两个用法,当输入的参数是矩阵时,提取出矩阵的对角元素,如输入参数为一向量,则以向量中的元素为对角元素生成一对角矩阵
>> A
A =
1 -3 3
3 -5 3
6 -6 4
>> triu(A)
ans =
1 -3 3
0 -5 3
0 0 4
>> tril(A)
ans =
1 0 0
3 -5 0
6 -6 4
>> A
A =
1 -3 3
3 -5 3
6 -6 4
>> diag(A)
ans =
1
-5
4
>> flipud(A) %上下翻转
ans =
6 -6 4
3 -5 3
1 -3 3
>> fliplr(A) %左右翻转
ans =
3 -3 1
3 -5 3
4 -6 6
>> flipdim(A,1) %沿行方向上翻转,即上下翻转
ans =
6 -6 4
3 -5 3
1 -3 3
>> flipdim(A,2) %沿列方向上翻转,即左右翻转
ans =
3 -3 1
3 -5 3
4 -6 6
>> A
A =
1 -3 3
3 -5 3
6 -6 4
>> rot90(A)
ans =
3 3 4
-3 -5 -6
1 3 6
指数运算
对于矩阵,在线性代数定义了其指数运算的规则,而数组的指数运算指的是数组各元素的指数运算。
数组进行指数运算的函数是exp(),矩阵是expm(),m代表matrix,表示为专门为矩阵专门设计的。
这里需要注意的是expm()输入的矩阵必须为方阵。
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B = expm(A)
B =
1.0e+06 *
1.0898 1.0896 1.0897
1.0896 1.0897 1.0897
1.0896 1.0897 1.0897
>> C = exp(A)
C =
1.0e+03 *
2.9810 0.0027 0.4034
0.0201 0.1484 1.0966
0.0546 8.1031 0.0074