我正在试验同情,我遇到了一个我无法解决的问题.
使用scipy我可以编写一个表达式并为其计算x值的数组,如下所示:
import scipy
xvals = scipy.arange(-100,100,0.1)
f = lambda x: x**2
f(xvals)
Run Code Online (Sandbox Code Playgroud)
使用sympy我可以写相同的表达式如下:
import sympy
x = sympy.symbols('x')
g = x**2
Run Code Online (Sandbox Code Playgroud)
我可以通过执行以下操作来评估此表达式的单个值:
g.evalf(subs={x:10})
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚如何评估x值的数组,就像我用scipy做的那样.我该怎么做?
我必须像这样挑选一个对象数组:
import cPickle as pickle
from numpy import sin, cos, array
tmp = lambda x: sin(x)+cos(x)
test = array([[tmp,tmp],[tmp,tmp]],dtype=object)
pickle.dump( test, open('test.lambda','w') )
Run Code Online (Sandbox Code Playgroud)
它会出现以下错误:
TypeError: can't pickle function objects
Run Code Online (Sandbox Code Playgroud)
有办法吗?
我们需要微分算子的两个矩阵[B]和[C]如:
B = sympy.Matrix([[ D(x), D(y) ],
[ D(y), D(x) ]])
C = sympy.Matrix([[ D(x), D(y) ]])
ans = B * sympy.Matrix([[x*y**2],
[x**2*y]])
print ans
[x**2 + y**2]
[ 4*x*y]
ans2 = ans * C
print ans2
[2*x, 2*y]
[4*y, 4*x]
Run Code Online (Sandbox Code Playgroud)
这也可以用于计算矢量场的卷曲,例如:
culr = sympy.Matrix([[ D(x), D(y), D(z) ]])
field = sympy.Matrix([[ x**2*y, x*y*z, -x**2*y**2 ]])
Run Code Online (Sandbox Code Playgroud)
要使用 Sympy 解决这个问题,必须创建以下 Python 类:
import sympy
class D( sympy.Derivative ):
def __init__( self, var ):
super( D, self ).__init__() …Run Code Online (Sandbox Code Playgroud) python matrix sympy automatic-differentiation differentiation