岡本@金沢大学です。
豊田さんの[fpr 1635]より:
>>GCONV=0.0000001(=1E-7)と1.1175563E-6よりも小さく指定してあるのに
>>なぜこれが有効にならないで,収束の計算を途中で
>>やめてしまうのでしょう?
>
>収束基準がきびしすぎるので,すり鉢の底が,ほんのすこし
>
>〜〜〜〜〜
>
>のように波打っている状態に翻弄されているのだと思います.
上の補足説明です。
一般に、極値探索においては独立変数の方の精度は半減します。
極小点(極大点)においては、1次の項は0になり、2次以上の
項で表わされる、実質的には2次関数で近似されることになります。
f(x) = a*((x-b)**2) + c
という関数は、x=bで極小になります。ここで、記号**はべき乗を表わします。
x=bの近傍での関数値の振る舞いを調べるためx=b+eでの値との差をとります。
f(b+e) - f(b) = a*((b+e-b)**2) - a*((b-b)**2)
= a*(e**2) - a*(0**2)
= a*(e**2)
すなわち、
f(b+e) = f(b) + a*(e**2)
上式より、a*(e**2)の大きさがf(b)=cの有効桁数より小さいときは
f(b+e) = f(b)
となります。
計算が倍精度で行われているとき、単純にいえば、
e = 0.1**7
であれば、
e**2 = 0.1**14
となり、倍精度の限界に近くなります。他の要因、aの大きさとか、
計算誤差の積み重ねなど、を考えると7桁の精度は危ないことが
あると予想されます。
倍精度計算のとき、関数値の精度は倍精度に近いと考えてよいと
思いますが、最尤法など極値を求める解法においては独立変数の
方の解の精度は倍精度の半分が限界になっている場合が多いと
思われます。
金沢大学文学部
岡本 安晴
ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。