用Python中的导数递归定义函数



如何定义一系列函数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做这件事。

如果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(即,它击中函数底部而不返回),则函数将保持未求值状态。

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

最新更新