回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我是个新手,所以很抱歉,如果这个问题已经被回答了,我已经看了一眼,找不到具体的我在找什么。</p>
<p>我有一些或多或少的线性数据</p>
<pre><code>x = [0.1, 0.2, 0.4, 0.6, 0.8, 1.0, 2.0, 4.0, 6.0, 8.0, 10.0, 20.0, 40.0, 60.0, 80.0]
y = [0.50505332505407008, 1.1207373784533172, 2.1981844719020001, 3.1746209003398689, 4.2905482471260044, 6.2816226678076958, 11.073788414382639, 23.248479770546009, 32.120462301367183, 44.036117671229206, 54.009003143831116, 102.7077685684846, 185.72880217806673, 256.12183145545811, 301.97120103079675]
</code></pre>
<p>我使用<code>scipy.optimize.leastsq</code>来拟合线性回归:</p>
<pre><code>def lin_fit(x, y):
'''Fits a linear fit of the form mx+b to the data'''
fitfunc = lambda params, x: params[0] * x + params[1] #create fitting function of form mx+b
errfunc = lambda p, x, y: fitfunc(p, x) - y #create error function for least squares fit
init_a = 0.5 #find initial value for a (gradient)
init_b = min(y) #find initial value for b (y axis intersection)
init_p = numpy.array((init_a, init_b)) #bundle initial values in initial parameters
#calculate best fitting parameters (i.e. m and b) using the error function
p1, success = scipy.optimize.leastsq(errfunc, init_p.copy(), args = (x, y))
f = fitfunc(p1, x) #create a fit with those parameters
return p1, f
</code></pre>
<p>它工作得很好(虽然我不确定scipy.optimize在这里是否是正确的使用方法,但它可能有点过头了?)。</p>
<p>但是,由于数据点所在的方式,它没有在0处提供y轴截获。我知道在这种情况下,它必须为零,<code>if x = 0 than y = 0</code>。</p>
<p>有什么办法可以强迫我这样做吗?</p>