3

可変数の引数を持つpython関数があります:

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

各引数に関して F の導関数を表す N 個の関数を自動的に生成したいと考えています。

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

たとえば、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))
4

1 に答える 1

6

トリックは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)
于 2013-01-06T01:19:54.740 に答える