1. 解上三角(回代)
a i i ≠ 0 a_{ii\neq0} aii=0 , i = 1 , 2 , … , n i=1,2,\ldots,n i=1,2,…,n
a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ a n n x n = b n \begin{aligned} a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n&=b_1 \\ a_{22}x_2+\cdots+a_{2n}x_n&=b_2 \\ &\cdots \\ a_{nn}x_n&=b_n \end{aligned} a11x1+a12x2+⋯+a1nxna22x2+⋯+a2nxnannxn=b1=b2⋯=bn
北太天元源代码
function [X] = reg_utm(A,b)
% 解上三角方程组 回代算法
% A : 系数矩阵 必须为上三角
% b : 右端常数
% X : 求得的解向量
% 使用要求:A的对角线处元素不为0
%
% Version: 1.0
% last modified: 09/09/2023
if max(ismember(diag(A),0)) == 1fprintf('\n Error:使用reg_utm时 对角线上有0元素,不能使用该函数\n\n');
elsen = length(b);X = zeros(n,1);X(n) = b(n)/A(n,n);for k=n-1:-1:1t = A(k,[k+1:n])*X(k+1:n);X(k) = (b(k)-t)/A(k,k);end
end
end
保存为 reg_utm.m
文件
2. 解下三角(前推)
a i i ≠ 0 a_{ii\neq0} aii=0 , i = 1 , 2 , … , n i=1,2,\ldots,n i=1,2,…,n
a 11 x 1 = b 1 a 21 x 1 + a 22 x 2 = b 2 ⋯ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n \begin{aligned} &a_{11}x_1&=b_1 \\ &a_{21}x_1+a_{22}x_2&=b_2 \\ &\cdots \\ &a_{n1}x_1+a_{n2}x_2+\cdots+a_{nn}x_n&=b_n \end{aligned} a11x1a21x1+a22x2⋯an1x1+an2x2+⋯+annxn=b1=b2=bn
北太天元源代码
function [X] = push_ltm(A,b)
% 解下三角方程组 前推算法
% A : 表示系数矩阵 必须为下三角
% b : 表示右端常数
% X : 求得的解向量
% 使用要求:对角线处元素不为0
%
% Version: 1.0
% last modified: 05/16/2023
if max(ismember(diag(A),0)) == 1fprintf('*************************\n 对角线上有0元素,不能使用该函数 \n******************** ');
elsen = length(b);X = zeros(n,1);X(1) = b(1)/A(1,1);for k=2:nt = A(k,[1:k-1])*X(1:k-1);X(k) = (b(k)-t)/A(k,k);end
endend
保存为push_ltm.m
文件
后面会经常用到两个合起来的形式
function [X] = back_substitution_two(L,U,b)
% Ly=b, Ux=y
% b : 列向量
% X : 解向量
%
% Version: 1.0
% last modified: 09/25/2023y = push_ltm(L,b);X = reg_utm(U,y);
end
保存为 back_substitution_two.m
文件
小结
这三个函数,在后续求解线性方程组中会经常用到,
在用直接法求解线性方程组的过程中,大多数都是先把方程组化成 上三角或是下三角的形式,再进行回代求解。
我们提前把这一步写好,用到的时候,直接用就可以了~