4

我有这段代码来计算函数在给定点的一阶和二阶导数

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 等导数编写类似的函数,但是我想知道是否可以将其编写为将导数级别指定为参数的单个函数。

4

2 回答 2

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 给出二阶导数,依此类推。

于 2013-05-01T16:09:45.400 回答
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)
于 2013-05-01T16:19:56.623 回答