fmin関数で近似したい実験データがいくつかあります。私はすでに別のサンプルでfminを使用しましたが、すべて問題ありませんでした。
今回は、次のような関数でデータを表現します。
def f3(c,t):
resultat=0
test=t-c[0]
if (test<0):
resultat = c[1]
else:
resultat = c[1]+c[2]*(t-c[0])+c[3]*(t-c[0])*(t-c[0])+c[4]*(t-c[0])*(t-c[0])*(t-c[0])
return resultat
tは時間ベクトルであり、c [0]はしきい値(多項式係数のc [i])です (ちなみに、データ例を生成するために使用したため、この関数でデータを表すことができます!)
関数エラーは次の式で与えられます:
def e3(p,temps,y):
error = 0
i=0
for t in temps:
error = error + (f3(p,t)-y[i])**2
i=i+1
#cont = min(0,p[0])
#error = error +10000*(cont*cont)*(cont*cont*cont*cont)
return error
p3 = [10,250,0,0,0]であり、T_outはベクトルです
フィッティング操作は次のとおりです。
p3_min = fmin(e3,p3[:], args=(temps,T_out),xtol=0.0001,ftol=0.0001)
この命令は、「古典的な」多項式関数では非常にうまく機能しますが、f3関数(「if」が含まれている)では、p3_minは期待どおりに最適化されていません。
p [0]> 0のような制約を実装するか、反復回数を増やしようとしましたが、期待値を取得できませんでした。
誰かが「しきい値」関数でデータを適合させようとしたことがありますか?助けていただければ幸いです。