2017-11-20 11 views
0

bisplrep을 사용하여 만들어진 3D 표면 B-Spline의 모든 로컬 최대 값의 x, y 좌표를 찾고 싶습니다.3D 표면 B-Splice Python scipy bisplrep의 최대 점을 찾습니다. sproot를 사용할 수 있습니까?

splder와 splroot를 사용하여 단일 변이 B 스플라인을 찾습니다. bisplrep 최대 및 최소값은 어떻게 발견됩니까?

내 코드는 아래와 같습니다.

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

파이썬의 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)