2017-07-27 7 views
0

Scipy optimize.newtonは、初期ステップサイズが1e-4としてハードコードされています。この関数を異なるステップサイズ(理想的にはパラメータとして指定)で使用する最良の方法は何ですか?Scipy最適化ニュートン割線法

# https://github.com/scipy/scipy/blob/v0.19.0/scipy/optimize/zeros.py#L160 

else: 
    # Secant method 
    p0 = x0 
    if x0 >= 0: 
     p1 = x0*(1 + 1e-4) + 1e-4 
+0

これが便利な機能(非常に確実な機能)であることが確信できたら、機能リクエストを開き、引数に初期ステップサイズを追加するように頼むことができます。 '1e-4'を' initial_step'(または何か)のような変数に置き換えてインストールしたscipyのバージョンに追加してscipy 'の人に通知してください。'はそれをマージします分散バージョンでは、適合していると見える場合(実際にgithubマージリクエストの専門家ではありませんが、不正確です) – gionni

答えて

2

最初のステップサイズは、それがabs(x0)*1e-4 + 1e-4で、1e-4ではありません。たとえば、x0 = 1000の場合、初期ステップは0.1001になります。

ある目標の最初のステップサイズがhである場合は、変数x = x0 + 1e4*h*tの直線的な変更で実現できます。ここで、tは新しい変数です。 tに関しては、開始点は0です。したがって、ニュートンの方法は、サイズが1e-4のステップを作成します。これは、xという用語では、hに変換されます。

例:funcが本来の機能である

root = newton(lambda t: func(x0 + 1e4*h*t), 0) * 1e4 * h + x0 

。これは元の変数xに関して根を返します。

関連する問題