2017-02-02 2 views
1

Ich versuche, ein sympy Skript zu schreiben, aber Probleme an L1, L2. Jede Hilfe ist willkommen.Matrix Operation Fehler in Sympy

Bei L1 versuche ich, Werte in Matrixmultiplikationsausdruck in der früheren Zeile zu ersetzen. Kann ich das Matrixobjekt nicht ersetzen?

Bei L2 versuche ich den Wert der Substitution in Gleitkommazahlen zu bewerten, aber nicht bekommen. Warum gibt eval() keinen Fließkommawert?

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:

Nach einer Antwort, ich bin einige zusätzliche Zeilen Code setzen. Zeilen `L3, L4, funktionieren nicht. Bei L3, L4, versuche ich f1 zu integrieren, was eine Matrix und eine Zeile dieser Matrix ist. Aber in beiden Fällen fehlgeschlagen. Wie integriert man eine Matrix in sympy? Wird es unterstützt?

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 

Antwort

1

Die erste Zeile funktioniert für mich. Stellen Sie sicher, dass Sie die neueste Version von SymPy (1.0 zum Zeitpunkt des Schreibens) verwenden.

Die zweite Zeile funktioniert nicht, da evalf(subs={...}) nicht funktioniert, wenn Sie nicht alle Variablen in einem Ausdruck ersetzen. Siehe https://github.com/sympy/sympy/issues/6974. Wenn Sie nur einige der Variablen ersetzen möchten, verwenden Sie einfach subs.

+0

Vielen Dank für die Antwort. Kannst du auch über 'L3, L4' kommentieren? – vfg4341

+0

Funktionieren die Linien 'L3, L4' für Sie? – vfg4341

+0

@ vfg4341 wäre es besser, eine neue Frage zu stellen, – asmeurer