ある数C の「平方根」というのは、二乗するとC になる数の事です。つまり、ある数をC 平方根をx とすると、 x2=C となる数であり、このx はx2-C=0の2次方程式を解けば求まる事になります。 ニュートン法による数値計算今回は、このx2-C=0 という式を「接線」とx軸との交点を求めていくニュートン(ニュートン・ラプソン)法というアルゴリズムで解いてみましょう。 まず、解(正)よりも右側にある適当なx 座標(x0)におけるf(x)=x2-Cの接線とx 軸(y=0)との交点を求めます。f'(x)=2x なので、この接線の傾きは2x0であり式は 2x0+α(平方根を求めるからα<0)です。 次に、傾きというのはy の変化をx の変化で割ったものなので、交点のx 座標をx1 とすると2x0=f(x0)/x0-x1 となります。この式に、f(x0)=x02-C を代入して整理すると、x1=(x0+C/x0)/2 となり、交点(x1,0)を計算することが出来ます。 という事は、同じようにしてx1 からx2 を、x2 からx3を、というふうにして交点を求めていけば、そのx 座標の値は、次第(実際は急激)にCの平方根に近づくわけです。 プログラムでは、ニュートン法のアルゴリズムをプログラムにしてみましょう。 ニュートン法では、x0 としてなるべくCの平方根に近い値を与えた方が良いので、まずCの平方根より大きい最小の(つまりCの平方根に最も近い)整数を探すようにしました。これは、単に変数を1づつ増やしながらその2乗がCより大きくなるのを待つだけで実現できますね。
例として、入力した値の平方根をニュートン法で求めるプログラムを作っておきました。収束の様子も見れるようにしたので、いろいろな値(正の整数)を入れて値の変化を見てみてください。10回計算を繰り返し、その値をグラフに表示していますが、かなり速く収束しています。 |