尝试将一组数据绘制成指数曲线时:
上述代码会生成错误信息:
'RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.'
如果将maxfev设置为maxfev = 1300,则会解决该问题。
图形绘制出来了,但曲线拟合不正确。通过上述代码更改图形,
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import style
from matplotlib import pylab
import numpy as np
from scipy.optimize import curve_fit
x = np.array([30,40,50,60])
y = np.array([0.027679854,0.055639098,0.114814815,0.240740741])
def exponenial_func(x, a, b, c):
return a*np.exp(-b*x)+c
popt, pcov = curve_fit(exponenial_func, x, y, p0=(1, 1e-6, 1))
xx = np.linspace(10,60,1000)
yy = exponenial_func(xx, *popt)
plt.plot(x,y,'o', xx, yy)
pylab.title('Exponential Fit')
ax = plt.gca()
fig = plt.gcf()
plt.xlabel(r'Temperature, C')
plt.ylabel(r'1/Time, $s^-$$^1$')
plt.show()
上述代码的图表:
然而,当我添加数据点20
(x) 和 0.015162344
(y) 时:
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import style
from matplotlib import pylab
import numpy as np
from scipy.optimize import curve_fit
x = np.array([20,30,40,50,60])
y = np.array([0.015162344,0.027679854,0.055639098,0.114814815,0.240740741])
def exponenial_func(x, a, b, c):
return a*np.exp(-b*x)+c
popt, pcov = curve_fit(exponenial_func, x, y, p0=(1, 1e-6, 1))
xx = np.linspace(20,60,1000)
yy = exponenial_func(xx, *popt)
plt.plot(x,y,'o', xx, yy)
pylab.title('Exponential Fit')
ax = plt.gca()
fig = plt.gcf()
plt.xlabel(r'Temperature, C')
plt.ylabel(r'1/Time, $s^-$$^1$')
plt.show()
上述代码会生成错误信息:
'RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.'
如果将maxfev设置为maxfev = 1300,则会解决该问题。
popt, pcov = curve_fit(exponenial_func, x, y, p0=(1, 1e-6, 1),maxfev=1300)
图形绘制出来了,但曲线拟合不正确。通过上述代码更改图形,
maxfev = 1300
:
我认为这是因为点20和30太靠近了吗?相比之下,Excel将数据绘制为如下:
我该如何正确绘制此曲线?
p0=(1,1e-6,0)
的最后一个值进行更改,对我来说可以正确拟合数据。 - DavidG