2015-05-14 34 views
4

我正在嘗試使用matplotlib將曲面模型擬合到3D數據集(x,y,z)。
其中z = f(x,y)
所以,我要對二次擬合方程:Python中的打印曲面擬合公式

f(x,y) = ax^2+by^2+cxy+dx+ey+f 

到目前爲止,我已經成功地繪製了用最小二乘法採用3D-安裝面:

# best-fit quadratic curve  
    A = np.c_[np.ones(data.shape[0]), data[:,:2], np.prod(data[:,:2], axis=1), data[:,:2]**2]  
    C,_,_,_ = scipy.linalg.lstsq(A, data[:,2])  
    #evaluating on grid  
    Z = np.dot(np.c_[np.ones(XX.shape), XX, YY, XX*YY, XX**2, YY**2], C).reshape(X.shape) 

但,我怎樣才能打印/得到表面的擬合方程(帶有係數值)?

我的幫助將不勝感激。
謝謝。

+0

你可以發佈相應的代碼:「到目前爲止,我已經成功繪製了3d-fitting-s使用最小二乘法的urface「? – etna

+0

@etna添加了根據您的評論使用的裝配部分。 – diffracteD

+1

好的...根據函數的文檔scipy.linalg.lstsq http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.linalg.lstsq.html估計的係數應該被存儲在你的變量'C'因此'print C'似乎是一件合理的事情:) – etna

回答

3

根據函數scipy.linalg.lstsq http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.linalg.lstsq.html的文檔,估計的係數應該存儲在變量C中(與A中的列對應的順序)。

print 'f(x,y) = {:.2f}x^2+{:.2f}y^2+{:.2f}xy+{:.2f}x+{:.2f}y+{:.2f}'.format(C[4],C[5],C[3],C[1],‌​C[2],C[0]) 

或:

若要顯示小數點後2個位數的估計係數打印方程

print 'f(x,y) = {4:.2f}x^2+{5:.2f}y^2+{3:.2f}xy+{1:.2f}x+{2:.2f}y+{0:.2f}'.format(*C) 

順便說一句,圖書館pandasstatsmodels可以爲這種非常有幫助任務(例如,檢查Run an OLS regression with Pandas Data Frame

+0

感謝您對熊貓的建議。但是,我還可以使用當前代碼檢查擬合優度(或p值)。 ? – diffracteD

+0

據我所知,沒有「快捷方式」,因此您需要計算係數的標準錯誤(例如https://thetarzan.wordpress.com/2012/10/27/calculate-ols-regression-manually- in-python-using-numpy /),然後計算t統計量,最後得到你的p值... – etna

+0

這個最小二乘擬合函數爲我們提供了一些R值嗎?我無法找到它。 – diffracteD