Python curve_fit: 未找到最佳参数
Python curve_fit: optimal paramaters not found
我正在拟合很多曲线,但到目前为止我还没有完成所有数据,因为我不断收到此错误:
raise RuntimeError("未找到最佳参数:" + errmsg)
运行时错误:未找到最佳参数:调用函数的次数已达到 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.00722022, 0.00601504,
0.00120482, 0.00090416, 0.00135318, 0.00361011, 0.00361011, 0.00328299,
-0., -0., -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, 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, theta, '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 并解决了错误。
我正在拟合很多曲线,但到目前为止我还没有完成所有数据,因为我不断收到此错误: raise RuntimeError("未找到最佳参数:" + errmsg)
运行时错误:未找到最佳参数:调用函数的次数已达到 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.00722022, 0.00601504,
0.00120482, 0.00090416, 0.00135318, 0.00361011, 0.00361011, 0.00328299,
-0., -0., -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, 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, theta, '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 并解决了错误。