« | トップページ | 雨滴 »

2015年2月10日 (火)

√2 の話:その20:バビロニアの平方根

★平方根の話も大詰めです。
有名な「バビロニアの平方根」の話をしましょう。
バビロンの粘土板というのは有名ですから、そういうものの存在を聞いたことはおありになると思います。
「楔形(くさびがた・せっけい)文字」というのも有名ですね。
{「バビロニアの数学」のゼミをとったからなぁ、私としては懐かしい。}
その粘土板に√2の近似値が刻まれているというのです。

↓下のサイトに、「YBC7289」という番号の粘土板の写真があります。
http://www.nihongo.com/aaa/chigaku/suugaku/YBC7289.htm
バビロンの粘土板 YBC7289

正方形が描かれていて対角線が引かれていまして、√2の値が書き込まれている。

アラビア数字で書けば 1 24 51 10 になります。

これ 1.41421356 じゃないですね。
そう、バビロニアの数学は「60進法」!なのです。
Babyloniansqr
1行目は10進法の構造の確認。各桁は10のべき乗なのでした。
2行目は2進法で「11.11」と書いてあったらそれは十進数ではどうなるか、を書いたものです。各桁が2のべき乗になっていますので、
2+1+0.5+0.25=3.75
なのです。
・で、大きな文字で書いたのが、粘土板の数字を60進法として書いたもの。
各桁は60のべき乗ですから図中に書いた通り十進法に直すと
1.414212963
これが近似値。
1.414213562
こっちは真値(もちろん途中まで)。
すごいですね。
どうやって計算したのでしょう?

★下のサイトから引用します。
http://cpplover.blogspot.jp/2010/11/blog-post_20.html
バビロニア人の方法(Babylonian method)2010-11-20

平方根のアルゴリズム
・・・
 ここで使うのは、バビロニア人の方法(Babylonian method)と呼ばれている、歴史あるアルゴリズムである。この方法は、手動でも、プログラミングでも、非常に簡単に計算できる、大変便利で汎用的なアルゴリズムである。しかも、速度もそれほど遅くない。

√Sに対して、
    任意の正の整数を初期値X0と定める(できるだけ平方根に近い値が望ましい)
    Xn+1を、Xnと S / Xnの平均値とする(平均値は相加平均で求める)
    必要な精度が得られるまで、ステップ2を繰り返す

では、さっそく手動で計算してみよう。今、√123を求めたいとする。
上のアルゴリズムに当てはめると、S = 123である。x0は、とりあえず1とする。すると
x1 = ( x0 + 123 / x0 ) / 2 = ( 1 + 123 / 1 ) / 2 = 62
x2 = ( 62 + 123 / 62 ) / 2 = 31.9919
x3 = 17.9183
x4 = 12.3914
x5 = 11.1588
x6 = 11.0905
たったの6回の計算で、それなりの精度の平方根を求められる。
・・・

電卓では11.09053651ですので、確かによい精度です。

★このアルゴリズムを式の形に整理すると
Xn+1 = (Xn + S/Xn)/2
こうなります。
確かにこれでよい近似が得られますが、ただ式だけ提示されて「これはよい式だ」といわれても、なんとなく釈然としない感じが残りますね。どこか「得心」していない。

★よい文献を見つけました。
http://www.nsu.ac.jp/nsu/pdf/library/e-asia/35-4.pdf
和算における開平法のルーツ
―ギリシャから日本まで―
↑これです。

バビロニアの開平法
正方形の面積が A のとき,√Aはその一辺の長さである.√Aの近似値を a とする.これを縦として,面積が A に等しい長方形(正方形に近い形)を考えると,横の長さは A/a となるが,これも √Aの近似値を与える.ここで,a を √Aより大きく(小さく)選べば,A/a は √Aより小さく(大きく)なる.したがって a とA/a の算術平均は √Aのより良い近似値を与える.

あ、そうか!Aha感覚といいますかね。ストンと納得しちゃった。図示しましょう。
Babylon
面積Sの正方形があれば、その一辺は√Sです。
でも、いま√Sを求めたいのですから、このままでは何も始まりません。
そこで、とにかく最初の近似値を a0 としましょう。大きくても小さくてもいいです。負の数はダメ、辺の長さを考えるのですからね。
面積がSの長方形の、一辺が a0 である場合、他の辺は s/a0 になりますね。(掛ければSになります。)
この2辺は長さが異なっていますので、この2辺の平均をとれば、a0 よりは良い近似値になりそうですね。
{目標は正方形に近づくことですので}
そこで
a1 = (a0 + S/a0)/2
・・・
こうやっていけば、長方形はそのうち正方形に近づいていき、二辺がほぼ等しくなってきて、その値は√Sに近いものとなるでしょう。

★ハイ、これが上でご紹介した「バビロニア人の方法(Babylonian method)」の図形的な意味です。
いかがですか?多少はわかりやすくなったでしょうか?
少なくともなんとなくイメージは描けたのではないかと思いますが。

★これ、手計算でもできますし、プログラムを書くとしても非常に簡単ですが。
この際、誰でも気軽に試してみられるようにエクセルのセルに式を書き込むやり方で実験してみましょう。
とっつきやすくていいでしょ。
Babylon2
・まず、セル(C,1)に2を記入します。これは√2を求める、という意味の「2」です。
√3とか、√5とか√Sを求めるには、それぞれ3,5,Sを記入します。{後でお楽しみください。}
・次に、セル(A,1)に1を書きます。これが最初の近似値a0です。{これも、後で適当に書き換えてみてどうなるか、お楽しみください。}
・次に、セル(A,2)に図中にあるように、「=(A1+($C$1/A1))/2」という式を書き込みます。
 まず、セルに「=」と書くと式の入力状態になります。「A1」を指定するにはマウスでA1をクリックしてください。
そうすると、この内容をコピーしたセルから「一つ上のセルの値」という相対指定となります。
「$C$1」もセル(C,1)をマウスでクリックしますが、確定する前に、「F4」キーを押してください。これは絶対指定といって、どのセルにコピーしても(C,1)を参照します。
{この画面は、「数式」→「数式表示」で出せます。セル内容を知るには便利な機能です。}
・セル(A,2)をセレクトして、右下のところにマウスポインタを持って行くと「+」の表示が出ますから、マウスの右クリックを押したまま下へドラッグしてください。これはセル内容のコピーです。
・これで完成。
 もう結果が出ていますでしょ。
Babylon1
こんな風に。
セル(A,6)以降は値が変化しませんね。計算の限界に達してしまたわけです。

●セル(C,1)の値は、平方数でも大丈夫。1以下の数でも大丈夫。この計算方法は単純ですが「堅牢」ですね。
 セル(C,1)は2で、セル(A,1)に1000くらい入れてみてください。面白いですよ。

« | トップページ | 雨滴 »

理科おじさん」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« | トップページ | 雨滴 »

2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ