平方根を求める

C:\DATA\Java2\Dos>java Sqrt
2.0の平方根は : 1.414213562373095です。
3.0の平方根は : 1.7320508075688772です。
4.0の平方根は : 2.0です。
5.0の平方根は : 2.23606797749979です。
6.0の平方根は : 2.449489742783178です。
7.0の平方根は : 2.6457513110645907です。
8.0の平方根は : 2.82842712474619です。
9.0の平方根は : 3.0です。
 -- Press any key to exit (Input "c" to continue) --

メソッド(Method)はC言語の関数と同じで、意味のある処理をひとまとめにしたものです。
このプログラムではニュートン・ラプソン法で平方根を求めるメソッド Func を定義します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Sqrt.java の名前で保存して下さい。
        // 平方根を求める     前田 稔
        class Sqrt
        {
            public static void main(String args[])
            {   double n;
    
                for(n=2; n<10; n++)
                    System.out.println(n + "の平方根は : " + Func(n) + "です。");
            }
    
            static double Func(double n)
            {   double W,X;
                X = n;
                while(true)
                {   W = (n/X+X)*0.5;
                    if (W==X)   return W;
                    X = W;
                }
            }
        }
        
  2. Sqrt.java をコンパイルして class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. ページ先頭の画面が表示されたら完成です。

プログラムの説明

int 型は整数値しか格納できないので、今回のように小数点以下を計算する場合は double 型を使います。
ある数 C の平方根とは二乗すると C になる数のことで、X**2-C=0 の二次方程式を解けば求まることになります。
この X**2-C=0 という式を、「接線」とx軸との交点を求めていくニュートン・ラプソン法で解いてみましょう。

解よりも右側にある適当な x 座標(x0)における f(x)=X**2-C の接線と x 軸との交点を求めます。
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 は x0 と解の間にあり x0 よりもより解に近い事がわかるでしょう。
同じようにして x1 から x2 を、x2 から x3 を ・・・ と交点を求めていけば、その x 座標の値は急速にCの平方根に近づくわけです。


平方根を求めるメソッド(Func)です。
static double Func(double n)
{   double W,X;
    X = n;
    while(true)
    {   W = (n/X+X)*0.5;
        if (W==X)   return W;
        X = W;
    }
}

【演習】

課題1

円の半径(double 型)をパラメータとして、面積を求めるメソッド(Menseki)を作成して下さい。
面積= 円周率 * 半径 * 半径

課題2

円の半径(double 型)をパラメータとして、体積を求めるメソッド(Taiseki)を作成して下さい。
体積= 4 / 3 * 円周率 * 半径の三乗

超初心者のプログラム入門(Java2)