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

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 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?

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

Sort by » oldest newest most voted

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
sage: po.show()
Launched jmol viewer for Graphics3d Object

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.