我是iPython的新手,需要解决一个特定的曲线拟合问题,我有这个概念,但是我的编程知识还有限。我有实验数据(x, y)
拟合到一个具有四个系数(a,b,c,d)
的方程(曲线拟合),我想将这些系数(例如a)中的一个固定到一个特定值并重新设计我的实验数据(非线性最小二乘)。系数b,c和d并不相互独立,这意味着它们通过方程组相关。带约束方程的ipython非线性最小二乘法
更适合使用curve_fit
或lmfit
?
我curve_fit开始这样:
def fitfunc(x,a,b,c,d):
return a+b*x+c/x+log10(x)*d
popt, fitcov = curve_fit(fitfunc, x, y)
或像这样的代码lmfit
:
import scipy as sp
from lmfit import minimize, Parameters, Parameter, report_fit
def fctmin(params, x, y):
a = params['a'].value
b = params['b'].value
c = params['c'].value
d = params['d'].value
model = a+b*x+c/x+d*np.log10(x)
return model - y
#create parameters
params = Parameters()
params.add('a', value = -89)
params.add('b', value =b)
params.add('c', value = c)
params.add('d', value = d)
#fit leastsq model
result = minimize(fctmin, params, args=(x, y))
#calculate results
final = y + result.residual
report_fit(params)
这里的关键似乎是你的系数不是独立的。如果他们是,'curve_fit'应该很好地完成这项工作。但是,您似乎无法处理上述任一解决方案中的依赖关系,因此不能保证'curve_fit'或'lmfit'的输出将保持该依赖关系。你能解决一个或多个自变量的相关方程吗? – Jsl