题目
编写程序,已有 2×2 矩阵 A 和 B,演示横向拼接 <code>[A, B]</code>、纵向拼接 <code>[A; B]</code>,以及使用 <code>repmat</code> 函数将矩阵 A 复制平铺为 2×3 的阵列大矩阵。
输入格式:无需外部输入。
输出格式:打印各种拼接重组与平铺后的矩阵形态与尺寸。
数据范围与约定:矩阵分块与复制。
思路与算法
1. 水平与垂直拼接规则[A, B] 要求 A 与 B 行数相同;[A; B] 要求 A 与 B 列数相同。如果不满足对应维度的对齐要求,将抛出 `dimensions do not match` 致命错误。
2. repmat 的工作机制repmat(A, m, n)(Replicate Matrix)将矩阵 A 当做一个整体图块,在行方向复制 m 遍,在列方向复制 n 遍,生成 $m \times \text{rows}(A)$ 行、$n \times \text{cols}(A)$ 列的组合矩阵。
3. 平铺性能考量
现代 Octave/MATLAB 已经支持隐式广播(Broadcasting),但 repmat 在显式构造重复网格数据时依然直观。
完整程序
% Octave / MATLAB 第25题:矩阵分块拼接与平铺
A = [1, 2;
3, 4];
B = [5, 6;
7, 8];
% 1. 水平拼接 (2x4)
H = [A, B];
% 2. 垂直拼接 (4x2)
V = [A; B];
% 3. 平铺复制 (行重复 1 遍,列重复 3 遍,形成 2x6)
R = repmat(A, 1, 3);
fprintf("水平拼接 [A, B] (2x4):\n");
disp(H);
fprintf("垂直拼接 [A; B] (4x2):\n");
disp(V);
fprintf("平铺复制 repmat(A, 1, 3) (2x6):\n");
disp(R);运行示例
输出:
水平拼接 [A, B] (2x4):
1 2 5 6
3 4 7 8
垂直拼接 [A; B] (4x2):
1 2
3 4
5 6
7 8
平铺复制 repmat(A, 1, 3) (2x6):
1 2 1 2 1 2
3 4 3 4 3 4