在sympy中定义一个“派生”函数

时间:2019-10-18 23:13:45

标签: python-3.x sympy

我正在尝试在sympy中创建一个derivation函数(我正在使用sympy 1.4版),但是我不确定如何做。特别是,我正在尝试定义一个具有以下属性的通用函数(该函数只能使用sympy变量,暂时不包含函数):

d(f+g)=d(f)+d(g)
d(f*g)=f*d(g)+d(f)*g

我尝试阅读有关定义函数的符号documentation,但不确定如何定义具有以上两个任意符号属性的Function类。

对于某些背景/背景,我知道如何在Mathematica中进行推导;我只想输入

d[f_+g_]:=d[f]+d[g]
d[f_ g_]:=f d[g] + d[f] g

1 个答案:

答案 0 :(得分:3)

您可以编写自己的规则。以下内容可能会帮助您入门:

def d(e, func):
  """
  >>> from sympy import x, y
  >>> from sympy import Function
  >>> D = Function('D')
  >>> d(x + y, D)
  D(x) + D(y)
  """
  if e.is_Add:
    return Add(*[d(a, func) for a in e.args])
  elif e.is_Mul:
    return Add(*[Mul(*(e.args[:i]+(d(e.args[i],func),)+e.args[i+1:]))
        for i in range(len(e.args))])
  else:
    return func(e)

或者您可以在课程中尝试以下方法:

class d(Function):
  @classmethod
  def eval(cls, e):
    if e.is_Add:
        return Add(*[d(a) for a in e.args])
    elif e.is_Mul:
        return Add(*[Mul(*(e.args[:i]+(d(e.args[i]),)+e.args[i+1:]))
           for i in range(len(e.args))])
    else:
        return d(e, evaluate=False)

另请参见linapp