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×2
A .* 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
   270

sum(scores)mean(scores) 默认按列汇总。按行要写第二个参数 2。整表一个数用 'all'。方向搞反是最常见的错法。

左除解方程组

Ax = b 时,优先用左除 A \ b,一般比先求逆再乘更稳、更快:

MATLAB 线性方程组求解示例运行
% 2x + 3y = 8
%  x +  y = 3
A = [2 3; 1 1];
b = [8; 3];
x = A \ b
x =
    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.' 结果是否一样?