<p>我认为<code>lmfit.models.PolynomialModel()</code>正是你想要的。该模型将多项式次数<code>n</code>作为参数,并使用名为<code>c0</code>、<code>c1</code>、<code>cn</code>(最多处理<code>n=7</code>)的系数:</p>
<pre><code>from lmfit.models import PolynomialModel
def f(x, y, degree=3):
fitModel = PolynomialModel(degree=degree)
params = fitModel.make_params(c0=0, c1=1, c2=1, c3=0,
c4=0, c5=0, c6=0, c7=0)
# or if you prefer to do it the hard way:
params = fitModel.make_params(**{'c%d'%i:0 for i in range(degree+1)})
return fitModel.fit(y, x=x, params=params)
</code></pre>
<p>请注意,这里可以过度指定系数。也就是说,如果<code>degree=3</code>,那么对<code>fitModel.make_params(c0=0, ..., c7=0)</code>的调用实际上不会为<code>c4</code>、<code>c5</code>、<code>c6</code>或<code>c7</code>生成参数。你知道吗</p>
<p><code>PolynomialModel</code>会产生一个<code>TypeError</code>if<code>degree > 7</code>,所以我没有考虑你的显式测试。你知道吗</p>
<p>我希望这能让您开始学习,但看起来您可能也想包括其他模型函数。在这种情况下,我所做的是制作一本类名词典:</p>
<pre><code>from lmfit.models import LinearModel, PolynomialModel, GaussianModel, ....
KnownModels = {'linear': LinearModel, 'polynomial': PolynomialModel,
'gaussian': GaussianModel, ...}
</code></pre>
<p>然后用它来构建模型:</p>
<pre><code>modelchoice = 'linear' # probably really came from user selection in a GUI
if modelchoice in KnownModels:
model = KnownModels[modelchoice]()
else:
raise ValueError("unknown model '%s'" % modelchoice)
params = model.make_params(....) # <- might know and store what the parameter names are
.....
</code></pre>