scipy.optimize'linesearch的正方向导数'的含义是什么意思?
例如在fmin_slsqp中 http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_slsqp.html
我试图了解"狗腿"方法在Python scipy.optimize.minimize函数中的工作原理.我正在调整帮助页面底部的示例.
根据笔记,狗腿洞方法需要Jacobian和Hessian参数.为此,我使用numdifftools包:
import numpy as np
from scipy.optimize import minimize
from numdifftools import Jacobian, Hessian
def fun(x,a):
return (x[0] - 1)**2 + (x[1] - a)**2
x0 = np.array([2,0]) # initial guess
a = 2.5
res = minimize(fun, x0, args=(a), method='dogleg',
jac=Jacobian(fun)([2,0]), hess=Hessian(fun)([2,0]))
print(res)
Run Code Online (Sandbox Code Playgroud)
编辑:
如果我按照以下帖子的建议进行更改,
res = minimize(fun, x0, args=a, method='dogleg',
jac=Jacobian(lambda x: fun(x,a)),
hess=Hessian(lambda x: fun(x,a)))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误TypeError: <lambda>() takes 1 positional argument but 2 were given.我究竟做错了什么?
在初始猜测中计算雅可比行列式和Hessian也是正确的x0吗?
我正在尝试编写一个代码,对于给定的圆列表(list1),它能够找到新圆(list2)的位置。list1 和 list2 具有相同的长度,因为对于 list1 中的每个圆,都必须有一个来自 list2 的圆。
list1 是固定的,所以现在我必须从 list2 中找到圆圈的正确位置。
我编写了这个简单的函数来识别两个圆是否重叠:
def overlap(x1, y1, x2, y2, r1, r2):
distSq = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)
radSumSq = (r1 + r2) * (r1 + r2)
if (distSq >= radSumSq):
return False # no overlap
else:
return True #overlap
Run Code Online (Sandbox Code Playgroud)
这是列表1:
和:
x=[14.11450195 14.14184093 14.15435028 14.16206741 14.16951752 14.17171097
14.18569565 …Run Code Online (Sandbox Code Playgroud)