在scipy.optimize中分配fmin的输出

时间:2014-04-26 13:45:41

标签: python scipy mathematical-optimization

我有一个单一变量的函数,我希望找到最小值,以及获得最小值的变量值。目前,我通过以下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

所以我得到一个错误&#34; ValueError:需要多于1个值才能解包&#34;。有人知道如何防止这个错误并分配这两个输出吗?

2 个答案:

答案 0 :(得分:5)

fmin has a full_output=True parameter

xopt, fopt, iter, funcalls, warnflag = fmin(T,0, full_output=True, disp=False)
print(xopt, fopt)
# (array([ 301.9498125]), 0.71004171552448025)

答案 1 :(得分:0)

以下内容完成相同的事情:在脚本的末尾我添加了

xmin=fmin(T,0)
Tmin=T(xmin)

这产生了所需的输出:

xmin
Out[30]: array([ 301.9498125])

T(xmin)
Out[31]: array([ 0.71004172])

因此,我没有为fmin指定几个输出,而是只得到了参数并再次使用该函数来获得最小值。