2015-05-14 88 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