用于计算最佳拟合的函数

时间:2013-08-11 09:48:41

标签: python function optimization integral

Question with integral to be programmed into the function

这是从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

1 个答案:

答案 0 :(得分:0)

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

在您的代码中找到最合适的,您将p值附加到P,但是您没有保留有关拟合质量的任何信息。 min(P)找到最低的p,而不是最合适的p。存储(p, hsum(p))元组,并通过H(p)值找到最小值。 min函数采用key参数来帮助您。 (通过一些简化,你甚至不需要制作元组。)