これは、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