import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import scipy.special as sc
import math
##自定义函数 指数积分
def func(x,a,b):
c=1.798#单位时间单位长度发热丝的发热量
d=0.006#校准后的探针间距
e = 15.0 #热脉冲加热时间
#a为热传导系数
#b为热容量
return c/(4*math.pi*a*b)*(sc.expi(-d*d/(4*a*(x-e)))-sc.expi(-d*d/(d*a*x)))
func(35.0,4.0,2.0)
#定义x,y数组
x = [1,2,3,4,5,6]
x = np.array(x)
num = [0.1,0.3,0.6,0.7,0.56,0.40]
y = np.array(num)
#非线性最小二乘法拟合
popt, pcov = curve_fit(func, x, y)
#获取popt里面是拟合系数
print(popt)
a = popt[0]
b = popt[1]
报错位置:
RuntimeError Traceback (most recent call last)
<ipython-input-37-21e87c6beb1e> in <module>()
21 y = np.array(num)
22 #非线性最小二乘法拟合
---> 23 popt, pcov = curve_fit(func, x, y)
24 #获取popt里面是拟合系数
25 print(popt)
D:\anaconda\lib\site-packages\scipy\optimize\minpack.py in curve_fit(f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs)
753 cost = np.sum(infodict['fvec'] ** 2)
754 if ier not in [1, 2, 3, 4]:
--> 755 raise RuntimeError("Optimal parameters not found: " + errmsg)
756 else:
757 # Rename maxfev (leastsq) to max_nfev (least_squares), if specified.
RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 600.
在论坛上看到说可修改maxfev上限。
eg:Para = leastsq(error, p0, args=(x, y), maxfev=500000)
但是没看懂这步