找到3D表面B-Splice Python scipy bisplrep的最大值点。可以使用sproot吗?

时间:2017-11-20 06:38:45

标签: python scipy interpolation bspline

我想找到使用bisplrep制作的3D表面B样条曲线的所有局部最大值的x,y坐标。

splder和sproot与splrep一起用于查找单个变量B样条曲线。 bisplrep maxima和minima是如何找到的?

我的代码如下。

tck = interpolate.bisplrep(X, Y, sensor_counts, s=0)
xnew, ynew = np.mgrid[ min(grid_x):max(grid_x):100j, min(grid_y):max(grid_y):100j]
znew = interpolate.bisplev(xnew[:,0], ynew[0,:], tck, dx=0, dy=1)
print xnew
print ynew
fig = plt.figure()
ax = fig.gca(projection='3d')
print tck
surf = ax.plot_surface(xnew, ynew, znew, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
cset = ax.contour(xnew, ynew, znew, zdir='z', offset=5100, cmap=cm.coolwarm)

1 个答案:

答案 0 :(得分:0)

我们可以使用python的scipy.optimize库。

我以下列方式使用了scipy.optimize.fmin_tnc。

def neg_bspline( x ):
global tck
f = -interpolate.bisplev( x[0], x[1], tck, dx=0, dy=0)
g = [-interpolate.bisplev( x[0], x[1], tck, dx=1, dy=0 ), -interpolate.bisplev( x[0], x[1], tck, dx=0, dy=1)]
return f, g

for i in sensor_array:
    x0 = i.get_coordinate()
    print x0
    bounds = [(0,200) , (0,200)]
    x0 = fmin_tnc(neg_bspline, x0=x0, bounds=bounds)
    print x0
    solutions.append( x0[0] )
result_plot( solutions )