我想找到使用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)
答案 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 )