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
我试图找到I(lvl)(0),其中lvl是区分我的次数我不知道为什么我的代码为不同的D提供了完全不同的输出。将通知任何帮助:)
例如,
for x in range(7):
print(differentiate(i,x,0))
我希望得到:1,1,2,6,24120720。
但是,根据d的值,我得到了不同的值。
最佳答案
这个问题很容易理解。
您正在评估值,例如f(0 + d)
,即。
1 + 0.0000001 + 0.0000001² + 0.0000001³ + 0.0000001^4 + 5 0.0000001^5 =
1.00000010000001000000100000010000005
当双精度浮点数能够表示大约15个有效数字时。
高阶的数值导数是很有挑战性的。