Toma la función de Python y genera todos los derivados

Tengo una función python con número variable de argumentos:

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

Quiero generar automáticamente N funciones que representan las derivadas de F con respecto a cada argumento.

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

Por ejemplo, puedo dar tanto F (x1) = sin (x1) como F (x1, x2) = sin (x1) * cos (x2) y obtener todas las derivadas automáticamente.


Edit2: Si la función F fuera 2 variables (número fijo de argumentos), podría usar

  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)) 

El truco es usar inspect.getargspec para obtener los nombres de todos los argumentos de la función. Después de eso, es una simple lista de comprensión:

 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] 

Por ejemplo:

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