在 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 因为我们不知道它是哪个整数。
如何定义一系列函数 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 因为我们不知道它是哪个整数。