解上三角(回代)
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)) == 1
fprintf('\n Error:使用reg_utm时 对角线上有0元素,不能使用该函数\n\n');
else
n = length(b);
X = zeros(n,1);
X(n) = b(n)/A(n,n);
for k=n-1:-1:1
t = A(k,[k+1:n])*X(k+1:n);
X(k) = (b(k)-t)/A(k,k);
end
end
end
保存为 reg_utm.m
文件
解下三角(前推)
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)) == 1
fprintf('*************************\n 对角线上有0元素,不能使用该函数 \n******************** ');
else
n = length(b);
X = zeros(n,1);
X(1) = b(1)/A(1,1);
for k=2:n
t = A(k,[1:k-1])*X(1:k-1);
X(k) = (b(k)-t)/A(k,k);
end
end
end
保存为push_ltm.m
文件
后面会经常用到两个合起来的形式
function [X] = back_substitution_two(L,U,b)
% Ly=b, Ux=y
% b : 列向量
% X : 解向量
%
% Version: 1.0
% last modified: 09/25/2023
y = push_ltm(L,b);
X = reg_utm(U,y);
end
保存为 back_substitution_two.m
文件
对我感兴趣的也可以看一下我的公众号: zhemu的数值计算录,会同步更新的:)