LU 分解¶
高斯消元法¶
考虑方程组
{loading=lazy}
这两个函数画出来是这样
我们首先描述最简单的高斯消元法。对于线性方程组系统,可以通过三种初等变换操作生成等价的系统。这三种变换分别是:
- 两个方程彼此交换位置
- 在一个方程上加上另一个方程的倍数
- 对一个方程乘上一个非零的常数
对于上述方程,如何让计算机求解呢?
先来让我们考虑一个三个方程、三个变量的方程组:
矩阵形式如下:
需要两步消去第一列:
还要一步消去第二列
返回方程组为
之后,从最后一个方程组开始进行回代。
话不多说,先上代码。
Talk is not cheap.
% 下三角化
for j = 1 : n-1
if abs(a(j, j)) < eps; error("zero pivot encountered"); end
for i = j+1 : n
mult = a(i, j) / a(j, j);
for k = j+1 : n
a(i, k) = a(i, k) - mult * a(j, k);
end
b(i) = b(i) - mult*b(j);
end
end
% 回代
for i = n : -1 : 1
for j = i+1 : n
b(i) = b(i) - a(i, j)*x(j);
end
x(i) = b(i) / a(i, i);
end
LU 分解¶
将矩阵
一旦知道
- 对于方程
,求解 - 对于方程
,求解
高斯消元的时间复杂度为