在 python 中打印曲面拟合方程
print surface fit equation in python
我正在尝试使用 matplotlib 将表面模型拟合到 3D 数据集 (x,y,z)。
其中 z = f(x,y)
.
所以,我要用方程进行二次拟合:
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)
但是,我怎样才能 print/get 曲面的拟合方程(带有系数值)?
我将不胜感激。
谢谢。
根据函数 scipy.linalg.lstsq http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.linalg.lstsq.html 的文档,估计的系数应存储在变量 C 中(顺序对应于 A 中的列)。
要打印带有小数点后 2 位数字的估计系数的方程式:
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])
或:
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)
顺便说一下,图书馆 pandas
和 statsmodels
对这类任务很有帮助(例如检查 Run an OLS regression with Pandas Data Frame )
我正在尝试使用 matplotlib 将表面模型拟合到 3D 数据集 (x,y,z)。
其中 z = f(x,y)
.
所以,我要用方程进行二次拟合:
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)
但是,我怎样才能 print/get 曲面的拟合方程(带有系数值)?
我将不胜感激。
谢谢。
根据函数 scipy.linalg.lstsq http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.linalg.lstsq.html 的文档,估计的系数应存储在变量 C 中(顺序对应于 A 中的列)。
要打印带有小数点后 2 位数字的估计系数的方程式:
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])
或:
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)
顺便说一下,图书馆 pandas
和 statsmodels
对这类任务很有帮助(例如检查 Run an OLS regression with Pandas Data Frame )