MATLAB编程-简介
数组操作简介(Introduction to Array Operations)
由于数组是 MATLAB 中的基本数据结构,因此了解如何有效使用数组非常重要。请参阅前一节了解数组的基础。
在 MATLAB 中,数组遵循与数学中相同的规则:默认情况下使用矩阵的定义方式进行运算,除非使用一个称为点操作符(dot operator)的特殊运算符。
由于数组操作与数学运算非常相似,因此有效使用 MATLAB 需要掌握基本的线性代数知识。不过,在术语使用上我们不会像数学那样严谨,例如“向量”和“矩阵”在 MATLAB 中都表示双精度数组(实质都是矩阵),而 MATLAB 将只有一行或一列的矩阵称为向量。但 MATLAB 中也有针对向量的专用函数,详见向量模块。
基础操作(Basics)
访问矩阵元素(Accessing Elements of a Matrix)
使用单个索引:
>> a = [1, 2, 3];
>> a(1)
ans = 1
>> a(3)
ans = 3
超出索引范围会报错:
>> a(5)
??? Index exceeds matrix dimensions.
使用多个索引((i,j))访问二维矩阵元素:
>> a = [1, 2; 3, 4];
>> a(1,2)
ans = 2
>> a(2,1)
ans = 3
使用单一线性索引(列优先):
MATLAB 采用列优先(column-major)顺序。
>> a = [1, 2, 3; 4, 5, 6];
>> a(3)
ans = 2
使用冒号(:)进行块索引:
>> a = [1, 2, 3; 4, 5, 6];
>> a(1,:) % 第一行所有列
ans = 1 2 3
>> a(1,1:2) % 第一行前两个元素
ans = 1 2
>> a(:) % 转为列向量(列优先)
ans =
1
4
2
5
3
6
使用 end
操作符访问最后的元素:
>> a(1, 2:end)
ans = 2 3
逻辑索引(Logical Addressing)
除了常规索引,还可以使用逻辑条件筛选数组中的元素。例如,只提取在 2 和 4 之间的值:
方法一:使用 find
函数:
>> a = [1.1, 2.1, 3.2, 4.5];
>> INDICES = find(a >= 2 & a <= 4);
>> a(INDICES)
ans = 2.1 3.2
方法二:使用逻辑索引:
>> a(a >= 2 & a <= 4)
ans = 2.1 3.2
基本运算(Basic Operations)
数组上的算术运算:
加法和减法:
>> [1, 2, 3] - [1, 2, 1]
ans = 0 0 2
标量乘法:
>> 2 * [1, 2, 3]
ans = 2 4 6
数组间乘除(矩阵乘法):
-
只有在左操作数的列数等于右操作数的行数时,
*
才能计算矩阵乘积。
>> a = [1, 2; 3, 4];
>> a * a
ans =
7 10
15 22
>> a = [1, 2, 3]; b = [1; 2; 3];
>> a * b
ans = 14
错误示例:
>> a * a
??? Inner matrix dimensions must agree.
除法 /
:右操作数必须可逆。对于方阵,a / b
相当于 a * inv(b)
。
>> a = [1,2;3,4]; b = [1,2;1,2];
>> b / a
ans =
1 0
1 0
>> a / b
Warning: Matrix is singular to working precision.
ans =
Inf Inf
Inf Inf
点操作(Component-wise Operations)
若需进行逐元素乘法、除法或幂运算,请使用点操作符(.*
、./
、.^
):
>> a = [1,2,3]; b = [0,1,2];
>> a .* b
ans = 0 2 6
转置(Transpose)
转置使用 .'
:
>> array = [1,2;3,4]
>> array.'
ans =
1 3
2 4
数组布尔运算(Boolean Operators on Arrays)
布尔运算可逐元素比较两个数组,返回相同大小的逻辑数组:
>> A = [2,4]; B = [1,5];
>> A < B
ans = [0 1]
注意: 用数组比较作为循环条件可能引起歧义,因为返回的是数组而不是单个布尔值。
推荐使用 any()
或 all()
:
-
any(array)
:只要有一个非零元素返回true
-
all(array)
:所有元素非零才返回true
拼接数组(Concatenating Arrays)
水平拼接(Horizontal):
>> a = [1,2;3,4];
>> b = [5,6;7,8];
>> c = [a, b]
c =
1 2 5 6
3 4 7 8
垂直拼接(Vertical):
>> c = [a; b]
c =
1 2
3 4
5 6
7 8
求解线性方程组(Solving Linear Systems)
求解形如 Ax = b
的线性方程组,使用反斜杠运算符 \
:
>> A = [4 5; 2 8];
>> b = [23; 28];
>> x = A \ b
x =
2
3