2017-12-08 79 views
0

scipy.optimize.curve_fit으로 데이터를 커브로 맞추려고합니다. 웬일인지 그것은 나의 방정식을 좋아하지 않는다. 그럴듯한 숫자를 사용하여 방정식을 그렸다면 올바르게 보입니다. 그래서 나는 내 방정식을 믿는다. 간단한 방정식에 맞추려고하면 일반적으로 내 코드를 신뢰할 수 있습니다. 왜 작동하지 않는지에 대한 조언이 있습니까? 구체적인 오류 반환 값은 "잔여 물은 초기 점에서 유한하지 않습니다."입니다. 합리적인 아무것도 P0를 변경하면 나누기 0으로 오류를 일으키는 원인이 정확히 제로의 X 값을 포함 또한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

도움이되지 않는 것입니다. 0.01의 값을 0으로 바꾸면 코드가 내 테스트에서 작동합니다.