题目
编写程序,给定一个 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