我已经看过了minimize函数的声明文件,我真的很困惑函数是如何工作的。例如,如果我有这样的东西:
import numpy as np
from scipy.integrate import quad
from scipy.optimize import minimize
encoderdistance = 2.53141952655
Dx = lambda t: -3.05 * np.sin(t)
Dy = lambda t: 2.23 * np.cos(t)
def func(x): return np.sqrt(Dx(x)**2 + Dy(x)**2)
print minimize(lambda x: abs(quad(func, 0, x)[0] - encoderdistance), 1).x
print minimize(lambda x: abs(4.24561823393 - encoderdistance), 1).x
底部的第二个print语句将产生与顶部不同的结果,即使我将quad函数细分为它所产生的值。如果这是由于lambda x部分造成的,你能解释一下这对代码行的影响吗?另外,如何将倒数第二行输入到像wolfram alpha这样的计算器中?谢谢!在
优化器需要一个函数来最小化
lambda x:
的作用。在在倒数第二行中,要求优化器找到一个x值,这样func(x)从0到x的积分接近于encoderdistance。在
在最后一行中,在最后一行中要最小化的函数只是一个标量值,与x没有依赖关系,优化器正在退出,因为它无法更改该值。在
描述了
scipy.minimize
的工作原理here,但这不是你的问题。有两个lambda函数绝对不同:第一个是V形函数,第二个是水平线。
scipy
在大约1.02处找到“V”的最小值,并且无法在水平线上执行任何最小化操作,因此它返回您的初始猜测:1。在下面是如何在Mathematica中做到这一点:
关于你的第一个问题,在发言中:
^{pr2}$lambda函数是一个常数,独立于参数
x
。minimize
在观察到函数在参数的几个变化后没有减少后立即退出。在相关问题 更多 >
编程相关推荐