首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lmfit v0_9_3时出错

问使用lmfit v0_9_3时出错
EN

Stack Overflow用户
提问于 2016-04-21 15:18:47
回答 1查看 359关注 0票数 2

对于使用python进行数据分析,以及使用lmfit进行非线性方程拟合,我还是比较陌生的。我试图建立一个复杂的半解析函数来描述污染物羽流在一维通道中随时间的运动。我用的是lmfit v0.9.3。我已经成功地完成了lmfit教程中的几个例子,但似乎无法让我自己的模型正常工作。下面的脚本将处理到tsm_mod.fit()调用,但随后返回错误:

文件"C:\Anaconda\lib\site-packages\lmfit\model.py",第501行,适合params.values()中的p) TypeError:“numpy.ndarray”对象不可调用

守则如下:

代码语言:javascript
复制
import numpy as np
import scipy as sp
import pandas as pd
from lmfit import Model

desmedt = pd.read_table('Directory\desmedt_test.txt',sep='\t')

x = desmedt['Times']
y = desmedt['Conc']

def tsm_intfunc(t,x,tau,u,k,alpha,beta,mass,ac):
    return((mass/(2*ac*(t*np.pi*k)**(1/2)))*np.exp(-((x-u*t)**2)/(4*k*t))*np.exp(-alpha*tau-alpha*(t-tau)/beta)
        *np.sqrt(beta*tau/(t-tau))*sp.special.iv(2*np.sqrt((alpha**2)*tau*(t-tau)/beta),1))

def tsm_desmedt(t,x,u,k,alpha,beta,mass,ac,nsteps):   
    dtau = t/nsteps
    cxt = (mass/(2*ac*np.sqrt(t*np.pi*k)))*np.exp(-((x-u*t)**2)/(4*k*t))*np.exp(-alpha*t)
    cxv = tsm_intfunc(t,x,0.00000001,u,k,alpha,beta,mass,ac)/2
    i = 1

    while (i<nsteps):
        cxv = cxv+tsm_intfunc(t,x,dtau*i,u,k,alpha,beta,mass,ac)/2
        i = i+1

    return cxt+(alpha/beta)*cxv*dtau

tsm_mod = Model(tsm_desmedt)
tsm_mod.set_param_hint('ac',value=18.2,vary=False)
tsm_mod.set_param_hint('alpha',value=1e-4)
tsm_mod.set_param_hint('beta',value=1e-1)
tsm_mod.set_param_hint('k',value=3)
tsm_mod.set_param_hint('mass',value=157100,vary=False)
tsm_mod.set_param_hint('nsteps',value=100,vary=False)
tsm_mod.set_param_hint('u',value=0.4)
tsm_mod.set_param_hint('x',value=4604,vary=False)

tsm_pars = tsm_mod.make_params()
tsm_fit = tsm_mod.fit(y,x,tsm_pars)

这可能是在lmfit的窃听器吗?或者,您认为我使用lmfit设置问题的方式有错误吗?

编辑:在拟合中使用的数据如下:

《时代》

7787.628 8330.04 8640 8756.244 8988.696 9337.392 9492.372 9724.86 10034.784 10228.536 10383.516 10577.232 10777.232 10777.232 10777.232 10177.232 11003.4 11119.644 11313.36 11468.34 11700.792 11855.772 120152 12204.468 12359.448 12630.672 12824.388 13173.084 13483.004 13412.924 14412.924 14955.336 15575.256 165.14 17357.472

康克

0.00944669 0.0850202 0.236167 0.576248 1.00135 2.01215 2.84345 3.51417 4.53441 5.21457 5.74359 5.88529 6.0081 5.755.61134 5.20513 4.95007 4.41161 3.74089 3.46694 3.07962 2.80567 2.41835 2.1444 1.74764 1.47681.20918 0.935223 0.6612690.406208 0.132254 0.11336 0.151147

EN

回答 1

Stack Overflow用户

发布于 2016-04-30 19:35:08

您的示例有点混乱,因为您的模型函数同时包含一个独立变量t和一个变量x,并且在您的主程序中您调用了times x。不管怎样,你想要的电话是

代码语言:javascript
复制
tsm_fit = tsm_mod.fit(y, tsm_pars, t=x)

这似乎不太合适,但这似乎是另一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36773892

复制
相关文章

相似问题

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