2017-02-02 20 views
1

sympyスクリプトを作成しようとしていますが、L1、L2の問題に直面しています。どんな助けも歓迎です。sympyの行列操作エラー

L1では、前の行の行列乗算式の値を置き換えようとしています。行列オブジェクトで代用できないのですか?

L2では、浮動小数点数の置換の値を評価しようとしていますが、取得できません。なぜeval()が浮動小数点値を与えていないのですか?

from sympy import * 
init_printing() 
x, x1, x2, x3 = symbols ('x x1 x2 x3') 
N1 = ((x-x2)*(x-x3))/((x1-x2) * (x1-x3)) 
N2 = ((x-x1)*(x-x3))/((x2-x1) * (x2-x3)) 
N = Matrix([ [N1,N2] ]) 
expr1 = N*Transpose(N) 
print expr1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) #L1 
N1.evalf (subs={x1:0.0, x2:2.5, x3:5}) #L2 

EDIT:

1つの答えの後、私は、コードのいくつかの余分な行を入れています。 L3、L4行は機能しません。 L3、L4では、私は行列であるf1とその行列の行を積分しようとしています。しかし、どちらの場合も失敗する。 sympyで行列を統合するには?それはサポートされていますか?

from sympy import * 
init_printing() 
x, x1, x2, x3 = symbols ('x x1 x2 x3') 
N1 = ((x-x2)*(x-x3))/((x1-x2) * (x1-x3)) 
N2 = ((x-x1)*(x-x3))/((x2-x1) * (x2-x3)) 
N = Matrix([ [N1,N2] ]) 
expr1 = N*Transpose(N) 
print expr1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) #L1 
N1s=N1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) 
N2s=N2.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) 
Ns = Matrix([ [N1s,N2s] ]) 
f1 = Ns*x**3 
f2 = integrate(f1,(x,0,5)) #L3 
f2 = integrate(f1.row(1),(x,0,5)) #L4 

答えて

1

最初の行は私のために働いています。 SymPyの最新バージョン(この執筆時点では1.0)を使用していることを確認してください。

evalf(subs={...})は、式のすべての変数を代入しないと機能しないため、2行目は機能しません。 https://github.com/sympy/sympy/issues/6974を参照してください。変数の一部を置換するだけの場合は、subsを使用してください。

+0

ありがとうございました。 'L3、L4'についてもコメントできますか? – vfg4341

+0

'L3、L4'という行はあなたのために働いていますか? – vfg4341

+0

@ vfg4341 – asmeurer