Take Python Function and Generate All Derivatives

2019-04-12 17:04发布

I have a python function with variable number of arguments:

F(x1, x2, ... , xN)

I want to automatically generate N functions representing the derivatives of F with respect to each argument.

F'_1 = dF/dx1
F'_2 = dF/dx2
...
F'_N = dF/dxN

For example, I be able to give both F(x1) = sin(x1) and F(x1, x2) = sin(x1) * cos(x2) and get all the derivatives automatically.


Edit2: If function F was 2 variable (fixed number of arguments), I could use

   def f(x,y):
      return  sin(x)*cos(y)

   from sympy import *
   x, y = symbols('x y')
   f_1 = lambdify((x,y), f(x,y).diff(x))

1条回答
一夜七次
2楼-- · 2019-04-12 17:26

The trick is to use inspect.getargspec to get the names of all the arguments to the function. After that, it's a simple list comprehension:

import inspect
from sympy import *

def get_derivatives(func):
    arg_symbols = symbols(inspect.getargspec(func).args)
    sym_func = func(*arg_symbols)

    return [lambdify(arg_symbols, sym_func.diff(a)) for a in arg_symbols]

For example:

def f(x, y):
    return sin(x)*cos(y)

all_derivatives = get_derivatives(f)
查看更多
登录 后发表回答