2017-03-02 5 views
0

私は複数のデータセットに同時に適合できるアルゴリズムを実装しました。 multi fitscipy leastsq fit - 特定のソリューションにペナルティをかける

ターゲット関数は、ここでは(LaFortune散乱モデル)を表示するためには複雑すぎるので、私は説明のために、溶液から目的の機能を使用します:それは、このソリューションに基づいています

def lor_func(x,c,par): 
    a,b,d=par 
    return a/((x-c)**2+b**2) 

どのようにすることができますフィッティングアルゴリズムがparで、結果がlor_func < 0のパラメータセットを選択した場合、フィッティングアルゴリズムを罰する。

ターゲット関数の負の値は、数学的な観点から有効です。したがって、この負のターゲット関数をもたらすパラメータセットparは、最小誤差を有する解であり得る。しかし、私はそれらが物理的にも有効であるように、そのような解決策を除外したい。以下のような

機能:それはあまりにも0値を最適化してフィット感が間違ったデータを返すよう

def lor_func(x,c,par): 
    a,b,d=par 
    value = a/((x-c)**2+b** 
    return max(0, value) 

は動作しません。その結果は正しい結果とは異なります。

答えて

1

bounds引数をscipy.optimize.least_squaresとしますか?

res = least_squares(func, x_guess, args=(Gd, K), 
        bounds=([0.0, -100, 0, 0], 
          [1.0, 0.0, 10, 1]), 
          max_nfev=100000, verbose=1) 

私はここで行ったように:私は事前にそれらを知らないよう Suggestions for fitting noisy exponentials with scipy curve_fit?

+0

境界はオプションではありません。これは 'power(a、b)'という用語を持つ関数targeの問題です。場合によっては 'a <0'で、' b'が壊れた番号であれば 'nan'を返します。これは、「ナノ」が発生したときに負の数を返すことで解決しました。だから私は彼が目的関数が負になる解を見つけるのを妨げなければならない。 – RaJa

+0

このアプローチが唯一の方法だと思われます。それは縛られているが動作している必要があります。 – RaJa

関連する問題