平方根を計算してみようと思った。
まず平方根とは何かというと、ある数 a に対して、b × b = a となる b のこと。
a の平方根は √a と表記する。√a = b
例えば、b = 3 とすると、
3 * 3 = 9
9 の平方根は√9 = 3
ちなみに、語呂合わせで10までの平方根を覚えることができます。
日本語って良いですね。
√2 は 「ひとよひとよにひとみごろ」(1.1421356)
√3 は 「ひとなみにおごれや」(1.7320508)
√5 は 「ふじさんろくおーむなく」(2.2360679)
√6 は 「によよくようやく」(2.449489)
√7 は 「にろ しごながいさ」(2.64575131)
√8 は 「にやにや よにない」(2.8284271)
√10 は 「さいろに ふな なな」(3.1622777)
ここで、a を与えられたときに、a の平方根を計算してみる。
開平法という便利なやり方やネイピアの骨を応用した方法があるそうだけど、今回はニュートン法を試してみる。
ニュートン法は、方程式の根を求める反復解法。
例えば、√144 を求めるために、y = 144とし、初期値 x を決めて、x = (x + y/x) / 2 の x を再び x として繰返し計算してゆく。
ここでは、初期値を 144/2 = 72 として、手元の電卓で計算してみる。
(72 + 144/72)/2 = 37
(37 + 144/37)/2 = 20.445945
(20.445945 + 144/20.445945)/2 = 13.744453
(13.744453 + 144/13.744453)/2 = 12.110703
(12.110703 + 144/12.110703)/2 = 12.000505
(12.000505 + 144/12.000505)/2 = 12
エクセルより速く、収束した。
![](https://blogimg.goo.ne.jp/user_image/7f/11/45dca6e2cb674ee66c628fa5ae6b90f8.png)
ただ、平方根を求める目的値a が桁数が小さいうちは良いけど、桁数が大きくなると平方根が求まるまでの計算回数が多くなる。初期値を a/2 と適当に設定しているからだろう。初期値の選定が計算量に影響する。
![](https://blogimg.goo.ne.jp/user_image/3e/d5/85a74952ab6554ceed3e2d15a3490f9d.png)
適切な初期値を求めるには、どうしたら良いのだろう。
例を挙げて検討してみると、例えば、10,000 (1,0000:平方根を考えるときは4ケタ区切りが便利)の平方根は100。
また、1,0000,0000 の平方根は 1,0000、1,0000,0000,0000,0000 の平方根は1,0000,0000 だ。
上の例では、5ケタの数の平方根が3ケタの数、9ケタの数の平方根が5ケタの数、17ケタの数の平方根が9ケタの数となっている。初期値としては、半分の桁数+1桁がいいようだ。
ただし、上の例では最上位の桁の値は 1 だけど、もしその最上位の値が大きくなると、初期値の最上位の値に影響するだろう。ここでは、初期値の最上位の値を 1~9 の中心狙いで 5 と設定してみた。
![](https://blogimg.goo.ne.jp/user_image/69/cf/e4a08bfda49c5feef9be07887a63d342.png)
次に、初期値の最上位の値を 1~9 の中心狙いで 10 と設定してみた。つまり、初期値の桁数が増える。
![](https://blogimg.goo.ne.jp/user_image/3c/92/3246e900295e02b24f16d2c9ff8200f4.png)
目標値の半分の桁数付近を初期値とするのが良さそう。さらに、最適化は出来そうだが、これくらいで充分収束しそうだ。
キーワード:平方根、ニュートン法、開平法
まず平方根とは何かというと、ある数 a に対して、b × b = a となる b のこと。
a の平方根は √a と表記する。√a = b
例えば、b = 3 とすると、
3 * 3 = 9
9 の平方根は√9 = 3
ちなみに、語呂合わせで10までの平方根を覚えることができます。
日本語って良いですね。
√2 は 「ひとよひとよにひとみごろ」(1.1421356)
√3 は 「ひとなみにおごれや」(1.7320508)
√5 は 「ふじさんろくおーむなく」(2.2360679)
√6 は 「によよくようやく」(2.449489)
√7 は 「にろ しごながいさ」(2.64575131)
√8 は 「にやにや よにない」(2.8284271)
√10 は 「さいろに ふな なな」(3.1622777)
ここで、a を与えられたときに、a の平方根を計算してみる。
開平法という便利なやり方やネイピアの骨を応用した方法があるそうだけど、今回はニュートン法を試してみる。
ニュートン法は、方程式の根を求める反復解法。
例えば、√144 を求めるために、y = 144とし、初期値 x を決めて、x = (x + y/x) / 2 の x を再び x として繰返し計算してゆく。
ここでは、初期値を 144/2 = 72 として、手元の電卓で計算してみる。
(72 + 144/72)/2 = 37
(37 + 144/37)/2 = 20.445945
(20.445945 + 144/20.445945)/2 = 13.744453
(13.744453 + 144/13.744453)/2 = 12.110703
(12.110703 + 144/12.110703)/2 = 12.000505
(12.000505 + 144/12.000505)/2 = 12
エクセルより速く、収束した。
![](https://blogimg.goo.ne.jp/user_image/7f/11/45dca6e2cb674ee66c628fa5ae6b90f8.png)
ただ、平方根を求める目的値a が桁数が小さいうちは良いけど、桁数が大きくなると平方根が求まるまでの計算回数が多くなる。初期値を a/2 と適当に設定しているからだろう。初期値の選定が計算量に影響する。
![](https://blogimg.goo.ne.jp/user_image/3e/d5/85a74952ab6554ceed3e2d15a3490f9d.png)
適切な初期値を求めるには、どうしたら良いのだろう。
例を挙げて検討してみると、例えば、10,000 (1,0000:平方根を考えるときは4ケタ区切りが便利)の平方根は100。
また、1,0000,0000 の平方根は 1,0000、1,0000,0000,0000,0000 の平方根は1,0000,0000 だ。
上の例では、5ケタの数の平方根が3ケタの数、9ケタの数の平方根が5ケタの数、17ケタの数の平方根が9ケタの数となっている。初期値としては、半分の桁数+1桁がいいようだ。
ただし、上の例では最上位の桁の値は 1 だけど、もしその最上位の値が大きくなると、初期値の最上位の値に影響するだろう。ここでは、初期値の最上位の値を 1~9 の中心狙いで 5 と設定してみた。
![](https://blogimg.goo.ne.jp/user_image/69/cf/e4a08bfda49c5feef9be07887a63d342.png)
次に、初期値の最上位の値を 1~9 の中心狙いで 10 と設定してみた。つまり、初期値の桁数が増える。
![](https://blogimg.goo.ne.jp/user_image/3c/92/3246e900295e02b24f16d2c9ff8200f4.png)
目標値の半分の桁数付近を初期値とするのが良さそう。さらに、最適化は出来そうだが、これくらいで充分収束しそうだ。
キーワード:平方根、ニュートン法、開平法