繁体   English   中英

使用scipy.optimize.curve_fit在python中进行曲线拟合

[英]Curve fit in python using scipy.optimize.curve_fit

我正在尝试使用scipy.optimize.curve_fit曲线拟合我的数据。 由于某种原因,它不喜欢我的方程式。 如果我使用合理的数字绘制方程,它看起来是正确的。 所以我相信我的方程式。 如果我尝试拟合一个更简单的方程式,它将起作用,因此,我通常会相信我的代码。 关于它为什么不起作用的任何建议? 具体的错误返回是“残差在初始点不是有限的”。 将p0更改为任何合理的值也无济于事

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]))

您包括一个恰好为零的X值,这会导致被零除错误。 如果我将零值替换为0.01,则您的代码将在我的测试中正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM