Newton 法の収束の様子を調べてみよう. の根
が
存在するとし,
とする.
が
級とし,
,
を
の周りで Taylor 展開すると
def sqrt(A,Eps) { X = deval(A); /* 倍精度浮動小数に変換 */ while ( 1 ) { Y = (X+A/X)/2; if ( abs(X-Y) < Eps ) return Y; else X = Y; } } /* if ( X > 0 ) return X; else return -X と同じ */ def abs(X) { return X > 0 ? X : -X; }倍精度浮動小数に変換するのは, 有理数で計算しても時間がかかるだけで あまり意味がないから.
eval(A^(1/2),N)
で見ればよい. N は十進での桁数で,
十分大きくとっておく.
とりあえず一根を求める. 反復が停止しないなどという失敗も有り得る.
失敗を検知して, 初期値をとり直しをする.
実根の個数をあらかじめ調べ, 場合分けして初期値を適切に設定し, 全実根を求める.