岡本@金沢大学です。 豊田さんの[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桁の精度は危ないことが あると予想されます。 倍精度計算のとき、関数値の精度は倍精度に近いと考えてよいと 思いますが、最尤法など極値を求める解法においては独立変数の 方の解の精度は倍精度の半分が限界になっている場合が多いと 思われます。 金沢大学文学部 岡本 安晴
ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。