q11159266316関連

2017/09/22

C言語では1/4は0と解釈されるので1.0/4.0あるいは0.25
としなければならないというのは、事実です。
また無限ループになる可能性もあることも事実です。
しかし敢えて直しませんでした。

下記はこれらを修正したものですが、ほぼ同じ結果
になってます。
https://ideone.com/2HubkO


ニュートン法はある点で、解を微分係数を用いて「予測」し
その予測点で、再予測することを繰り返して
解を求める方法です。
ただ本文のほうで述べた通り初期値の取り方によっては
収束しない場合があります。
逆に収束する初期値では微分係数は多少異なっていても
多くの場合は収束するということを上の結果は物語っています。
(数値微分は概して精度が悪いがニュートン法と相性が良い
場合は、数値微分の精度が悪くても結構収束するということ
です)

複素数解にはなりますが、
Z^3=1の解をニュートン法で求めた場合にも似たような
ことが起こります。(この場合は(計算機的な意味では)非収束領域はありません)
初期値の取り方によって、3つの解のどれか一つに
収束するのですが、どの解に収束するのかを初期値から
予測するのは困難です。

下記の図は複素平面の|Rez|,|Imz|<=1の領域を表し
赤の領域は1に収束するもの、青の領域はω=(-1+√3i)/2
黄色の領域はω^2=(-1-√3i)/2に収束する初期値の領域を表しています。
赤・青・黄色の領域が離散する点に向けて集中しているのが見て取れます。

特定の解だけを狙って求める場合は、初期値の取り方がデリケートに
なることがわかります。
(結構有名な図です) 
ChieNote20160517.jpg