Newton法でつながるコンピューターと数学の隙間
小清水 (@curekoshimizu) です。
この記事は 日曜数学 Advent Calendar 2016 の 15日目の記事になります。
日曜数学 ということばを各所で聞いて、
僕も数学科時代の わくわく数学 を社会人になっても 感じたい・伝えたい!
そう思うようになりました!
現在はプログラマとして仕事をしており、
「コンピューターの世界と数学の世界」の間を埋めて
面白さを伝えたい! と思い始め、
本当につい最近、
重い腰を上げてこのブログを立ち上げました。
誰かの役に、または、面白く思って頂ければ幸いです。
Abstract
今回の 「コンピューターの世界と数学の世界」 をつなぐお話は Newton法 です。
非常にメジャーなテーマです。
Newton法 を 「除算」計算に使うとどうなるのか?
紹介したい話としては 実数空間だけじゃなく modulo (余り) の世界でも
活きてくる方法なんだ!っていうのが今回のアドベントカレンダーのオチです。
数値計算例もでてくる!
ので数式がわからなくてもフィーリングは伝わると思います!
- Newton法とは?
- 実数空間の除算とNewton法
- ( で割った余りで考えた空間 ) の除算と Newton法
- 今後ブログで伝えていきたいと考えている面白い内容!!!
1. Newton 法
Newton 法は 滑らかな函数 のある解 (ただし ) の近似解を求めるための技法です。
1669 年に Newton がその数年後に Raphson が一般化したため、 Newton-Raphson法 とも呼ばれます。
初期値 が に近いと
という漸化式で を得ることができます。
この漸化式は下の図を元に導かれています:
収束証明
この節に書く証明は、明らかに modulo の世界である には適用できない ことにご注意ください。
実数空間の証明は、先の図をみれば感覚的にはOKです!
(読み飛ばしても大丈夫です!)
きちんとした証明も
が の近傍で 級であれば
解 の閉近傍で となるようとり、
がこの近傍にいるようにすれば、
次式より帰納的に はこの閉近傍に収まっており、さらにこの不等式が証明できます。
Taylor の定理より
これは
精度が2乗ずつよくなっていく ことを示しています!
実際それを「除算」の例でみてみましょう。
2. 実数の除算 と Newton法
に Newton法の公式を当てると
となります! 減算と乗算だけで除算の近似値が得られることを意味します!
生活の中で考えても、例えば、 小学生時代を思い出しましょう!
除算ってすごく計算が大変だったと思います。
とくに 商 に何が立つのかという計算が実に厄介です。
次の計算は8がたつかな?と 予測 し、あー間違ってた…。
9じゃないかーという風に
筆算で除算を計算していると思います。
コンピューターにとっても除算は激しく大変です。
コンピューターでも上のような 予測 を入れながら計算する方法があるのですが、
Newton 法による計算は 予測なしに愚直に計算するだけ で得られます。
ためしに として 逆数の の近似値を得てみましょう。
n | 正しく得られた桁数 | |
---|---|---|
0 | 0.5 | 0桁 |
1 | 0.625 | 1桁 |
2 | 0.6640625 | 2桁 |
3 | 0.666656494140625 | 4桁 |
4 | 0.6666666665114462375640869140625 | 9桁 |
5 | 0.6666666666666666666 3052659425048318553308490 … | 19桁 |
6 | 0.66666666666666666666666666666666666666470750 … | 38桁 |
と先の証明の 精度が2乗ずつよくなっていく 様子がわかります。
続いて へ全く同じ方法で計算するか計算してみましょう。
3. の除算と Newton法
もちろん注意すべきは は 体 ではないので一般に除算はできません。
しかしながら
という等式を が奇数に限り考えることができます。
偶数は明らかに解なしです。(左辺が偶数、右辺が奇数になってしまうためです。)
そのため、お話としては 逆元を Newton 法で求めてみようという話になります。
皆さん大好きな を
の世界で Newton 法 にかけてみますと
次のようになります。
ここでは として
を計算してきます。
n | 2進法表現 | 正しく得られた桁数 | |
---|---|---|---|
0 | 1 | 00000000000000000000000000000001 | 1桁 |
1 | 4294966607 | 11111111111111111111110101001111 | 2桁 |
2 | 3966933707 | 11101100011100101001101011001011 | 4桁 |
3 | 3802448251 | 11100010101001001100000101111011 | 8桁 |
4 | 2476047483 | 10010011100101010111110001111011 | 16桁 |
5 | 2660269179 | 10011110100100000111110001111011 | 32桁 |
6 | 2660269179 | 10011110100100000111110001111011 | 32桁 |
最終的に収束して 不動点 が得られました。
精度が2乗ずつよくなっていく 様子も同じです。
実際
となりますので 逆元が得られました。
たまたまなのでしょうか。
ちなみにですが、691 を持ち出した理由を知りたい方は
tsujimotterさんのブログ を御覧ください!
収束証明
であり a は奇数であるから、
ある n で
が満たされていたと仮定すると となる 整数 がとれる。
ゆえに
が満たされ、帰納法により示された。
なぜ 系を扱った?
コンピューターでは 整数 を表現する際に
として 扱われることが多いです。
特に が頻出で、
プログラミング言語 を勉強しても登場します。
上の証明をよくよく見てみると、
これを発展させると p進数 にも応用できること簡単にわかりますよね!
Summary
Newton 法 を 除算 につかうと
実は 「減算・乗算」 だけで計算できる式を導ける!
そんな、実数の 接線 と関係の深い Newton法 が
接線とは関係なさそうな
整数の世界 でも関係がある!
おまけにコンピュータとも関係あるなんて!
4. 今後ブログで伝えていきたいと考えている面白い内容!!!
このように 数学の知識とコンピューターの知識 の両方が登場する内容を書いて、
橋渡し的なブログになればいいなと思っております。
最近興味があるのは 浮動小数点 という
コンピューターで実数を扱う際に
よく使われる計算体系を 数学的に見つめ直してみたい と思っており
その内容が多いかもしれません。
浮動小数点がどれくらい厄介?
浮動小数点体系では、例えば基本的にこうです…。
群・環・体を知っている人は
性質の悪さに 泣きそうになりますよね...。
非可換体なんて目じゃない難しさです。
この 難しい演算体系 が Excel などでは標準的に使われています。
下の内容は 三角函数の計算が定義通り計算できない!? 悲しい話になります:
あなたも コンピュータと数学 に興味持ってみませんか?
以上、コンピューターと数学の間の話でした。
明日の 日曜数学 Advent Calendar 2016 の記事は
Toshiki Takahashi さんによる「リープグラフと複素確率」です。
確率って聞くだけでわくわくしちゃいます!