在n阶导数的定义中,“h”的值应该是多少?

2024-09-27 07:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图编写一个程序来计算任何函数的n阶导数,该函数将由用户使用Python2.7作为输入。我使用了n阶导数的定义(形式上是分数阶微积分的Grunwald-Letnikov导数,但在我的程序中n是一个自然数)不同的(小)h值,有时输出与实际结果相差甚远。 有时h的一个值对某个函数有效,而对另一个函数无效,h的一个值可以用到五阶导数,得到或多或少的精确结果,突然从六阶导数得到的结果是非常错误的。我可以用什么样的h的一般形式来得到所有阶导数的所有函数的或多或少的正确答案?我知道像scipy,numpy,sympy在一行中给出n阶导数,但我实际上是想尽量减少对模块函数的使用,以收集对逻辑的更多见解,因此最好是在不使用包或其他模块的情况下修改代码

我所采用的h的形式仅仅是一个猜测,顺便说一下,它适用于大多数多项式函数(所有阶数)和三角函数(至少2阶或3阶数)。 我写的代码如下:

def Combination(n,r):
    return math.factorial(n)/float((math.factorial(n-r)*math.factorial(r)))
f=raw_input("enter the function:")
n=input("enter the order of derivative:")
h=10**(-(n+1))
a=input("enter the point at which the derivative is to be evaluated:")
sum=0
for i in range(0,n+1):
    x=a+(n-i)*h
    sum=sum+(((((-1)**i)*Combination(n,i))*eval(f)))/float(h**n)
print sum

正弦和余弦的五阶和高阶导数,exp的四阶和高阶导数不起作用,但对于多项式函数,几乎所有阶导数都起作用


Tags: 模块the函数代码程序inputmathfloat

热门问题