2016-10-18 17 views
0

データにシグモイド曲線をフィットさせるためにscipy.optimize.curve_fitを使用しています。私は[-3、0.5]と[0.5,3.0]のパラメータメーターの1つを結びつける必要がありますPython、scipy、curve_fit、bounds:どのように私は2つの間隔でparamをcontstraintできますか?

私は限界なしにフィットした曲線を試しました、そして次にパラメータがゼロより低いならば、 0.5]、逆に[0.5,3.0]

関数curve_fitを2つの区間で結ぶことは可能ですか?

+0

パラメータを 'curve_fit'で束縛することはできませんが、正確にこの機能を提供する[lmfit](https://lmfit.github.io/lmfit-py/)パッケージに興味があるかもしれません。 –

+0

私は過度に楽観的に話しました - 今私はそれを考えると、 'lmfit'に2つの区間制約を課す直接の方法はありません。おそらく、2つの依存パラメータを作成しようとすることができます。ここでは、1つは「-1」の係数でスケーリングされます。 –

答えて

0

いいえ、least_squares(したがってcurve_fit)はボックスの制約のみをサポートします。

0

これを行うには粗雑な方法があります。つまり、パラメータが複数の範囲外にある場合は、関数が非常に大きな値を返すようにすることです。例:

sigmoid_func(x, parameters): 
    if parameter outside multiple bounds: 
     return 1.0E10 * len(x) # very large number 
    else: 
     return sigmoid value 

これは、パラメータが複数の範囲外にある場合、非常に大きなエラーが発生するという効果があります。 [上限、下限]のシングルバウンド範囲がある場合、touはこのメソッドを使用すべきではありません.scipyの最新バージョンは、より一般的なシングルバウンド範囲タイプの問題を既にサポートしているからです。

関連する問題