【发布时间】:2021-03-11 19:31:14
【问题描述】:
我正在尝试让 a*log(b/x)^c 类型适合以下数据(简化为 10 个数据点)
我尝试了其他一些问题like this one using both curve_fit and lmfit 中描述的方法,但解决方案永远不会收敛。我的猜测是我的初始条件很糟糕。我能够将其他指数函数注释掉,但应用程序需要给定形式的对数拟合。附上适合的数据以供参考。
import numpy as np
from scipy.optimize import curve_fit
x=[0, 0.89790454, 1.79580908, 2.69371362, 3.59161816, 4.48952269, 5.38742723, 6.28533177, 7.18323631, 8.08114085]
y=[0.39599324, 0.10255828, 0.07094521, 0.05500624, 0.04636146, 0.04585985, 0.0398909, 0.03340628, 0.03041699, 0.02498938]
x = np.array(x,dtype=float)
y = np.array(y,dtype=float)
def func(x, a, b, c):
#return a*np.exp(-c*(x*b))+d
return a*(np.log(b/x)**c)
popt, pcov = curve_fit(func, x, y, p0=[.5,.5,1],maxfev=10000)
print(popt)
a,b ,c = np.asarray(popt)
【问题讨论】:
-
a*(np.log(b/x)**c)对x=0意味着什么? -
嗯,好点。 a*(np.log(b-x)**c) 那么呢?老实说,我无法让任何日志适合收敛
标签: python scipy curve-fitting