这取自 Python 编程的问题论文。我有以下代码:
import numpy as np
from math import sin, pi
#Part a:
def f(x):
return 2*x - x**2
def g(p,x):
return p*sin(pi*x/2)
def hsum(p):
s = 0
for i,j in zip(np.arange(0,3,2E-4),np.arange(2E-4,3,2E-4)):
delx = j - i
ab = abs(f(i)-g(p,i))
s += ab*delx
return s
#print hsum(1)
#print hsum(0)
#Part b:
h = hsum(0)
P = []
Q = []
for p in np.arange(0,1.1,1E-3):
k = hsum(p)
if k<h:
h = k
P.append(hsum(p))
Q.append(p)
print h
print min(P)
g = min(P)
t = P.index(g)
#print t
#print Q
print Q[t]
但是,在运行它时,程序返回所谓的最优 P 的值 0.001。根据问题陈述,这个值应该接近 1 并且在 1.1 之前。
我认为浮点数可能有问题,但我尝试的任何组合都会给我相同的答案。有什么建议么?
编辑:使用提供的所有建议,我编辑了原始代码,这个代码虽然相当慢(运行时间为 9:58 !!),但提供了 1.071 的正确答案。感谢所有帮助。:D