题目
编写程序,演示生成 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