我试图用给定的数据拟合下面的等式曲线。等式为n
。我遇到了麻烦,因为-6
在拟合时是min=0
,这是不可能的,所以我试图在from IPython import get_ipython
get_ipython().magic('reset -sf')
import numpy as np
from lmfit import Model
import matplotlib.pyplot as plt
# Homework Problem #2
Time = np.array ([0, 48, 76, 124, 204, 238, 289])
Concentration =np.array ([19.04, 17.6, 16.9, 15.8, 14.41, 13.94, 13.37])
# Rate Determination
Rate=Concentration/Time
# Model Definition
def rateEq(Concentration, k, n):
return k*(Concentration)**n
# Model creation
model=Model(rateEq)
# Parameters
params = parameters()
params.add(k=0.001)
params.add(n=0.001)
par.set(min=0)
# Data Fit v
result=model.fit(Rate, params, Concentration=Concentration)
# Print and Plot Results
print(result.fit_report())
result.plot_fit()
设置一个界限。但是,我得到一个未定义的术语参数错误。任何帮助都会非常感谢。
public <<E extends Comparable<? super E>>> List<E> sort(List<E> list)
答案 0 :(得分:0)
parameters
未定义,因为您没有在任何地方定义它。您将其用作params = parameters()
,可能暗示函数调用,但您没有定义或导入该函数....同样,par
未定义,因为您没有在任何地方定义它。
你几乎肯定想要
from lmfit import Model, Parameters # explicitly import Parameters
params = Parameters() # note the capitalization
params.add('k', value=0.001)
params.add('n', value=0.001)
什么不太清楚(因为我无法猜出par
是什么)
是否要
params['k'].min = 0
或
params['n'].min = 0
此外,仅作为警告:由于您的time[0]
为0,因此Rate[0]
将是无限的,这会在运行拟合时造成麻烦。