我试图在Python中使用BFGS方法最小化以下函数。
在这里,我的函数f
描述了三个已知点的欧几里德距离(我们知道这三个点的坐标)和一个变量点cp1
其中{{1 }是变量点的坐标。
这是我想要最小化的功能。
cp1 = (x1,y1)
函数x1, y1 = sympy.symbols("x_1, y_1")
f = sqrt(((pos[leaves[0]][0] - cp1[0])**2) + (pos[leaves[0]][1] - cp1[1])**2) + sqrt(((pos[leaves[1]][0] - cp1[0])**2) + (pos[leaves[1]][1] - cp1[1])**2)+ sqrt(((pos[leaves[2]][0] - cp1[0])**2) + (pos[leaves[2]][1] - cp1[1])**2)
如下;
f
然后,我试图得到f= sqrt((-x1 + 246)**2 + (-y1 + 4579)**2) + sqrt((-x1 + 286)**2 + (-y1 + 1354)**2) + sqrt((-x1 + 3466)**2 + (-y1 + 345)**2)
的一阶导数,因为BFGS方法需要它来进行计算。
f
但是,这并没有给我正确的结果。相反,它返回 # First partial derivative with respect to x1 and y1
fpx = [f.diff(x_) for x_ in (x1, y1)]
print('xder', fpx)
作为导数的结果。有人可以帮我纠正我的代码中的错误吗?