2014-01-16 49 views
3

我對此並不熟悉,並且一直在尋找這個小時,將它與其他最小二乘擬合示例進行比較,但示例代碼似乎沒有點擊。最小平方擬合,令人困惑的python scipy分配查詢

http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html從代碼是

>>> from numpy import * 
>>> x = arange(0,6e-2,6e-2/30) 
>>> A,k,theta = 10, 1.0/3e-2, pi/6 
>>> y_true = A*sin(2*pi*k*x+theta) 
>>> y_meas = y_true + 2*random.randn(len(x)) 

>>> def residuals(p, y, x): 
...  A,k,theta = p 
...  err = y-A*sin(2*pi*k*x+theta) 
...  return err 

>>> def peval(x, p): 
...  return p[0]*sin(2*pi*p[1]*x+p[2]) 

>>> p0 = [8, 1/2.3e-2, pi/3] 
>>> print(array(p0)) 
[ 8.  43.4783 1.0472] 

>>> from scipy.optimize import leastsq 
>>> plsq = leastsq(residuals, p0, args=(y_meas, x)) 
>>> print(plsq[0]) 
[ 10.9437 33.3605 0.5834] 

>>> print(array([A, k, theta])) 
[ 10.  33.3333 0.5236] 

>>> import matplotlib.pyplot as plt 
>>> plt.plot(x,peval(x,plsq[0]),x,y_meas,'o',x,y_true) 
>>> plt.title('Least-squares fit to noisy data') 
>>> plt.legend(['Fit', 'Noisy', 'True']) 
>>> plt.show() 

在殘差函數,那爲什麼3個對象,A,K,θ-可以被分配至p?任何幫助表示讚賞

回答

3

殘差函數使用tuple unpacking來檢索序列p的元素。元組拆包的一個更簡單的例子可以是:

x = ['One', 'Two', 'Three'] 

a,b,c = x 

print(a) # One 

在殘差的情況下發揮作用它可以更容易閱讀(分別使用​​而非p[0], p[1], p[2])。