我一直试图用未知的拟合参数“ga”和“MA”拟合一个数据文件。我想做的是设置一个范围,“MA”的值将驻留在该范围内并拟合数据,例如,我希望MA的拟合值在范围[0.5,0.8]内,并希望保持“ga”作为任意拟合参数。我不知道怎么做。我在这里复制python代码:
#!/usr/bin/env python3
# to the data in "data_file", each line of which contains the data for one point, x_i, y_i, sigma_i.
import numpy as np
from pylab import *
from scipy.optimize import curve_fit
from scipy.stats import chi2
fname = sys.argv[1] if len(sys.argv) > 1000 else 'data.txt'
x, y, err = np.loadtxt(fname, unpack = True)
n = len(x)
p0 = [-1,1]
f = lambda x, ga, MA: ga/((1+x/(MA*MA))*(1+x/(MA*MA)))
p, covm = curve_fit(f, x, y, p0, err)
ga, MA = p
chisq = sum(((f(x, ga, MA) -y)/err)**2)
ndf = n -len(p)
Q = 1. -chi2.cdf(chisq, ndf)
chisq = chisq / ndf
gaerr, MAerr = sqrt(diag(covm)/chisq) # correct the error bars
print 'ga = %10.4f +/- %7.4f' % (ga, gaerr)
print 'MA = %10.4f +/- %7.4f' % (MA, MAerr)
print 'chi squared / NDF = %7.4lf' % chisq
print (covm)
您可以考虑使用lmfit(https://lmfit.github.io/lmfit-py)来解决这个问题。Lmfit为优化和曲线拟合提供了更高级别的接口,包括将参数视为具有边界的python对象
您的脚本可能被翻译为使用lmfit作为
您可以通过
result.params
访问最佳拟合参数;初始params
不会因拟合而改变。还有一些例程可以绘制最佳拟合结果和/或残差相关问题 更多 >
编程相关推荐