Sympy Matrizenrechnung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
yoyoba
User
Beiträge: 14
Registriert: Mittwoch 6. Januar 2016, 21:34

Guten Abend zusammen,

ich bin derzeit dabei mich in Sympy einzuarbeiten. Hierbei habe ich mir vorgenommen eine Matrizenmultiplikation durchzuführen.
Hierfür habe ich drei Matrizen, die Multiplikation von v1 und v2 soll die Matrize v3 ergeben. In Matrize v2 befindet sich allerdings die unbekannte x und in v3 die unbekannte y. Mit Hilfe von Sympy möchte ich nun die beiden Unbekannten ermitteln, kriege es allerdings nicht wirklich hin :?

Folgenden Code habe ich geschrieben

Code: Alles auswählen

from sympy import Matrix, symbols
from sympy.solvers import solve

x,y = symbols('x,y')

v1 = Matrix([[1,2],[2,3]])
v2 = Matrix([[x],[1]])
v3 = Matrix([[3],[y]])

solve(v1.dot(v2), v3)
Allerdings erhalte ich nicht das richtige Ergebnis...
Für x müsste ich 1 und für y 5 herausbekommen.

Der oben gezeigte Code ist nur einer von vielen probierten... Ich denke ich muss nur etwas in der letzte Zeile ändern, weiß allerdings nicht was...


Hat evtl jemand eine Idee wie ich das hinkriege?

Vielen Dank ;)

Grüße und Schönen Abend
Yoyoba
Zuletzt geändert von Anonymous am Montag 13. März 2017, 22:40, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Wenn Du

Code: Alles auswählen

| 1  2 | . |x| = |3|
| 2  3 |   |1|   |y|
lösen willst, dann geht das so:

Code: Alles auswählen

from sympy import Matrix, symbols
from sympy.solvers import solve
 
x,y = symbols('x,y')
 
v1 = Matrix([[1,2],[2,3]])
v2 = Matrix([x,1])
v3 = Matrix([3,y])

print solve(Matrix(v1.dot(v2))-v3, x,y)
# {x: 1, y: 5}
Der 1. Parameter von solve ist die zu lösende Gleichung, danach kommen die Symbole, nach denen gelöst werden soll.
Bei der Gleichung muss man sich das "==0" dazu denken.
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

Alternativ zum abziehen könnte man mit `Eq()` ein Objekt für die Gleichung erstellen. Läuft letztendlich aber auf das Gleiche hinaus.

Code: Alles auswählen

In [10]: solve(Eq(Matrix(v1.dot(v2)), v3), [x, y])
Out[10]: {x: 1, y: 5}
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Dass

Code: Alles auswählen

v1.dot(v2)
keine Matrix, sondern eine Liste zurück gibt und man deshalb extra noch den Aufruf von Matrix braucht, finde ich unschön.
a fool with a tool is still a fool, www.magben.de, YouTube
yoyoba
User
Beiträge: 14
Registriert: Mittwoch 6. Januar 2016, 21:34

Danke für die Lösungen, funktioniert super.

@MagBen, gibt es eine Alternative die nicht so "unschön" ist?

Danke.

Yoyoba
Antworten