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

Define functions recursively with derivative in 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 returns None(即它到达函数的底部而不返回),该函数将保持未计算状态。

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