検索を行ったところ、問題はPython scipy: unsupported operand type(s) for ** or pow(): 'list' and 'list' に似ているようです が、そこに投稿された解決策は機能しませんでした。異なる。
scipy.curve_fit を使用してデータに曲線を当てはめようとしています。3 つのパラメーターをすべて解放したままにしておくと、すべてが正しく機能し、期待どおりの結果が得られます。
def func(x,a,b,c):
return a*np.exp(b*(x**c))
popt, pcov = curve_fit(func,x,y)
ただし、次のように値の1つ(c = 2)を修正しようとすると、
def func2(x,a,b):
return a*np.exp(b*(x**2))
popt, pcov = curve_fit(func2,x,y)
リンクされた質問で提案されているようにTypeError: unsupported operand type(s) for ** or pow(): 'int' and 'list'
使用numpy.power(x,2)
すると、コードを実行できますが、間違った結果が生成されます。誰かが私が間違っていることを見ていますか?
追加するように編集:さらに紛らわしいことですが、私が知る限り、curve_fit で使用されている 2 番目の式が機能する leastsq です。
2番目の編集:リストの問題について言及した人へ X と Y は両方とも配列になり、コードはエラーなしで実行されます。ただし、 func2 は依然として大幅に間違った結果を生成します。(ここにグラフを投稿しますが、どうやらもっと担当者が必要です。)
Func 1 のカーブフィットは、[a,b,c] = [ 1.71890826, -0.0239123, 3.17039851]
しかし func2 の場合はすべてうまくいきません[a,b] = [ -2.88694423e-15, 9.99999998e-01]
。このような小さな変更がどのようにして劇的な問題を引き起こすのか理解できません。leastsq は c=2 でこのデータを適合させることができました。