问题描述
我想拟合一个函数 f(x; k_1,k_2) 其中 f 是一个函数,它包含一个数值计算的整数,参数 k_1 和 k_2,我想针对一组给定的数据进行优化。
下面是函数的定义:
下面是函数 f(x) 对于 k_1 和 k_2 的任意固定值的样子:
def dgdx(g,x):
k_1 = 1e7
k_2 = 10
return k_1*g**(1/2)-k_2*g
g_0 = 1e10
x = np.linspace(0,1,101)
g = odeint(dgdx,g_0,x)
a=10
b=100
f = a*(g)**(1/2)+b
plt.plot(x,f,'-')
我的问题在标题中。为了解决它,我写了下面的代码,但它导致内核死亡:
def dgdx(x,k_1,k_2):
return k_1*(g(x,k_2))**(1/2)-k_2*g(x,k_2)
def g(x,k_2):
return quad(dgdx,args=(k_1,k_2))
def f(x,k_2):
a=10
b=100
return a*(g(x,k_2))**(1/2)+b
x_given = np.linspace(0,101)
y_given = f(x_given,1e7,10)+0.2*np.random.normal(size=len(x_given))
params,extras = curve_fit(f,x_given,y_given)
print("k_1=%g,k_2=%g" % (params[0],params[1]))
plt.plot(x_given,y_given,'o')
plt.plot(x_given,f(x,params[0],params[1]))
def dgdx(x,k_2):
return odeint(dgdx(x,k_2),x)
def f(x,params[1]))
解决方法
库 lmfit 支持拟合 ODE。