在python中打印表面拟合方程

Posted

技术标签:

【中文标题】在python中打印表面拟合方程【英文标题】:print surface fit equation in python 【发布时间】:2015-07-25 22:56:59 【问题描述】:

我正在尝试使用 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)

但是,我怎样才能打印/获取曲面的拟合方程(带系数值)?

我将不胜感激。 谢谢。

【问题讨论】:

你能贴出对应“到目前为止,我已经使用最小二乘法成功绘制了 3d-fitted-surface”的代码吗? @etna 添加了根据您的评论使用的配件部分。 好的...根据函数 scipy.linalg.lstsq docs.scipy.org/doc/scipy-0.15.1/reference/generated/… 的文档,估计的系数应该存储在您的变量 C 所以 print C 似乎是一个合理的做法: ) @etna 哇!做的工作......但是我可以用相应的系数在画布上打印方程吗? 与 A 中的相同,所以这里首先是常数等。打印方程的方法是:print 'f(x,y) = :.2fx^2+:.2fy^2+:.2fxy+:.2fx+:.2fy+:.2f'.format(C[4],C[5],C[3],C[1],C[2],C[0])(但请确保我订购了正确的系数)。另一种方式:print 'f(x,y) = 4:.2fx^2+5:.2fy^2+3:.2fxy+1:.2fx+2:.2fy+0:.2f'.format(*C). 【参考方案1】:

根据函数 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) = :.2fx^2+:.2fy^2+:.2fxy+:.2fx+:.2fy+:.2f'.format(C[4],C[5],C[3],C[1],‌​C[2],C[0])

或:

print 'f(x,y) = 4:.2fx^2+5:.2fy^2+3:.2fxy+1:.2fx+2:.2fy+0:.2f'.format(*C)

顺便说一句,库pandasstatsmodels 对这类任务非常有帮助(例如检查Run an OLS regression with Pandas Data Frame)

【讨论】:

感谢熊猫的建议。但我也可以使用当前代码检查拟合优度(或 p 值)吗? ? 据我所知,没有“捷径”,因此您需要计算系数的标准误差(例如thetarzan.wordpress.com/2012/10/27/…),然后计算 t 统计量,最后得到您的 p 值。 .. 这个最小二乘拟合函数是否为我们提供了一些 R 值?我找不到它。

以上是关于在python中打印表面拟合方程的主要内容,如果未能解决你的问题,请参考以下文章

将 PrinterJob 对象拟合到 BufferedImage 的特定打印格式

鸡蛋里挑电路

剑指Offer-链表面试题6:从尾到头打印链表

Python最小二乘法拟合与作图

Python:使用 MLPRegressor 拟合 3D 函数

Python分析捕食者和被捕食者模型 Lotka--Volterra方程 | 拟合求解a,b,c,d