我有这段代码来计算给定点的函数的一阶和二阶导数
def yy(x):
return 1.0*x*x
def d1(func, x ,e):
x = x
y = func(x)
x1 = x + e
y1 = func(x1)
return 1.0*(y - y1)/(x - x1)
def d2(func ,x, e):
x = x
y = d1(func, x, e)
x1 = x + e
y1 = d1(func, x1, e)
return 1.0*(y - y1)/(x - x1)
yy是实际的功能。 d1和d2用于计算第一和第二导数。他们是我对优化感兴趣的人。正如您所看到的,它们都具有几乎相同的代码。我基本上可以继续为第3,第4等衍生函数编写函数,但是我想知道是否可以将它作为单个函数编写,将衍生级别指定为参数。
答案 0 :(得分:4)
def deriv(func, order, x, e):
if order < 0: raise ValueError
if order == 0: return func(x)
y = deriv(func, order-1, x, e)
x1 = x + e
y1 = deriv(func, order-1, x1, e)
return float(y - y1)/(x - x1)
order = 1给出一阶导数,order = 2给出第二个,依此类推。
答案 1 :(得分:1)
试试这个,其中lvl是派生级别。
def d(func, x ,e, lvl):
x1 = x + e
if lvl == 1:
x = x
y = func(x)
y1 = func(x1)
return 1.0*(y - y1)/(x - x1)
else:
return 1.0*(d(func, x, e, lvl-1) - d(func, x1, e, lvl-1) )/(x-x1)