8383
8484## Gauss の消去法
8585
86- Gauss の消去法を使えば、システマティックに連立一次方程式を解くことができます。掃き出し法とも呼ばれます。
86+ 線形代数で習う Gauss の消去法を使えば、システマティックに連立一次方程式を解くことができます。そのため、このアルゴリズムを用いれば連立方程式を解くプログラムを簡単に作ることができます。Gauss の消去法は、 掃き出し法とも呼ばれます。
8787
8888Gauss の消去法は、前進消去と後退代入の二段階から成ります。
8989
90- 簡単に Gauss の消去法を説明しておきます。
90+ 先に線形代数の復習として、 簡単に Gauss の消去法を説明しておきます。
9191
9292次のように $n$ 個の未知数 $x_1, x_2, x_3, \dots , x_n$ に対して、$m$ 個の方程式を考えます。
9393
206206\right.
207207$$
208208
209- これで $x_n$ から順番に求めていくことで連立方程式を解くことができます 。
209+ これで $x_n$ はすぐに求めることができます。さらに、$x_n$ の解を代入すれば、$x_{n-1}$ もすぐに求まります。これを繰り返していくことで、連立方程式を解くことができます 。
210210
211- 実際に連立方程式を解いてみましょう 。
212- Gauss の消去法を次の方程式系について行うと、以下のようになります 。
211+ 実際に具体的な連立方程式を解いてみましょう 。
212+ Gauss の消去法を次の方程式系について行ってみます 。
213213
214214$$
215215\left\{
221221\right.
222222$$
223223
224- まずは、前進消去を行います。
224+ まずは、前進消去を行います。基本変形を繰り返して、行階段行列を作っていきます。
225225
226226$$
227227\begin{alignat*}{2}
305305\right.
306306$$
307307
308- Gauss の消去法を使えば、このようにシステマティックに連立方程式を解けます。
309- これなら、プログラムを作るのは簡単そうです。
310-
311308:::info
312309
313310次のように、前進消去の段階で行簡約行列を作れば、後退代入を行う必要がなくなります。これは、Gauss-Jordan の消去法と呼ばれます。
314- しかし、実は先程のように行簡約行列まで計算しないで途中で止める Gauss の消去法の方が計算量が少なくなるので、Gauss の消去法を使って説明をしました。
311+ Gauss-Jordan の消去法の方が良さそうですが、実は先程のように行簡約行列まで計算しないで途中で止める Gauss の消去法の方が計算量が少し少なくなります。そのため、Gauss の消去法の方がよく使われます。
312+
313+ Gauss-Jordan の消去法で先程の連立方程式を解いてみます。
315314
316- 行簡約行列は次のようになります 。
315+ 拡大係数行列に基本変形を繰り返すと、次のような行簡約行列が得られます 。
317316
318317$$
319318\tilde{B} =
350349
351350これで連立方程式を解くことができました。
352351
353- 実際に連立方程式を解いてみます 。
354- これを次の方程式系について行うと、以下のようになります 。
352+ 実際に具体的な連立方程式を解いてみます 。
353+ Gauss-Jordan の消去法を次の方程式系について行っていきます 。
355354
356355$$
357356\left\{
@@ -464,7 +463,7 @@ $i$ 行、$i$ 列が pivot となるので、$i$ 行目を pivot の値で割っ
464463
465464次は、後退代入を行います。
466465
467- $x_n$ は $ d_n$ になります。求まった $x_n$ をそれよりも上の式に代入して 、$b_{j, n}x_n(1\leq j\leq n-1)$ を右辺に移動させ、$d_j(1\leq j\leq n-1)$ の値を更新します。これを繰り返すと、後退代入ができます 。
466+ $x_n = d_n$ になります。求まった $x_n$ をそれよりも上の式すべてに代入して 、$b_{j, n}x_n(1\leq j\leq n-1)$ を右辺に移動させ、$d_j(1\leq j\leq n-1)$ の値を更新します。こうすると、$x_{n-1}$ が求まります。これを繰り返すと連立一次方程式が解けます 。
468467
469468プログラムは次のようになります。計算量は、$O(n^3)$ です。
470469
@@ -474,7 +473,8 @@ $x_n$ は $d_n$ になります。求まった $x_n$ をそれよりも上の式
474473
475474## 部分ピボット選択
476475
477- 次のような連立方程式を解こうとすると、次のようなエラーが出てしまいます。
476+ さきほどのプログラムを使えば、多くの様々な連立一次方程式が解けます。
477+ しかし、次の連立方程式を解くと、次のようにエラーが出てしまいます。
478478
479479$$
480480\left\{
488488
489489<ViewSource path = " /gaussian-elimination/gaussian_elimination_error.ipynb" />
490490
491- これは、前進消去の際に 0 で割る操作ができてしまったためです 。
492- これを解決するために、部分ピボット選択を行います。誤差を小さくする役割もあります。
491+ これは、前進消去の際に 0 で割る操作が起こってしまったからです 。
492+ これを解決するために、部分ピボット選択を行います。部分ピボット選択には、 誤差を小さくする役割もあります。
493493
494494部分ピボット選択は、pivot 列の pivot 行以降の行で絶対値が最大になる行を pivot に使うように変形することです。
495495
496- 先程の連立方程式なら、次のようになります 。
496+ 先程の連立方程式なら、次のように計算していきます。1 つ目から、2 つ目への変形が部分ピボット選択によるものです 。
497497
498498$$
499499\begin{alignat*}{2}
556556\end{alignat*}
557557$$
558558
559- 部分ピボット選択を使うと、次のようになります 。
559+ 部分ピボット選択を入れると、次のようなプログラムになります 。
560560
561561<ViewSource path = " /gaussian-elimination/gaussian_elimination_revised.ipynb" />
562562
0 commit comments