题目

编写程序,给定一个 3×3 矩阵,使用 <code>triu()</code> 提取上三角矩阵,使用 <code>tril()</code> 提取下三角矩阵,并提取包含偏移量的严格下三角矩阵。

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

输出格式:分别打印原方阵、上三角矩阵、下三角矩阵和严格下三角矩阵。

数据范围与约定:三角分解辅助操作。

思路与算法

1. triu 与 tril 概念
triu(A)(Triangle Upper)保留主对角线及以上元素,其余清零;tril(A)(Triangle Lower)保留主对角线及以下元素,其余清零。

2. 严格三角矩阵
通过带入偏移量可剔除对角线:tril(A, -1) 剔除主对角线,仅保留严格下三角部分;在 Gauss-Seidel 迭代法中,矩阵通常分裂为 $A = D + L + U$,$L$ 即由 tril(A, -1) 得到。

3. 非方阵适用性
triu 和 tril 同样适用于非方阵的长方矩阵,按同样主对角线规则截断。

完整程序

% Octave / MATLAB 第24题:上下三角矩阵提取
A = [1, 2, 3;
     4, 5, 6;
     7, 8, 9];

U = triu(A);       % 上三角
L = tril(A);       % 下三角
L_strict = tril(A, -1); % 严格下三角 (排除对角线)

fprintf("原矩阵 A:\n");
disp(A);
fprintf("上三角矩阵 triu(A):\n");
disp(U);
fprintf("下三角矩阵 tril(A):\n");
disp(L);
fprintf("严格下三角矩阵 tril(A, -1):\n");
disp(L_strict);

运行示例

输出:

原矩阵 A:
   1   2   3
   4   5   6
   7   8   9
上三角矩阵 triu(A):
   1   2   3
   0   5   6
   0   0   9
下三角矩阵 tril(A):
   1   0   0
   4   5   0
   7   8   9
严格下三角矩阵 tril(A, -1):
   0   0   0
   4   0   0
   7   8   0