当我对scipy.minimize应用approx_fprime时,它不会迭代

eoxn13cs  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(136)

我试着在scipy包中使用minimize函数,如下面的代码所示。当我使用jac option = approx_fprime时,迭代次数为0,优化不起作用。但是当我使用jac option = rosen_der时,它起作用了!
第一个问题
我检查了approx_fprime是ndarray,相同的罗森_der,并且值也是相同的。为什么优化不起作用??

6ioyuze2

6ioyuze21#

您的函数fprimex的函数,但近似于x0处的导数。因此,在每次迭代中,您都在计算初始猜测值x0处的梯度。您应该计算/近似于x处的导数:

fprime = lambda x : approx_fprime(x, rosen, eps)

请注意,approx_fprime已经返回了一个np.ndarray,因此不需要额外的np.array调用。
另外值得一提的是,如果不传递任何导数,也就是jac=None,那么你就不需要传递近似导数,因为minimize默认情况下会通过有限差分来近似它们。但是,minimize使用的是approx_derivative,而不是approx_fprime,因为它支持在变量边界上计算导数。

相关问题