在scipy.optimize中分配fmin的输出
我有一个只涉及一个变量的函数,我想找到这个函数的最小值,以及这个最小值对应的变量值。目前我通过以下的Python脚本来实现这个目标:
import numpy as np
from scipy.optimize import fmin
import math
x1=0.
y1=800.
x2=1100.
y2=-800.
v1=2000.
v2=4000.
def T(xi):
time=sqrt((x1-xi)**2+y1**2)/v1+sqrt((x2-xi)**2+y2**2)/v2
return time
fmin(T,0)
运行这个脚本后,得到的结果是:
import numpy as np
from scipy.optimize import fmin
import math
x1=0.
y1=800.
x2=1100.
y2=-800.
v1=2000.
v2=4000.
def T(xi):
time=sqrt((x1-xi)**2+y1**2)/v1+sqrt((x2-xi)**2+y2**2)/v2
return time
fmin(T,0)
Optimization terminated successfully.
Current function value: 0.710042
Iterations: 41
Function evaluations: 82
Out[24]: array([ 301.9498125])
所以这个函数的最小值大约是0.71,出现在变量值大约是302的时候。不过,我想把这些值分别赋给两个变量:
(Tmin,xmin)=fmin(T,0)
Optimization terminated successfully.
Current function value: 0.710042
Iterations: 41
Function evaluations: 82
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
C:\Users\Kurt.Peek\<ipython-input-25-aec613726d59> in <module>()
----> 1 (Tmin,xmin)=fmin(T,0)
ValueError: need more than 1 value to unpack
但是我遇到了一个错误,提示“ValueError: need more than 1 value to unpack”。有没有人知道怎么解决这个错误,并把这两个输出值赋给变量呢?
2 个回答
0
下面的代码实现了相同的功能:在脚本的最后我添加了
xmin=fmin(T,0)
Tmin=T(xmin)
这样可以得到想要的结果:
xmin
Out[30]: array([ 301.9498125])
T(xmin)
Out[31]: array([ 0.71004172])
所以我没有为fmin指定多个输出,而是只给了一个参数,然后再次使用这个函数来得到最小值。
6
xopt, fopt, iter, funcalls, warnflag = fmin(T,0, full_output=True, disp=False)
print(xopt, fopt)
# (array([ 301.9498125]), 0.71004171552448025)