Gaussian Elimination
高斯消元法希望选中第i行时,把i行下方的第i列元素变为0.
for i = 1 to n-1: /*选中目标行,目标行第一个非0元是aii*/
for j = i+1 to n: /*目标行下方的行,第一个非0元是aji*/
m=aji/aii /*希望目标行乘上这个系数再由j行去减,把aji变为0*/
for k = i to n+1/*第i列开始是非0元,一直把b也变换进去*/
ajk = ajk - m*aik
(
a
11
a
12
a
13
0
a
22
a
23
0
a
32
a
33
)
\begin{pmatrix} a_{11}&a_{12}&a_{13}\\0&a_{22}&a_{23}\\0&a_{32}&a_{33} \end{pmatrix}
⎝⎛a1100a12a22a32a13a23a33⎠⎞
下一步就是把a32变为0
每一行操作 | 次数 | 解释 |
---|---|---|
除法 | n-i | i行下方每一行都算出一个m,一共n-i行 |
乘法 | (n-i)(n-i+1) | 选中的行n-i+1个元素,消去下方每一行都要乘1次,下方一共n-i行 |
加法/减法 | (n-i)(n-i+1) | 减每一行有n-i+1个元素,要减n-i次 |
i是从1到n-1,因为最后一行不需要化简。
乘除法总数:
∑
i
=
1
n
−
1
(
(
n
−
i
)
+
(
n
−
i
)
(
n
−
i
+
1
)
)
\sum\limits_{i=1}^{n-1}((n-i)+(n-i)(n-i+1))
i=1∑n−1((n−i)+(n−i)(n−i+1))
加减法总数:
∑
i
=
1
n
−
1
(
n
−
i
)
(
n
−
i
+
1
)
\sum\limits_{i=1}^{n-1}(n-i)(n-i+1)
i=1∑n−1(n−i)(n−i+1)
Gauss-Jordan method
和高斯法唯一的不同在于,把下方的元素化掉同时,把上方的元素也化掉。
for i = 1 to n: /*选中一行,注意每一行都需要选一次*/
for j = 1 to n: /*选中的行帮助除它之外的所有行aij都变为0*/
if(j==i): continue
m=aji/aii
for k = i to n+1:
ajk = ajk - m*aik
(
a
11
a
12
a
13
0
a
22
a
23
0
a
32
a
33
)
\begin{pmatrix} a_{11}&a_{12}&a_{13}\\0&a_{22}&a_{23}\\0&a_{32}&a_{33} \end{pmatrix}
⎝⎛a1100a12a22a32a13a23a33⎠⎞
下一步就是把a12和a32变为0
每一行操作 | 次数 |
---|---|
除法 | n-1(每一行都需要算一个m) |
乘法 | (n-i+1)(n-1)(每次要乘n-i+1个元素,要乘n-1次) |
加法/减法 | (n-i+1)(n-1)(减每一行有n-i-1个元素,要减n-1次) |
i是1到n,每一行都要算一次。
乘除法总数:
∑
i
=
1
n
(
(
n
−
1
)
+
(
n
−
1
)
(
n
−
i
+
1
)
)
\sum\limits_{i=1}^{n}((n-1)+(n-1)(n-i+1))
i=1∑n((n−1)+(n−1)(n−i+1))
加减法总数:
∑
i
=
1
n
(
n
−
1
)
(
n
−
i
+
1
)
\sum\limits_{i=1}^{n}(n-1)(n-i+1)
i=1∑n(n−1)(n−i+1)