Python curve_fit:找不到最佳参数

问题描述

我正在拟合很多曲线,但到目前为止,由于不断出现此错误,我尚未通过所有数据进行拟合: 引发RuntimeError(“找不到最佳参数:” + errmsg)

RuntimeError:找不到最佳参数:函数调用次数已达到maxfev = 1000。

我发现过去的原因不足3分,但是最新的错误使我难以理解。之前已经问过这个问题,但是尚未给出导致这种错误的各种原因的完整解释。也许我们可以在这里创建它。

我为最近的错误创建了一个测试程序:

import math

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np

rho = [-0.,0.00722022,0.000258,-0.,0.00601504,0.00120482,0.00090416,0.00135318,0.00361011,0.00328299,-0.]
theta = [1.20336943e-03,7.27272727e-03,2.58064516e-04,2.71428571e-01,1.81818182e-02,6.05143722e-04,1.20627262e-03,7.23981900e-03,9.03342367e-04,3.62318841e-03,9.88142292e-04,5.41516245e-03,2.70758123e-03,3.61010830e-03]

def power_law(x,a,b):
    return a*np.power(x,b)

popt,pcov = curve_fit(power_law,rho,theta,maxfev=1000)

x_eval = np.linspace(min(rho),max(rho),100)

plt.plot(rho,'ro',label="Original Data")
plt.plot(x_eval,power_law(x_eval,*popt),label="Power Law Fitted Curve")
plt.legend(loc='upper left')
plt.show()

解决方法

here所述,您可以尝试通过包括边界来帮助拟合过程。

,

在这种情况下,maxfev(创建拟合线的尝试次数太少。我将其提高到10000,这样就解决了错误。