I'm trying to fit a surface model to a 3D data-set (x,y,z) using matplotlib.
Wherez = f(x,y).
So, I'm going for the quadratic fitting with equation:
f(x,y) = ax^2+by^2+cxy+dx+ey+fSo far, I have successfully plotted the 3d-fitted-surface using least-square method using:
# 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)But, how can I be able to print/get the fitted equation of the surface(with coefficient values) ?
I little help will be highly appreciated.
thank you.
- Can you post the code corresponding to "So far, I have successfully plotted the 3d-fitted-surface using least-square method"?etna– etna2015-05-14 11:32:19 +00:00CommentedMay 14, 2015 at 11:32
- @etna added the fitting section used as per your comment.diffracteD– diffracteD2015-05-14 11:37:04 +00:00CommentedMay 14, 2015 at 11:37
- 1Ok... according to the documentation of the function scipy.linalg.lstsqdocs.scipy.org/doc/scipy-0.15.1/reference/generated/… the estimated coefficients should be stored in your variable
Csoprint Cseems a reasonable thing to do :)etna– etna2015-05-14 11:41:31 +00:00CommentedMay 14, 2015 at 11:41 - @etna wow! that did the work... But can I print the equation on canvas with the corresponding coefficients ?diffracteD– diffracteD2015-05-14 11:47:12 +00:00CommentedMay 14, 2015 at 11:47
- 1The same as in A so here constant first etc. A way to print your equation is this:
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])(But make sure I ordered the coeffs right). Another way: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).etna– etna2015-05-14 11:58:39 +00:00CommentedMay 14, 2015 at 11:58
1 Answer1
According to the documentation of the function scipy.linalg.lstsqhttp://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.linalg.lstsq.html the estimated coefficients should be stored in your variable C (the order corresponding to columns in A).
To print your equation with estimated coefficients showing 2 digits after decimal point:
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])or:
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)By the way, librariespandas andstatsmodels can be very helpful for this kind of task (e.g. checkRun an OLS regression with Pandas Data Frame )
3 Comments
Explore related questions
See similar questions with these tags.
