题目

编写程序,演示生成 3×3 全零方阵、2×4 全一长方阵、4×4 单位矩阵,以及使用现有矩阵的尺寸动态生成同维度全零矩阵(zeros(size(A)))。

输入格式:无需外部输入。

输出格式:依次打印生成的各类特殊矩阵及其尺寸信息。

数据范围与约定:特殊矩阵生成函数。

思路与算法

1. 单入参和双入参区别
zeros(N) 生成 $N \times N$ 的方阵;如果要生成非方阵的长方矩阵,必须显式传入行和列两个参数 zeros(M, N)。初学者常误写 zeros(3, 1) 为 zeros(3) 导致内存翻倍。

2. eye 单位矩阵
eye(N) 主对角线为 1、其余全为 0 的单位阵。线性系统或动力学状态方程中极度常用。

3. 模式匹配预分配
zeros(size(A)) 或 zeros(like, A) 根据已知矩阵的维度和类型一键创建对应形状的全零矩阵,属于工程代码中预分配内存(Preallocation)的通用手段。

完整程序

% Octave / MATLAB 第21题:特殊矩阵生成
% 1. 全零方阵与长方阵
Z_sq   = zeros(3);      % 3x3 方阵
Z_rect = zeros(2, 4);   % 2x4 长方阵

% 2. 全一方阵
O_mat  = ones(2, 3);    % 2x3

% 3. 单位矩阵 eye
I_mat  = eye(3);        % 3x3

% 4. 动态根据参考矩阵尺寸预分配
ref_mat = rand(2, 5);
Z_auto  = zeros(size(ref_mat));

fprintf("3x3 全零方阵 zeros(3):\n");
disp(Z_sq);
fprintf("2x4 全零矩阵 zeros(2, 4):\n");
disp(Z_rect);
fprintf("3x3 单位矩阵 eye(3):\n");
disp(I_mat);
fprintf("依据参考矩阵动态预分配 zeros(size(A)) 尺寸: %dx%d\n", size(Z_auto, 1), size(Z_auto, 2));

运行示例

输出:

3x3 全零方阵 zeros(3):
   0   0   0
   0   0   0
   0   0   0
2x4 全零矩阵 zeros(2, 4):
   0   0   0   0
   0   0   0   0
3x3 单位矩阵 eye(3):
Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1
依据参考矩阵动态预分配 zeros(size(A)) 尺寸: 2x5