определить функцию «деривации» в - PullRequest
3 голосов
/ 19 октября 2019

Я пытаюсь сделать деривацию Функция в sympy (я использую sympy версии 1.4), но я не уверен, как. В частности, я пытаюсь определить общую функцию (которая на данный момент может принимать только переменные sympy, а не функции), которая имеет следующие свойства:

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

Я попытался прочитать документацию sympy при определении функций, но я не уверен, как определить класс Function, который имеет вышеуказанные свойства для любых двух символов.

Для некоторого фона / контекста я знаю, как производить деривации в Mathematica;Я бы просто набрал

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

1 Ответ

3 голосов
/ 19 октября 2019

Вы можете написать собственное правило. Следующее может начать:

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...