MATLAB矩阵运算包括加减、矩阵乘 / 数组乘、求解线性方程等。加减要求尺寸相同;乘除要分清带点与不带点两套规则。班级成绩表(五行学生、三列科目)算平均、总分时,这些运算通常各写一行就够。
加减与两类乘除
加减要求两侧尺寸相同,结果是对应位置相加或相减。乘除则有两套:
- 不带点:矩阵运算,按线性代数规则
- 带点:数组运算,对应位置计算,尺寸通常要一致
带点对应逐元素,不带点对应线性代数。这和运算符一章是同一条线。
A*B 与 A.*B
A = [1 2 3; 4 5 6];
B = [7 8; 9 10; 11 12];
A * B % 2×3 乘 3×2 → 2×2
% A .* B % 尺寸不同,会报错A*B 要求 A 的列数等于 B 的行数。.* 要求两个矩阵同尺寸。同尺寸时可以对比:
A = [1 2 3; 4 5 6];
A .* A % 逐元素平方
A * A' % 2×3 乘 3×2 → 2×2A .* A =
1 4 9
16 25 36
A * A' =
14 32
32 77成绩表示例
scores = [78 92 85;
63 70 88;
90 81 79;
45 60 72;
82 95 93];
subject_mean = mean(scores)
each_total = sum(scores, 2)
overall = sum(scores, 'all')subject_mean =
71.6 79.6 83.4
each_total =
255
221
250
177
270sum(scores) 与 mean(scores) 默认按列汇总。按行要写第二个参数 2。整表一个数用 'all'。方向搞反是最常见的错法。
左除解方程组
解 Ax = b 时,优先用左除 A \ b,一般比先求逆再乘更稳、更快:
% 2x + 3y = 8
% x + y = 3
A = [2 3; 1 1];
b = [8; 3];
x = A \ bx =
1
2常用函数
| 函数 | 作用 |
|---|---|
det(A) | 行列式 |
inv(A) | 逆矩阵(解方程优先用 \) |
sumA) sum(A,2) | 按列 / 按行求和 |
meanA) mean(A,2) | 按列 / 按行平均 |
max(A) minA) | 各列最大 / 最小 |
size(A) | 返回 [行数 列数] |
numel(A) | 元素个数 |
cumsum(A) | 沿列累加 |
diff(A) | 沿列相邻差分 |
自查
A.*B为何常要求同尺寸,而A*B只要求列数对接行数?sum(M)与sum(M,2)方向是否相同?- 解
Ax = b该用A\b还是A/b? - 实数矩阵下
M'与M.'结果是否一样?