Ich habe Matrix A
und eine rechtsseitige Vektor y
hinsichtlich fractions.Fraction
Objekte ausgedrückt:Linear Systemlösung mit Fraktionen in numpy
import random, fractions, numpy as np
A = np.zeros((3, 3), dtype=fractions.Fraction)
y = np.zeros((3, 1), dtype=fractions.Fraction)
for i in range(3):
for j in range(3):
A[i, j] = fractions.Fraction(np.random.randint(0, 4), np.random.randint(1, 6))
y[i] = fractions.Fraction(np.random.randint(0, 4), np.random.randint(1, 6))
Ich möchte das System A*x = y
unter Verwendung der bereitgestellten Funktionen lösen, in numpy
und ein Ergebnis in der Fraktion Objekte ausgedrückt, aber leider ist der Grund x = np.linalg.solve(A, y)
gibt das Ergebnis in Standardwerte Gleitkomma:
>>> np.linalg.solve(A, y)
array([[-1.5245283 ],
[ 2.36603774],
[ 0.56352201]])
Ist gibt es eine Möglichkeit, das genaue Ergebnis mit Fraktionsobjekten zu erhalten? einfach nicht machbar mit den integrierten Funktionen von numpy
EDIT
Was würde ich tun (ab Version 1.10 - siehe Mad Physikers Antwort). Man könnte seinen eigenen linearen Löser implementieren, der auf der Gauß-Eliminierung basiert, die auf Summe, Subtraktion, Multiplikation und Division beruht, die alle genau definiert sind und genau mit Bruchstücken ausgeführt werden (solange die Zähler und Nenner passen) in dem Datentyp, der meiner Meinung nach beliebig lang ist).
Wenn Sie wirklich daran interessiert sind, dies zu implementieren, implementieren Sie einfach einen Solver selbst, es wird einfach und schnell zu tun sein (folgen Sie einem der vielen Tutorials online). Ich bin nicht so interessiert, also bleibe ich beim Fließkomma-Ergebnis.
Ist Ihre Matrix immer 3x3 oder ist das nur zufällig? Wenn es immer 3x3 ist, können Sie die Matrix umgekehrt im schlimmsten Fall von Hand nach oben codieren. –
Ich bekomme tatsächlich einen Fehler, wenn ich versuche, die Zeile 'np.linalg.solve (A, y)' auszuführen. Wie hast du es zur Arbeit gebracht? Numpy gibt den folgenden Fehler aus: 'TypeError: Keine Schleife, die der angegebenen Signatur entspricht, und das Casting wurde für ufunc solve gefunden. Ich habe versucht, ähnlichen Code in scipy und es gibt 'ValueError: Objekt-Arrays werden nicht unterstützt'. –
Die Matrix ist klein, aber ihre Größe ist variabel. Sagen Sie nicht größer als 10x10. Ich weiß auch, dass es nicht singulär ist. – Spiros