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

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

我想自动生成N个函数,表示F相对于每个参数的导数。
F'_1 = dF/dx1
F'_2 = dF/dx2
...
F'_N = dF/dxN

例如,我可以同时给出
F(x1)=sin(x1)

F(x1,x2)=sin(x1)*cos(x2)
自动得到所有的导数。
编辑2:
如果函数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))

最佳答案

诀窍是使用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]

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

all_derivatives = get_derivatives(f)

关于python - 使用Python函数并生成所有派生词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14178101/

10-11 20:37
查看更多