Chapter 06 : Direct Methods for Solving Linear Systems¶
Linear Systems of Equations¶
Gaussian Elimination¶
高斯消元法(Gaussian Elimination)的基本思路:
- 首先将矩阵 \(A\) 归约成一个上三角(Upper-triangular)矩阵
- 然后通过反向代换(Backward-substitution)来求解未知量
解方程组 \(\mathbf{A}\vec{x}=\vec{b}\),记 \(\mathbf{A}^{(1)}=\mathbf{A}=a_{ij}^{(1)}\),\(\vec{b}^{(1)}=\vec{b}=\begin{pmatrix}b_{1}^{(1)}\\b_{2}^{(1)}\\\vdots\\b_{n}^{(1)}\end{pmatrix}\),\(\vec{x}^{(1)}=\vec{x}=\begin{pmatrix}x_{1}^{(1)}\\x_{2}^{(1)}\\\vdots\\x_{n}^{(1)}\end{pmatrix}\),则增广矩阵 \(\tilde{\mathbf{A}}\) 为:
通过高斯消元我们可以得到新的增广矩阵 \(\tilde{\mathbf{A}}^{(k)}\):
第 \(1\) 次迭代过程为:如果 \(a_{11}^{(1)}\neq 0\) ,记 \(m_{i1}= {a_{i1}^{(1)}}/{a_{11}^{(1)}}\) ,则
第\(t\)次迭代过程为:如果 \(a_{tt}^{(t)}\neq 0\),记 \(m_{it}={a_{it}^{(t)}}/{a_{tt}^{(t)}}\) ,则
- 如果 \(a_{tt}^{(t)}=0\),则交换第 \(t\) 行与第 \(k\) 行,使得 \(a_{kk}^{(k)}\neq 0\),然后再进行第\(k\)次迭代
- 如果找不到 \(a_{kk}^{(k)}\neq 0\),则方程组没有唯一解,算法停止
反向代换:
- \(x_n=\frac{b_n^{(n)}}{a_{nn}^{(n)}}\)
- \(x_i=\frac{b_i^{(i)}-\sum\limits_{j=i+1}^{n}a_{ij}^{(i)}x_j}{a_{ii}^{(i)}},i=n-1,...,1\)
- 我们必须找到最小的整数 \(k\geq i\) 且 \(a_{ki}^{(i)}\not=0\),然后交换第 \(k\) 行和第 \(i\) 行
整个算法伪代码如下:
Amount of Computation¶
由于在计算机上完成乘法或除法所需的时间大致相同,且大于完成加法或减法所需的时间,所以我们分开考虑乘法和除法的计算次数
对上述算法进行分析,可以得到计算次数如下:
Elimination¶
在每个 \(i\) 中,
Step 5
需要完成 \(n-i\) 次除法,Step 6
由 \(E_j-m_{ji}E_i\) 代替方程 \(E_j\) 的过程中,对每个 \(j\) ,需要完成 \(n-i+1\) 次乘法和 \(n-i+1\) 次减法。所以共需要完成 \((n-i)(n-i+1)\) 次乘法和 \((n-i)(n-i+1)\) 次减法。
所以,消元过程共需要完成 \(\sum\limits_{i=1}^{n-1}((n-i)+(n-i)(n-i+1))\) 次乘法/除法和 \(\sum\limits_{i=1}^{n-1}(n-i)(n-i+1)\) 次加法/减法。
即消元过程共需要完成 \(\frac{1}{3}n^3+\frac{1}{2}n^2-\frac{5}{6}n\) 次乘法/除法和 \(\frac{1}{3}n^3-\frac{1}{3}n\) 次加法/减法。
Backward Substitution¶
Step 8
需要完成 \(1\) 次除法。
在每个 \(i\) 中,
Step 9
需要完成 \(n-i\) 次乘法和 \(n-i-1\) 次加法(对每个相加项),然后是一次减法和一次除法。
所以,回代过程共需要完成 \(1+\sum\limits_{i=1}^{n-1}((n-i)+1)\) 次乘法/除法和 \(\sum\limits_{i=1}^{n-1}(n-i)\) 次加法/减法。
即回代过程共需要完成 \(\frac{1}{2}n^2+\frac{1}{2}n\) 次乘法/除法和 \(\frac{1}{2}n^2-\frac{1}{2}n\) 次加法/减法。
Summary¶
- 乘法/除法:\((\frac{1}{3}n^3+\frac{1}{2}n^2-\frac{5}{6}n)+(\frac{1}{2}n^2+\frac{1}{2}n)=\frac{1}{3}n^3+n^2-\frac{1}{3}n\)
- 加法/减法:\((\frac{1}{3}n^3-\frac{1}{3}n)+(\frac{1}{2}n^2-\frac{1}{2}n)=\frac{1}{3}n^3+\frac{1}{2}n^2-\frac{5}{6}n\)
从这里我们可以得知,高斯消元法的算法复杂度为 \(O(N^3)\)