矩阵与向量的创建在上一篇文章中已经提到,所以这里直接进行操作和运算
运算
现有一矩阵a
:
>> a = [1 2 3; 4 5 6; 7 8 10]
a =
1 2 3
4 5 6
7 8 10
矩阵与常数相加
>> a + 10
ans =
11 12 13
14 15 16
17 18 20
>> sin(a)
ans =
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 -0.5440
转置矩阵
>>a'
ans =
1 4 7
2 5 8
3 6 10
逆矩阵
>> inv(a)
ans =
-0.6667 -1.3333 1.0000
-0.6667 3.6667 -2.0000
1.0000 -2.0000 1.0000
标准矩阵乘法
>> p = a*inv(a)
p =
1.0000 0 0
0.0000 1.0000 0
0.0000 -0.0000 1.0000
请注意,p 不是整数值矩阵。MATLAB 将数字存储为浮点值,算术运算可以区分实际值与其浮点表示之间的细微差别。使用 format 命令可以显示更多小数位数:
>> format long
>> p = a*inv(a)
p =
1.000000000000000 0 0
0.000000000000002 1.000000000000000 0
0.000000000000002 -0.000000000000004 1.000000000000000
format 仅影响数字显示,而不影响 MATLAB 对数字的计算或保存方式。
元素级乘法
使用.*
运算符
>> a .* 3
ans =
3 6 9
12 15 18
21 24 30
>> a .* a
ans =
1 4 9
16 25 36
49 64 100
乘法、除法和幂的矩阵运算符分别具有执行元素级运算的对应数组运算符。例如,计算 a 的各个元素的三次方:
>> a .^ 3
ans =
1 8 27
64 125 216
343 512 1000
复数
复数包含实部和虚部,虚数单位是 -1 的平方根。
>> sqrt(-1)
ans =
0.0000 + 1.0000i
要表示复数的虚部,请使用 i 或 j,例如:
>> c = [3+4i, 4+3j; -i, 10j]
c =
3.0000 + 4.0000i 4.0000 + 3.0000i
0.0000 - 1.0000i 0.0000 +10.0000i
操作
获取尺寸
>> size(a)
ans =
3 3
实际上,size()
命令返回的是一个 1×2 的矩阵,我们可以用sz
来存放。
设置 sz = size(a)
因此 就是一个1×2的矩阵,第一个元素是3,第二个元素是3。
也可以使用length()
,它将返回最大维度的大小:
>> v = [1 2 3 4];
>> length(v)
ans =
4
>> length(a)
ans =
3
数组索引
引用数组中的特定元素有两种方法。最常见的方法是指定行和列下标,例如
>> a(2, 3)
ans =
6
另一种方法不太常用,但有时非常有用,即使用单一下标按顺序向下遍历每一列,称为线性索引
>> a(8)
ans =
6
如果尝试在赋值语句右侧引用数组外部元素,MATLAB 会引发错误。
>> a(5,5)
位置 1 处的索引超出数组边界(不能超出 3)。
不过,您可以在赋值语句左侧指定当前维外部的元素。数组大小会增大以便容纳新元素。
>> a(5, 5) = 33
a =
1 2 3 0 0
4 5 6 0 0
7 8 10 0 0
0 0 0 0 0
0 0 0 0 33
>> size(a)
ans =
5 5
要引用多个数组元素,请使用冒号运算符,这使您可以指定一个格式为 start:end 的范围。
>> a(1:3, 2:3)
ans =
2 3
5 6
8 10
单独的冒号(没有起始值或结束值)指定该维中的所有元素。
串联
串联是连接数组以便形成更大数组的过程。
实际上,第一个数组是通过将其各个元素串联起来而构成的。成对的方括号 [] 即为串联运算符。
>> A = [a, a]
A =
1 2 3 1 2 3
4 5 6 4 5 6
7 8 10 7 8 10
>> A = [a; a]
A =
1 2 3
4 5 6
7 8 10
1 2 3
4 5 6
7 8 10