<p>似乎您遇到的大多数问题都与使用<code>numpy</code>vs<code>math</code>有关。为了完整起见,并且由于您提到了<code>lmfit</code>,要使用<code>lmfit</code>来完成此操作,您可以使用</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
from lmfit import Model
def test(x, a, b, c):
return (a + b*np.log(x) + c*np.log(x)**2)
# create model from your model function
mymodel = Model(test)
# create initial set of named parameters from argument of your function
params = mymodel.make_params(a=0.5, b=1.1, c=0.5)
# Create some dummy data
x_data = np.linspace(1, 10, 10)
y_data = np.log(x_data) + np.log(x_data)**2 + np.random.random(len(x_data))
# run fit, get result
result = mymodel.fit(y_data, params, x=x_data)
# print out full fit report: fit statistics, best-fit values, uncertainties
print(result.fit_report())
# make a stacked plot of residual and data + fit
result.plot()
plt.show()
</code></pre>
<p>请注意,<code>curve_fit()</code>将欣然接受未初始化的参数,并为所有参数指定不可能调整的默认值1。Lmfit不允许这样做,并强制您显式地设置初始值。但它也能更好地报告统计数据、不确定性,并允许组合更多的complpex模型。在</p>
<p>对于您的示例,fit报告将显示</p>
^{pr2}$
<p>还有一个阴谋</p>
<p><a href="https://i.stack.imgur.com/IgUeE.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/IgUeE.png" alt="enter image description here"/></a></p>