Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 110 additions & 7 deletions docs/02algorithms/10gaussian-elimination/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,83 @@ Gauss の消去法は、前進消去と後退代入の二段階から成りま

先に線形代数の復習として、簡単に Gauss の消去法を説明しておきます。

次のように $n$ 個の未知数 $x_1, x_2, x_3, \dots , x_n$ に対して、$m$ 個の方程式を考えます。
次のように $n$ 個の未知数 $x_1, x_2, x_3, \dots , x_n$ に対して、$n$ 個の方程式を考えます。

$$
\left\{
\begin{alignat*}{5}
a_{1, 1} & x_1 + {} & a_{1, 2} & x_2 + {} & a_{1, 3} & x_3 + \dots + {} & a_{1, n} & x_n = c_1 \\
a_{2, 1} & x_1 + {} & a_{2, 2} & x_2 + {} & a_{2, 3} & x_3 + \dots + {} & a_{2, n} & x_n = c_2 \\
a_{3, 1} & x_1 + {} & a_{3, 2} & x_2 + {} & a_{3, 3} & x_3 + \dots + {} & a_{3, n} & x_n = c_3 \\
& \cdots\cdot\cdot \\
a_{n-1, 1} & x_1 + {} & a_{n-1, 2} & x_2 + {} & a_{n-1, 3} & x_3 + \dots + {} & a_{n-1, n} & x_n = c_{n-1} \\
a_{n, 1} & x_1 + {} & a_{n, 2} & x_2 + {} & a_{n, 3} & x_3 + \dots + {} & a_{n, n} & x_n = c_n
\end{alignat*}
\right.
$$

この方程式系に対して、以下を行ったものは元の方程式系と同値です。

- 二つの方程式を入れ替える
- ある方程式に 0 でないスカラーを掛ける
- ある方程式に他の方程式のスカラー倍を掛ける

ここで、この方程式系の拡大係数行列を考えます。

$$
\tilde{A} = (A|\bm{c}) =
\left(
\begin{array}{ccccc|c}
a_{1, 1} & a_{1, 2} & a_{1, 3} & \dots & a_{1, n} & c_1 \\
a_{2, 1} & a_{2, 2} & a_{2, 3} & \dots & a_{2, n} & c_2 \\
a_{3, 1} & a_{3, 2} & a_{3, 3} & \dots & a_{3, n} & c_3 \\
\vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\
a_{n-1, 1} & a_{n-1, 2} & a_{n-1, 3} & \dots & a_{n-1, n} & c_{n-1,n} \\
a_{n, 1} & a_{n, 2} & a_{n, 3} & \dots & a_{n, n} & c_n
\end{array}
\right)
$$

基本行列を次のように定義します。

- $i$ 行と $j$ 行を入れ替える行列を $P_{i, j}$
- $i$ 行を $\lambda$ 倍する行列を $Q_{i, \lambda}$
- $i$ 行に $j$ 行の $\lambda$ 倍を加える行列を $R_{i, j, \lambda}$

拡大係数行列に対して、基本行列を左から掛けて基本変形を繰り返すと、行階段行列 $\tilde{B}$ が作れます。

$$
\tilde{B} = (B|\bm{d}) =
\left(
\begin{array}{cccccc|c}
1 & b_{1,2} & b_{1,3} & \dots & b_{1,n-1} & b_{1,n} & d_1 \\
& 1 & b_{2,3} & \dots & b_{2,n-1} & b_{2,n} & d_2 \\
& & 1 & \dots & b_{3,n-1} & b_{3,n} & d_3 \\
& & & \ddots & \vdots & \vdots & \vdots \\
& & & & 1 & b_{n-1,n} & d_{n-1} \\
\text{\huge{0}} & & & & & 1 & d_n
\end{array}
\right)
$$

これから、作られる方程式系は次のようになりこれははじめの方程式系と同値です。

$$
\left\{
\begin{alignat*}{5}
& x_1 + {} & b_{1,2} & x_2 + {} & b_{1,3} & x_3 + \dots + {} & b_{1,n-1} & x_{n-1} + {} & b_{1, n} & x_n = d_1 \\
& & & x_2 + {} & b_{2,3} & x_3 + \dots + {} & b_{2,n-1} & x_{n-1} + {} & b_{2, n} & x_n = d_2 \\
& & & & & x_3 + \dots + {} & b_{3,n-1} & x_{n-1} + {} & b_{3, n} & x_n = d_3 \\
&\dots \\
& & & & & & & x_{n-1} + {} & b_{n-1,n} & x_n = d_{n-1} \\
& & & & & & & {} & & x_n = d_n \\
\end{alignat*}
\right.
$$

これで $x_n$ はすぐに求めることができます。さらに、$x_n$ の解を代入すれば、$x_{n-1}$ もすぐに求まります。$x_n$ と $x_{n-1}$ の解を代入すれば、$x_{n-2}$ の解も求まります。これを繰り返していくことで、連立方程式を解くことができます。

<!-- 次のように $n$ 個の未知数 $x_1, x_2, x_3, \dots , x_n$ に対して、$m$ 個の方程式を考えます。

$$
\left\{
Expand Down Expand Up @@ -130,7 +206,7 @@ $$
- $i$ 行を $\lambda$ 倍する行列を $Q_{i, \lambda}$
- $i$ 行に $j$ 行の $\lambda$ 倍を加える行列を $R_{i, j, \lambda}$

<!-- つまり、次のように定義します。
つまり、次のように定義します。

$$
\begin{align*}
Expand Down Expand Up @@ -169,7 +245,7 @@ $$
& & & & & & 1 \\
\end{pmatrix}
\end{align*}
$$ -->
$$

拡大係数行列に対して、基本行列を左から掛けて基本変形を繰り返すと、行階段行列 $\tilde{B}$ が作れます。

Expand Down Expand Up @@ -206,7 +282,7 @@ $$
\right.
$$

これで $x_n$ はすぐに求めることができます。さらに、$x_n$ の解を代入すれば、$x_{n-1}$ もすぐに求まります。これを繰り返していくことで、連立方程式を解くことができます。
これで $x_n$ はすぐに求めることができます。さらに、$x_n$ の解を代入すれば、$x_{n-1}$ もすぐに求まります。これを繰り返していくことで、連立方程式を解くことができます。 -->

実際に具体的な連立方程式を解いてみましょう。
Gauss の消去法を次の方程式系について行ってみます。
Expand Down Expand Up @@ -308,13 +384,27 @@ $$
:::info

次のように、前進消去の段階で行簡約行列を作れば、後退代入を行う必要がなくなります。これは、Gauss-Jordan の消去法と呼ばれます。
Gauss-Jordan の消去法の方が良さそうですが、実は先程のように行簡約行列まで計算しないで途中で止める Gauss の消去法の方が計算量が少し少なくなります。そのため、Gauss の消去法の方がよく使われます。
Gauss-Jordan の消去法の方が良さそうですが、実は先程のように行簡約行列まで計算しないで途中で止める Gauss の消去法の方が少し計算量が少なくなります。そのため、Gauss の消去法の方がよく使われます。

Gauss-Jordan の消去法で先程の連立方程式を解いてみます。

拡大係数行列に基本変形を繰り返すと、次のような行簡約行列が得られます。

$$
\tilde{B} = (B|\bm{d}) =
\left(
\begin{array}{cccccc|c}
1 & & & & & \text{\huge{0}} & d_1 \\
& 1 & & & & & d_2 \\
& & 1 & & & & d_3 \\
& & & \ddots & & & \vdots \\
& & & & 1 & & d_{n-1} \\
\text{\huge{0}} & & & & & 1 & d_n
\end{array}
\right)
$$

<!-- $$
\tilde{B} =
\left(
\begin{array}{cccccccc|c}
Expand All @@ -328,12 +418,25 @@ $$
0 & 0 & 0 & 0 & 0 & 0 & \dots & 0 & 0
\end{array}
\right)
$$
$$ -->

これから、作られる方程式系は次のようになりこれは元の方程式系と同値です。

$$
\left\{
\begin{alignat*}{6}
& x_1 & & & & & & & & & & = d_1 \\
& & & x_2 & & & & & & & & = d_2 \\
& & & & & x_3 & & & & & & = d_3 \\
& \ldots \\
& & & & & & & x_{n-1} & & & & = d_{n-1} \\
& & & & & & & & & x_n & & = d_n \\
\end{alignat*}
\right.
$$

<!-- $$
\left\{
\begin{alignat*}{4}
& x_{j_1} + \dots + {} & 0 & x_{j_2} + \dots + {} & 0 & x_{j_3} + \dots + {} & 0 & x_n = d_1 \\
0 & x_{j_1} + \dots + {} & & x_{j_2} + \dots + {} & 0 & x_{j_3} + \dots + {} & 0 & x_n = d_2 \\
Expand All @@ -345,7 +448,7 @@ $$
0 & x_{j_1} + \dots + {} & 0 & x_{j_2} + \dots + {} & 0 & x_{j_3} + \dots + {} & 0 & x_n = d_m \\
\end{alignat*}
\right.
$$
$$ -->

これで連立方程式を解くことができました。

Expand Down