使用Python函数并生成所有衍生物

Hes*_*sam 2 python lambda sympy scipy python-2.7

我有一个可变数量的参数的python函数:

F(x1, x2, ... , xN)
Run Code Online (Sandbox Code Playgroud)

我想自动生成N个函数,这些函数表示关于每个参数的F的导数.

F'_1 = dF/dx1
F'_2 = dF/dx2
...
F'_N = dF/dxN
Run Code Online (Sandbox Code Playgroud)

例如,我能够同时给出F(x1)= sin(x1)和F(x1,x2)= sin(x1)*cos(x2)并自动获得所有导数.


Edit2:如果函数F是2变量(固定数量的参数),我可以使用

   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))
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 5

诀窍是使用inspect.getargspec获取函数的所有参数的名称.之后,这是一个简单的列表理解:

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]
Run Code Online (Sandbox Code Playgroud)

例如:

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

all_derivatives = get_derivatives(f)
Run Code Online (Sandbox Code Playgroud)

  • 如果OP可以使用表达式而不是函数,事情变得更加简单:`{v:expr.diff(v)for v in expr.free_symbols}`. (3认同)
  • @Hesam:OP ==原创海报==问问==你:) (2认同)