2017-05-26 90 views
0
def differentiate(fn,lvl,value): 
    d=0.0000001 
    if lvl==0: 
     return fn(value) 
    else: 
     return (differentiate(fn,lvl-1,value+d)-differentiate(fn,lvl-1,value))/d 
def i(x): 
    return 1 + x + x**2 + x**3 + x**4 +x**5+x**6 

我试图找到我(LVL)(0),其中拉特是的时候,我是有区别的数量。我不知道为什么我的代码给不同的d完全不同的输出。将appretiate任何帮助:)如何找到一个函数的n个差值的价值?

例如,

for x in range(7): 
    print(differentiate(i,x,0)) 

我期望能获得:1,1,2,6,24,120,720。 但是,根据d的值我得到了不同的值。

+0

欢迎光临,请提供一个[最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)和重点[问一个很好的问题(http://stackoverflow.com/帮助/如何问),以增加回答问题的可能性。目前,它不清楚,不可重现。 – Nuageux

+0

你可能运行到[灾难性的取消(https://en.wikipedia.org/wiki/Loss_of_significance)。 –

+0

你可以通过分析而不是数字来解决吗? – fafl

回答

2

的问题是容易理解的。

您正在评估值,如f(0 + d),即

1 + 0.0000001 + 0.0000001² + 0.0000001³ + 0.0000001^4 + 5 0.0000001^5 = 
1.00000010000001000000100000010000005 

当双精度浮点值可以代表约15显著数字。高阶的

数值衍生物是相当具有挑战性。

相关问题