【问题标题】:Function for calculating an optimal fit计算最佳拟合的函数
【发布时间】:2013-08-11 09:48:41
【问题描述】:

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

【问题讨论】:

  • 如果您不使用任何矢量化操作,NumPy 不会帮助您。你使用它的只是arange,如果你只是要迭代这个范围,那不会比xrange有任何优势。

标签: python function optimization integral


【解决方案1】:

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

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

【讨论】:

  • 啊我现在明白这个问题了。但是,我究竟如何存储 (p, hsum(p)) 元组,然后要求代码返回与最小 hsum(p) 对应的 p?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多