1

带积分的问题被编程到函数中

这取自 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

4

1 回答 1

0

在中,您在每次循环迭代中hsum重置s为。0您可能应该将其移到循环之外。

在查找最佳拟合的代码中,您将 p 值附加到 P,但您不保留任何有关拟合质量的信息。min(P)找到最低的 p,而不是最适合的 p。存储(p, hsum(p))元组并通过 H(p) 值找到最小值。min 函数接受一个key可以帮助你的参数。(稍微简化一下,您甚至不需要创建元组。)

于 2013-08-11T09:54:08.227 回答