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 循环时,它只能打印一次,程序会如您所愿地运行。
我的代码真的很简单:
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 循环时,它只能打印一次,程序会如您所愿地运行。