Python:通过循环最小化函数

时间:2016-12-19 21:28:59

标签: python python-3.x numpy minimize

我的代码很简单:

import numpy

def f(x):
    return x**2 +1 

f_min=10

for x in numpy.arange(-1,10,0.1):
    if f(x)<f_min :
        f_min=f(x)
        x_min=x
    else:
        print (x_min)

它给了我正确的结果(x - > 0)但不仅一次而且很多次。为什么会这样,我怎么能阻止它呢?

2 个答案:

答案 0 :(得分:1)

因为你说过了。 : - )

你的if语句是:

if I have a new minimum, record the value and position;
otherwise, print the existing minimum.

如果没有找到新的最小值,则打印。由于此函数在您的范围内具有最小值,因此您可以获得大量输出。

如果您希望仅打印一次全局最小值,则只执行一次:将其移出循环外。

for x in numpy.arange(-1,10,0.1):
    if f(x)<f_min :
        f_min=f(x)
        x_min=x

print (x_min)

答案 1 :(得分:1)

要解决此问题,请将print语句移出for循环:

import numpy

def f(x):
    return x**2 +1 

f_min=10

for x in numpy.arange(-1,10,0.1):
    if f(x)<f_min :
        f_min=f(x)
        x_min=x

print (x_min)

为什么这样?好吧,之前,当你在for循环中有print语句时,每次for循环都经过,每当if语句不为true时,它就会打印出来,所以你得到了一堆打印的东西。现在,当你将它移出for循环时,它只能打印一次,程序按预期工作。