Python使用curve_fit报错“Optimal parameters not found: The maximum number of function evaluations is exceeded.”
将op.curve_fit()函数的bounds值改大即可。
#拟合
import numpy as np
import pandas as pd
from scipy import optimize as op
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
# 忽略除以0的报错
np.seterr(divide='ignore', invalid='ignore')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
df=pd.read_excel(r"*.xlsx')
x_data = df.iloc[:,9]
y_data = df.iloc[:,8]
# 需要拟合的函数
def f(x, A, B,C):
return A * x * (1-x/B)**C
#bounds=(0,10000),最大值为10000,报错
p,e = op.curve_fit(f_4,x_data,y_data,bounds=(0,10000))
x = np.arange(20,120,0.01)
y = f(x,*p)
print(*p)
plt.figure(figsize=(8, 6))
plt.scatter(x_data, y_data, marker='o',label='实际值',s=16)
plt.plot(x4,y4,color='#00BFFF',label='模型')
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.legend()
plt.show()
上述代码报错:
RuntimeError: Optimal parameters not found: The maximum number of function evaluations is exceeded.
将bounds=(0,10000)改为bounds=(0,100000),即可正确拟合