首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数据拟合到python中的自定义模型

将数据拟合到python中的自定义模型
EN

Stack Overflow用户
提问于 2018-07-12 04:45:41
回答 1查看 3.8K关注 0票数 0

大家好,我对python已经很熟悉了,但这是我第一次使用python进行数据分析,我想知道您是否可以就我遇到的一个问题提供一些帮助。

我需要将大约4000个不同的图拟合到下面的函数中:b+e*A*(1.19104*(10**-16))*((x*(10**-9))**-5)*((-1+np.exp(0.0143878/(T*x*(10**-9))))**-1)在这个函数中,我想将b,e和A限制为每个图的特定值,变量T的值根据数据移动。

我试着使用scipy optimize,但我不知道如何使用它来保存参数。

我尝试使用pyAstronomy函数,但是它的效率非常低(或者我的代码是idk),并且我得不到与我应该得到的数据大致相同的数据。

最后,我目前正在尝试使用lmfit,但我的代码似乎让所有参数都与猜测相同,并且没有任何变化。我对如何继续下去感到困惑。我当前的代码看起来像这样...

代码语言:javascript
复制
def bbnm(x,b,e,T,A):
   y = b+e*A*(1.19104*(10**-16))*((x*(10**-9))**-5)*((-1+np.exp(0.0143878/(T*x*(10**-9))))**-1)
   return y     

params = bbmodel.make_params(b=0,e=.99,T=5100,A=wgeometry)
params['b'].vary = False
params['e'].vary = False
params['A'].vary = False
params['T'].vary = True
bb = bbmodel.fit(power[1465:2510],params,x=wavelength[1465:2510])
EN

回答 1

Stack Overflow用户

发布于 2018-07-12 07:42:43

下面是将scipy的curve_fit参数限制在指定范围内的代码。在本例中,第一个参数的界限是+/-无穷大(无界),第二个参数的界限是+/- 100,但拟合的参数在界限内并且正常拟合,第三个参数受到其界限的限制。

代码语言:javascript
复制
import numpy
import matplotlib
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

xData = numpy.array([5.0, 6.1, 7.2, 8.3, 9.4])
yData = numpy.array([ 10.0,  18.4,  20.8,  23.2,  35.0])


def standardFunc(data, a, b, c):
    return a * data + b * data**2 + c


# some initial parameter values - must be within bounds
initialParameters = numpy.array([1.0, 1.0, 1.0])

# bounds on parameters - initial parameters must be within these
lowerBounds = (-numpy.Inf, -100.0, -5.0)
upperBounds = (numpy.Inf, 100.0, 5.0)
parameterBounds = [lowerBounds, upperBounds]

fittedParameters, pcov = curve_fit(standardFunc, xData, yData, initialParameters, bounds = parameterBounds)

# values for display of fitted function
a, b, c = fittedParameters

# for plotting the fitting results
xPlotData = numpy.linspace(min(xData), max(xData), 50)
y_plot = standardFunc(xPlotData, a, b, c)

plt.plot(xData, yData, 'D') # plot the raw data as a scatterplot
plt.plot(xPlotData, y_plot) # plot the equation using the fitted parameters
plt.show()

print('fitted parameters:', fittedParameters)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51293922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档