2017-12-08 10 views
0

私はscipy.optimize.curve_fitで自分のデータをカーブフィッティングしようとしています。何らかの理由で私の方程式が好きではありません。妥当な数を使って方程式をプロットすると、正しく見えます。だから私は私の方程式を信頼する。私が単純な方程式に収まるようにしようとすると、それはうまくいくので、私は一般的に自分のコードを信頼します。それがうまくいかない理由に関する助言?具体的なエラー戻り値は「残差は初期点で有限ではありません」です。妥当なものにp0を変更することはまた役に立ちません。scipy.optimize.curve_fitを使用してPythonにフィットする曲線

import matplotlib.pyplot as plt 
from scipy.optimize import curve_fit 
import numpy as np 




Y=np.array([0.00001,1.421828697,2.553970883,3.340262844,3.931459808, 
4.640896164,5.084293887,5.379892368,5.557251457,5.705050698, 
5.823290091,5.911969636,5.971089332,6.059768876,6.118888573,6.178008269, 
6.266687814]) 


X=np.array([0,2500,5000,7500,10000,15000,20000,25000, 
30000,35000,40000,45000,50000,55000,60000,65000,70000]) 

plt.plot(X,Y,'g^') 



def func(X,J,g): 

    u=6.720*10**-5 
    k=1.380*(10**-16) 
    T=2 
    N=1 
    x=g*J*u*(X)/(k*T) 
    return N*g*J*(((2*J+1)/(2*J))*(1/(np.tanh((2*J+1)*x/(2*J))))-(1/(2*J))* 
    (1/(np.tanh(x/(2*J))))) 




plt.figure(1) 
popt, pcov = curve_fit(func, X,Y,p0=[3.5,2],bounds=([0.25,0.001],[10,4])) 
plt.plot(X, func(X, *popt), 'r--', label='fit-with-bounds') 

print(" J is %s " %(popt[0]),"\n","g is %s" %(popt[1])) 
+0

エラーについては何が不明ですか?別の初期点を試してみてください。 – Julien

+0

それは境界を指していますか?最初の点が何であるかわからない。 – EVS

+0

ドキュメントを読むのはどうですか?初期点は 'p0'であり、指定されていなければ1に設定されます。 – Julien

答えて

1

ゼロの除算エラーを引き起こす、正確にゼロのX値を含めます。ゼロの値を0.01に置き換えると、コードがテストで機能します。

関連する問題