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 は十進での桁数で,
十分大きくとっておく.
とりあえず一根を求める. 反復が停止しないなどという失敗も有り得る.
失敗を検知して, 初期値をとり直しをする.
実根の個数をあらかじめ調べ, 場合分けして初期値を適切に設定し, 全実根を求める.