获取Python函数并生成所有派生函数

获取Python函数并生成所有派生函数,python,lambda,python-2.7,scipy,sympy,Python,Lambda,Python 2.7,Scipy,Sympy,我有一个参数数量可变的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

我有一个参数数量可变的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)

需要说明的是,该函数类似于
def(x):返回math.sin(x)
?(也就是说,它不是sin(x)的符号表示,而是一个实际的Python函数?)如果F(x)可能是非符号的,那就更好了。(即使用lambdify获得符号表达式)。您是否已经有了一种方法来生成一个带一个参数的函数的数值导数?我需要符号导数函数。i、 e.对于sin(x),我希望cos(x)不是点的数值导数。答案发布-假设你想要每个函数的
lambidy
版本。如果你拿出
lambdify
部分,你会看到结果是
[cos(x)*cos(y),-sin(x)*sin(y)]
。如果OP可以使用表达式而不是函数,事情会变得简单得多:
{v:expr.diff(v)for v in expr.free_symbols}
。非常感谢!如何调用生成的导数。i、 e.F_1(0,0)或F_2(0,0)
F1
all_导数[0]
F2
all_导数[1]
,所以你可以像
all_导数[0](0,0)
@Hesam:OP==Original Poster==asker==you:)那样调用它,如果你坚持使用函数,只需传递符号伪参数就可以得到一个符号对象。