Skip to content

Commit 3cbac04

Browse files
authored
Merge pull request #183 from chvmvd/update-week12-13-article
Update week12 13 article
2 parents 8867a63 + 6bfa8d6 commit 3cbac04

File tree

4 files changed

+75
-62
lines changed

4 files changed

+75
-62
lines changed

docs/02algorithms/09error/index.mdx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ $12345 = \underbrace{1.2345}_{\text{仮数部}}\times 10^{\overbrace{-4}^{\text{
2121

2222
まずは、10 進数で考えましょう。
2323
例えば、$\frac{1}{3}$ は有限桁の小数では表せません。$0.3$ も $0.33$ も $0.333$ も $\frac{1}{3}$ の近似でしかありません。
24-
たとえ、 $0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333$ のようにしても同じことです。
24+
たとえ、次のようにどんなに桁を大きくしても有限である限り近似には変わりません。
25+
26+
$$
27+
0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
28+
$$
2529

2630
2 進数においても同じことが起こります。
2731
10 進数の $0.1$ を 2 進数で表すことを考えます。
@@ -37,11 +41,11 @@ $$
3741

3842
このように $0.1_{(10)}$ は 2 進数では有限桁で表せません。
3943

40-
コンピューターは、有限桁しか表現できないことから、有効桁以降を切り捨てます。これによって、誤差が出るのが丸め誤差です。
44+
無限桁を扱うことはできないので、有効桁以降を切り捨てることになります。これによって、誤差が出るのが丸め誤差です。
4145

4246
## 桁落ち
4347

44-
有効数字を 7 桁で $\sqrt{1001}-\sqrt{999}$ を計算することを考えます。
48+
有効数字 7 桁で $\sqrt{1001}-\sqrt{999}$ を計算することを考えます。
4549

4650
$$
4751
\sqrt{1001} = 31.638584\dots \simeq 31.63858
@@ -57,11 +61,11 @@ $$
5761
\sqrt{1001}-\sqrt{999} \simeq 0.03162
5862
$$
5963

60-
このようにすると、有効数字が 4 桁になってしまいます
64+
このようにすると、有効数字が 4 桁に減ってしまいます
6165

6266
このように値がほぼ同じ数値同士で減算をしたときに有効桁数が減少することによって生まれる誤差が桁落ちです。
6367

64-
今回の場合は、回避策があります。
68+
実は今回の場合は、回避策があります。
6569

6670
$$
6771
\begin{align*}
@@ -74,7 +78,7 @@ $$
7478
\end{align*}
7579
$$
7680

77-
これで、桁落ちを回避できます
81+
今回の場合ならば、これで桁落ちを回避できます
7882

7983
## 情報落ち
8084

@@ -98,7 +102,7 @@ $$
98102

99103
となって正しく計算できません。
100104

101-
次のように、何度も足す場合には計算結果が変わってきてしまいます
105+
次のように、何度も足す場合には深刻になってきます
102106

103107
$$
104108
\begin{align*}

docs/02algorithms/10gaussian-elimination/index.mdx

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ $$
8383

8484
## Gauss の消去法
8585

86-
Gauss の消去法を使えば、システマティックに連立一次方程式を解くことができます。掃き出し法とも呼ばれます。
86+
線形代数で習う Gauss の消去法を使えば、システマティックに連立一次方程式を解くことができます。そのため、このアルゴリズムを用いれば連立方程式を解くプログラムを簡単に作ることができます。Gauss の消去法は、掃き出し法とも呼ばれます。
8787

8888
Gauss の消去法は、前進消去と後退代入の二段階から成ります。
8989

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

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

@@ -206,10 +206,10 @@ $$
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\{
@@ -221,7 +221,7 @@ $$
221221
\right.
222222
$$
223223

224-
まずは、前進消去を行います。
224+
まずは、前進消去を行います。基本変形を繰り返して、行階段行列を作っていきます。
225225

226226
$$
227227
\begin{alignat*}{2}
@@ -305,15 +305,14 @@ $$
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} =
@@ -350,8 +349,8 @@ $$
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\{
@@ -488,12 +488,12 @@ $$
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}
@@ -556,7 +556,7 @@ $$
556556
\end{alignat*}
557557
$$
558558

559-
部分ピボット選択を使うと、次のようになります
559+
部分ピボット選択を入れると、次のようなプログラムになります
560560

561561
<ViewSource path="/gaussian-elimination/gaussian_elimination_revised.ipynb" />
562562

0 commit comments

Comments
 (0)