2016-11-03 15 views
2

Scipyに含まれるcurve_fit関数を使用して少し問題があります。ここで私はフィットしたい機能は次のとおりです。データをcurve_fitで点に合わせるようにする

def funclog(x, a, b, c, d): 
    return a * np.log(b * x + c) + d 

私が持っている問題は、=、私は特定のいくつかのポイント上の値(Y(分)= 0とy(max)を持つようにフィット関数を好むだろうということです1)。これらのポイントをcurve_fitで強制的に使用するにはどうすればよいですか?

は、使用する境界を試して、あなたに

+0

私は[このアプローチ](http://stackoverflow.com/a/16632712/832621)助けてくれると信じています –

答えて

1

x=0で特定の値を持つフィットの要件、x=1、そのパラメータがa意味b,c,dはセットに従って制約されます二つの式で:

funclog(0, a, b, c, d) = 0、あなたが検討しているfunclogの形態についてfunclog(1, a, b, c, d) = 1

、あなたは(ユニーク)溶液を得adに対してこの連立方程式を解くことができる

a = 1/(-log(c) + log(b + c))d=log(c)/(log(c) - log(b + c))

bcは、分母がゼロに等しくないと仮定します)。

デフォルトで制約を満たす、aと新しいフィット関数でfunclog結果、すなわち、

(log(c) - log(b*x + c))/(log(c) - log(b + c))dため

をこれらの式を置き換えます。 bcの値はcurve_fitです。

+0

ありがとう、それは私が探しているものです! – Vlad

0

ありがとう:

bounds = ([amin, bmin, cmin, dmin], [amax, bmax, cmax, dmax]) 
(or np.inf -np.inf if limes of param is in infininty) 

popt1, pcov1 = curve_fit(funclog, x, y, bounds=bounds) 
+0

問題は私のパラメータをバインドしたくないということですが、機能そのものの結果 – Vlad

+0

フィッティング後に結果を「正規化」する必要がありますか? あなたは、最大Yを1、最小Yをゼロとして知っていますか? – fafnir1990

関連する問題