6

方程式の 2 つの記号をそれぞれの行列形式に置き換えようとしています。

式を形成する交換子関数を作成しました。

t, vS, = sy.symbols('t, vS', commutative = False)
hS = t + vS

eta = myComm(t,hS)

dHs = myComm(eta,hS) 
print dHs.expand()

私が望む正しい式をもたらします:

2*t*vS*t + t*vS**2 - t**2*vS - 2*vS*t*vS - vS*t**2 + vS**2*t

したがって、シンボル t と vS を行列に置き換えたいと思いますが、サブルーチンを使用すると、「unhashable type: 'list'」というエラーが表示されます。これは、行列の初期化またはそれらを適切に置換する方法に関係していると思います私はnumPyとsymPyの両方が初めてなので。

コードの残りの部分:

tRel = ([e0, 0],[0,e1])
vtmp = ([v0, v1],[v2,v3])

dHs = dHs.subs(t, tRel)
dHs = dHs.subs(vS, vtmp)
print dHs
4

1 に答える 1

4

おそらくlambdifyを使用してください:

import sympy as sy
import numpy as np    
from sympy.abc import x, y

z = ((x+y)**2).expand()
print(z)
# x**2 + 2*x*y + y**2
X = np.arange(6).reshape(2,3)
Y = np.arange(1,7).reshape(2,3)    

f = sy.lambdify((x, y), z, 'numpy')
print(f(X, Y))
# [[  1   9  25]
#  [ 49  81 121]]

assert np.allclose(f(X, Y), (X**2 + 2*X*Y + Y**2))
于 2013-06-03T21:05:26.807 に答える