Ask Your Question

Correct input for list_plot3d(..., interpolation='spline')

asked 2018-04-15 20:05:24 +0200

amdall gravatar image

updated 2018-04-16 17:36:40 +0200

I'm trying to construct smooth surfaces from lists of points in 3-space using list_plot3d and the spline option, but without success. For example, the input

list_plot3d ([(-1, 2, 3), (2, -1, 3), (3, -1, 2), (-1 ,3 ,2), (2, 3, -1), (3, 2, -1)], interpolation_type='spline')

returns the error

TypeError: m >= (kx+1)(ky+1) must hold

The following returns the expected piecewise linear surface suggesting that there is a special restriction on the input when using the spline option.

list_plot3d ([(-1, 2, 3), (2, -1, 3), (3, -1, 2), (-1 ,3 ,2), (2, 3, -1), (3, 2, -1)])

Question: What is the correct input to obtain a best fit polynomial surface going through the six points in $\mathbb{R}^3$?

Edit: As pointed out by @slelievre, since these six points lie in a common plane, the corresponding surface should be the plane containing the points. So why does Sage throw an error instead of this plane?

edit retag flag offensive close merge delete


Maybe interpolation type 'spline' wants the x and y coordinates of the points to form a nice grid, and here, because we have six points not forming such a grid, it is not happy?

slelievre gravatar imageslelievre ( 2018-04-16 14:38:29 +0200 )edit

Here's an example (if I understand correctly) of some points having 'nice' x and y coordinates: pts=[(0,0,1),(1,0,2),(0,1,2),(1,1,5)]. Using pts instead of the six points given in the post yields the same TypeError. Can you get a smooth surface from any point set? A single functioning example would be of great help. But I guess I'm off to read the source code: /scipy/interpolate//_fitpack_impl.pyc

amdall gravatar imageamdall ( 2018-04-16 17:49:14 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2018-04-16 08:39:34 +0200

slelievre gravatar image

The six points listed in the question are in the same plane.

One can check that by doing a list_plot, or a point3d, or by constructing the polyhedron with vertices the points in the list.

Here are the corresponding commands.

$ sage
SageMath version 8.2.rc1, Release Date: 2018-03-31
sage: p = [(-1, 2, 3), (2, -1, 3), (3, -1, 2), (-1 ,3 ,2), (2, 3, -1), (3, 2, -1)]
sage: list_plot(p)
Launched jmol viewer for Graphics3d Object
sage: point3d(p)
Launched jmol viewer for Graphics3d Object
sage: po = Polyhedron(p)
sage: po
A 2-dimensional polyhedron in ZZ^3 defined as the convex hull of 6 vertices
Launched jmol viewer for Graphics3d Object
edit flag offensive delete link more


Thanks for the answer, but I don't get it yet. Shouldn't the spline approximation through six points in a plane be the plane itself? Also, the same TypeError is thrown if I nudge one of the points off of the plane (e.g. the last point is changed to (3,2,0)), so planarity doesn't seem to be the root cause of the error.

amdall gravatar imageamdall ( 2018-04-16 14:05:11 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2018-04-15 20:05:24 +0200

Seen: 388 times

Last updated: Apr 16 '18