テイラー展開を用いた逆数の高次収束計算

【 はじめに 】

 ここで作成する漸化式は真の値に収束するものの"期待通り"の収束の速さを示しません。
 その理由がわかる方がいましたらコメント欄やメール(dinopcom@gmail.com)まで教えてください。 よろしくお願いします。



【 準備 】

 f(x) 及びそれのn回微分を行った導関数を用意する。このとき f(x) は f(x) = 0 で任意の数値 a の逆数 1/a を解とするものを選ぶ。



【 ニュートン法と高次漸化式 】

 次にテイラー展開による近似関数により f(x) = 0 の解を求める。

 ここで x - x0 = x0(1 - ax0) はニュートン法 による2次収束漸化式に等しい。つまり高次収束漸化式はニュートン法の漸化式に対し 高次の誤差項 x0^2 * Ο((x-x0)2) を加算 すればいいことが分かる。


【 高次の誤差項を求める 】

 ここでテイラー展開より2次以上の誤差項は...


 上のようになるので、Ο(x-x0) を取り出し さらに準備段階で求めた高次導関数により変形を行う。


 途中 x - x0 を消去するためにニュートン法から求めた近似を使う。


【 高次漸化式 】

 以上から高次の漸化式を導く。

 これで漸化式を求めることができた。

 ここで更に計算をしやすくするため E(x) = 1 - ax と置くと...

 計算にはこの式を用いる。


【 結果 】

 こうしてできた高次収束漸化式を用い実際に計算を行った...が、うまくいかない!
 正確に言うと真の値に2次以上の速さで収束するものの遅い!

 もっと言うと
 xn+1 = xn(1 + En + En^2 + En^3 + En^4 +...)
というような各項に絶対値を付けた符号無視の加算を行った漸化式の方がはるかに収束が速い!
これはなぜ???????

 どなたか分かる方がいましたら教えてください!

 どこか間違えている箇所があるのでしょうか???


カテゴリー「VC++ TIPS」 のエントリー