Нужно путем дифференцирования, с использованием sympy, получить функцию, а затем эту функцию использовать в расчетах. Причем параметрами функции будут выступать numpy матрицы в общем случае. Возникает проблема при использовании sympy функций (в примере ниже с логарифмом log, причем в этом примере log даже не попадает результат диференцирования). Что можно сделать, чтобы dFx принимала numpy - матрицы или вектора?
$ cat simplytest.py
#!/usr/bin/python
import numpy
import sympy
x,y=sympy.symbols('x y')
F=x**2+sympy.log(y*x)
dFx=sympy.diff(F,x)
sympy.pprint(dFx)
funct_dFx=sympy.lambdify((x,y),F)
print funct_dFx(1,1)
def diffFx(x):
return funct_dFx(x[0].reshape(-1,1),x[1].reshape(1,-1))
o=numpy.linspace(0,numpy.pi,4)
vect_x=numpy.array([numpy.cos(o),numpy.sin(o)])
print diffFx(vect_x)
$ ./simplytest.py
1
2⋅x + ─
x
1.0
Traceback (most recent call last):
File "./simplytest.py", line 16, in <module>
print diffFx(vect_x)
File "./simplytest.py", line 12, in diffFx
return funct_dFx(x[0].reshape(-1,1),x[1].reshape(1,-1))
File "<string>", line 1, in <lambda>
TypeError: only length-1 arrays can be converted to Python scalars
P.S. если удалить log, то все ok - пробовал разные выражения, но без мат. функций (типа F=x**2+y/x). но мне нужно log и другие функции.