Python: 通过循环最小化函数

Python: Minimizing function via loop

我的代码真的很简单:

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) 但不止一次而是很多次。为什么会这样,我怎样才能避免这样做?

因为你告诉它了。 :-)

您的 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)

要解决此问题,请将 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 语句不为真,它就会打印,所以你得到了一堆打印的东西。现在,当您将它移出 for 循环时,它只能打印一次,程序会如您所愿地运行。