2013-09-09 7 views
2

Есть ли способ дискретизации производной неизвестной функции в sympy? Я пытаюсь добиться:Производные дискретизации с помощью Sympy

from sympy import * 

>>> f = Function('f') 
>>> x = Symbol('x') 

>>> dfdx = Derivative(f(x),x).somemethod() 
>>> print dfdx 
    (f(x+1) - f(x-1))/2 
>>> eq = lambdify((f,x),dfdx) 
>>> w = np.array([1,5,7,9]) 
>>> print eq(w,1) 
    -3 
+1

Существует не метод уже реализован, но было бы довольно просто сделать это самостоятельно. Вероятно, вам нужно знать о 'subs' и ничего больше. Если вы создадите такой метод, команде sympy может быть интересно получить запрос на получение от вас на github. – Krastanov

+0

Согласен с Крастановым. Общая версия с производными более высокого порядка достаточно сложна, что было бы полезно иметь это в самой библиотеке. – asmeurer

+0

Спасибо за информацию! Я займусь этим. Я симпатичный новичок, поэтому я думаю, что это не будет тривиально реализовать. – memecs

ответ

5

После прочтения этого вопроса я реализовал эту функциональность в SymPy и в настоящее время доступен в:

мой филиал: https://github.com/bjodah/sympy/tree/finite_difference

SymPy мастер (https://github.com/sympy/sympy), и будет в экранном 0.7.6

Вот пример:

>>> from sympy import symbols, Function, as_finite_diff 
>>> x, h = symbols('x h') 
>>> f = Function('f') 
>>> print(as_finite_diff(f(x).diff(x), h)) 
-f(-h/2 + x)/h + f(h/2 + x)/h 
+0

Прохладный. Я попробую! – memecs