2016-06-08 10 views
3

Ich bin auf der Suche für ein Modul oder eine Funktion zu schreiben, dass macht folgendes in Python zur Liste:einfachste Lösung zu finden Gleichheit Python

Sagen, ich habe zwei Matrizen:

left = ['2B', '1A', '2A+1B'] 
right = ['8C', '3C', '2D'] 

mag ich finde die kleinste ganze Zahlen für A, B, C und D (alle muss größer als 0 sein), so dass

left = right 

in diesem Fall also haben wir:

2*B = 8*C 
A = 3*C 
2*A + B = 2*D 

Daher

A = 3 
B = 4 
C = 1 
D = 5 

sind meine Matrizen wie oben gezeigt formatiert - sie sind Listen von Zeichenketten mit jedem Großbuchstaben benötigt für die gelöst werden.

Die Matrizen können beliebig groß sein, ich habe nur die Länge 3 als Beispiel gewählt.

Irgendwelche Ideen? Vielen Dank!

EDIT: Jemand in den Kommentaren machte einen guten Punkt. Ich denke, es gibt eine Möglichkeit, dass es zwei Lösungen gibt, eine mit A als "kleinste" und eine andere mit B als "kleinste". Aber in meinem Fall verwende ich dies als chemischen Gleichgewichtsregler, so weit ich weiß, kann das nie passieren - es sollte immer eine richtige, kleinste Lösung geben.

+0

Wie bestimmen Sie "kleinste"? Ein System könnte leicht zwei Lösungen haben, wobei die eine ein kleineres A und die andere ein kleineres B hat. – user2357112

+2

Related und Off Topic post [Einfachste Art, mathematische Gleichungen in Python zu lösen] (http://stackoverflow.com/q/1642357) –

+1

werfen Sie einen Blick hier: http://docs.sympy.org/dev/modules/solvers/solvers.html. Sie müssen herausfinden, wie Sie Ihre Gleichungen in Matrixform schreiben und Solver anwenden –

Antwort

3

Im Allgemeinen versuchen Sie, ein Gleichungssystem über die Ganzzahlen zu lösen, was keine einfache Aufgabe ist (check out this paper).

Es gibt jedoch einige Werkzeuge, die helfen können, vorausgesetzt, Sie setzen die Arbeit ein, um Ihre lhs, rhs Listen in eine Matrix zu verwandeln, die Ihr System darstellt.

Das fantastische SymPy Paket ist ein guter Anfang, sie haben einen set of solvers, mit dem Sie das System zusammen mit externen Einschränkungen (wie eine positive ganze Zahl) angeben können.

Beachten Sie, dass in Ihrem Beispiel vier Unbekannte und drei Gleichungen vorhanden sind. Dies bedeutet, dass Ihre Lösung mindestens eine freie Variable enthält, was Ihrer Gesamtlösung eine gewisse Komplexität verleiht.

Verwandte Themen