在Python中使用衍生物递归地定义函数

时间:2015-02-07 20:24:36

标签: python-2.7 scipy sympy

如何定义一系列函数h_k:k = 1,2,3,... 通过使用两个已知函数f = f(x)和g = g(x)如下:

H_1 = F / G, h_ {k + 1} = diff(h_k,x)/ g,对于k = 1,2,3,.....

请注意,新函数有两个条目h(k,x)= h_k(x)。 我想在Sympy做这件事。

1 个答案:

答案 0 :(得分:1)

如果k始终是显式整数,只需使用Python函数:

def h(x, k):
    if k == 1:
        return f(x)/g(x)
    return diff(h(x, k - 1), x)/g(x)

如果您想允许符号k(如k = Symbol('k')),则子类sympy.Function

class h(Function):
    @classmethod
    def eval(cls, x, k):
        if k.is_Integer and k.is_positive:
            if k == 1:
                return f(x)/g(x)
            else:
                return diff(h(x, k - 1), x)/g(x)

(请注意,如果eval返回None(即,它返回函数的底部而不返回),则该函数将保持未评估状态。

请注意,我们使用大写k.is_Integer I)检查k.is_integer。这意味着k是一个显式整数,如1,2,3,.... k.is_integer也适用于Symbol('k', integer=True),但我们并不想评估在这种情况下,因为我们不知道它是哪个整数。