取消输出
如果您在仅键入语句后按 Return 或 Enter,MATLAB 会在屏幕上自动显示结果。但是,如果使用分号结束行,MATLAB 会执行计算,但不会显示任何输出。当生成大型矩阵时,此功能尤其有用。例如,
A = magic(100);
输入长语句
如果语句无法容纳在一行中,请使用省略号(三个句点)...
,后跟 Return 或 Enter 以指示该语句在下一行继续。例如,
s = 1 -1/2 + 1/3 -1/4 + 1/5 - 1/6 + 1/7 ...
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;
=
、+
和 - 符号周围的空白是可选的,但可提高可读性。
命令行编辑
使用键盘上的各个箭头键和控制键可以重新调用、编辑和重用先前键入的语句。例如,假定您错误地输入了
rho = (1 + sqt(5))/2
sqrt
的拼写不正确。MATLAB 会给出以下错误信息
Undefined function 'sqt' for input arguments of type 'double'.
下标
A
的行 i
和列 j
中的元素通过 A(i,j)
表示。例如,A(4,2)
表示第四行和第二列中的数字。在幻方矩阵中,A(4,2)
为 15
。因此,要计算 A
第四列中的元素的总和,请键入
A(1,4) + A(2,4) + A(3,4) + A(4,4)
此下标生成
ans =
34
但这不是计算某列总和的最佳方法。
此外,还可以使用单一下标 A(k)
引用矩阵的元素。单一下标是引用行和列向量的常见方法。但是,也可以对满二维矩阵应用单一下标。在这种情况下,数组被视为一个由原始矩阵的列构成的长列向量。因此,在幻方矩阵中,A(8)
是另一种引用存储在 A(4,2)
中的值 15
的方法。
如果尝试使用矩阵外部元素的值,则会生成错误:
t = A(4,5)
索引超出矩阵维度。
相反,如果将值存储在矩阵外部元素中,则会增大大小以便容纳新元素:
X = A;
X(4,5) = 17
X =
16 3 2 13 0
5 10 11 8 0
9 6 7 12 0
4 15 14 1 17
冒号运算符
冒号
:
是最重要的 MATLAB® 运算符之一。它以多种不同形式出现。表达式1:10
是包含从 1 到 10 之间的整数的行向量:
1 2 3 4 5 6 7 8 9 10
要获取非单位间距,请指定增量。例如,
100:-7:50
为
100 93 86 79 72 65 58 51
而
0:pi/4:pi
为
0 0.7854 1.5708 2.3562 3.1416
包含冒号的下标表达式引用部分矩阵:
A(1:k,j)
表示
A
第j
列中的前k
个元素。因此,sum(A(1:4,4))
计算第四列的总和。但是,执行此计算有一种更好的方法。冒号本身引用矩阵行或列中的所有元素,而关键字
end
引用最后一个行或列。因此,sum(A(:,end))
计算
A
最后一列中的元素的总和:ans = 34
为什么 4×4 幻方矩阵的幻数和等于 34?如果将介于 1 到 16 之间的整数分为四个总和相等的组,该总和必须为
sum(1:16)/4
当然,也即
ans = 34
串联
串联是连接小矩阵以便形成更大矩阵的过程。实际上,第一个矩阵是通过将其各个元素串联起来而构成的。成对的方括号
[]
即为串联运算符。例如,从 4×4 幻方矩阵A
开始,组成B = [A A+32; A+48 A+16]
结果会生成一个 8×8 矩阵,这是通过连接四个子矩阵获得的:
B = 16 3 2 13 48 35 34 45 5 10 11 8 37 42 43 40 9 6 7 12 41 38 39 44 4 15 14 1 36 47 46 33 64 51 50 61 32 19 18 29 53 58 59 56 21 26 27 24 57 54 55 60 25 22 23 28 52 63 62 49 20 31 30 17
此矩阵是一个接近于幻方矩阵的矩阵。此矩阵的元素是经过重新排列的整数
1:64
。此矩阵的列总和符合 8×8 幻方矩阵的要求:sum(B) ans = 260 260 260 260 260 260 260 260
但是其行总和
sum(B')'
并不完全相同。要使其成为有效的 8×8 幻方矩阵,需要进行进一步操作。
删除行和列
只需使用一对方括号即可从矩阵中删除行和列。首先
X = A;
然后,要删除 X
的第二列,请使用
X(:,2) = []
这会将 X
更改为
X =
16 2 13
5 11 8
9 7 12
4 14 1
如果您删除矩阵中的单个元素,结果将不再是矩阵。因此,以下类似表达式
X(1,2) = []
将会导致错误。但是,使用单一下标可以删除一个元素或元素序列,并将其余元素重构为一个行向量。因此
X(2:2:10) = []
生成
X =
16 9 2 7 13 12 1
标量扩展
可以采用多种不同方法将矩阵和标量合并在一起。例如,通过从每个元素中减去标量而将其从矩阵中减去。幻方矩阵的元素平均值为 8.5,因此
B = A - 8.5
形成一个列总和为零的矩阵:
B =
7.5 -5.5 -6.5 4.5
-3.5 1.5 2.5 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5
sum(B)
ans =
0 0 0 0
通过标量扩展,MATLAB 会为范围中的所有索引分配一个指定标量。例如,
B(1:2,2:3) = 0
将 B
的某个部分清零:
B =
7.5 0 0 4.5
-3.5 0 0 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5
逻辑下标
根据逻辑和关系运算创建的逻辑向量可用于引用子数组。假定 X
是一个普通矩阵,L
是一个由某个逻辑运算生成的同等大小的矩阵。那么,X(L)
指定 X
的元素,其中 L
的元素为非零。
通过将逻辑运算指定为下标表达式,可以在一个步骤中完成这种下标。假定您具有以下数据集:
x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];
NaN
是用于缺少的观测值的标记,例如,无法响应问卷中的某个项。要使用逻辑索引删除缺少的数据,请使用 isfinite(x)
,对于所有有限数值,该函数为 true;对于 NaN
和 Inf
,该函数为 false:
x = x(isfinite(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
现在,存在一个似乎与其他项很不一样的观测值,即 5.1
。这是一个离群值。下面的语句可删除离群值,在本示例中,即比均值大三倍标准差的元素:
x = x(abs(x-mean(x)) <= 3*std(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 1.8 1.4 2.2 1.6 1.8
标量扩展对于另一示例,请使用逻辑索引和标量扩展将非质数设置为 0,以便高亮显示丢勒幻方矩阵中的质数的位置。(请参阅 magic 函数。)
A(~isprime(A)) = 0
A =
0 3 2 13
5 0 11 0
0 0 7 0
0 0 0 0
find 函数
find
函数可用于确定与指定逻辑条件相符的数组元素的索引。find
以最简单的形式返回索引的列向量。转置该向量以便获取索引的行向量。例如,再次从丢勒的幻方矩阵开始。(请参阅 magic 函数。)
k = find(isprime(A))'
使用一维索引选取幻方矩阵中的质数的位置:
k =
2 5 9 10 11 13
使用以下命令按 k
确定的顺序将这些质数显示为行向量
A(k)
ans =
5 3 2 11 7 13
将 k
用作赋值语句的左侧索引时,会保留矩阵结构:
A(k) = NaN
A =
16 NaN NaN NaN
NaN 10 NaN 8
9 6 NaN 12
4 15 14 1