2016-04-17 15 views
2

Angenommen, ich habe eine reduzierte Matrix in dieser Form:Lösungen finden reduzierte Matrix Python Reihe

x y z = 
[[2.0, 4.0, 4.0, 4.0], 
[0.0, 2.0, 1.0, 2.0], 
[0.0, 0.0, 1.0, 1.0], 
[0.0, 0.0, 0.0, 0.0]] 

Und ich möchte ein Array mit den Lösungen enthalten.

In diesem Fall würde ich

z y  x 
[1.0, 0.5, -1.0] 

Wir gehen davon kann es ist ein perfektes Dreieck ohne freie Variablen zurückgeben möchten.

Ich schaute auf scipy.linalg.solve zu lösen, aber es erfordert das Formular Ax=B und ich bin mir nicht sicher, wie man in dieses Formular konvertiert.

+1

Was genau meinen Sie mit "Lösungen"? – miradulo

+0

Siehe Bearbeiten. Ich möchte in diesem Fall x, y, z in Form eines Arrays zurückgeben –

Antwort

4

Sie haben bereits alle Informationen, die Sie benötigen, um numpy.linalg.solve zu verwenden. A wird durch die ersten 3 Spalten Ihres 2D-Arrays dargestellt, und b ist die letzte Spalte. Wenn Sie also Ihr Array in diese Elemente aufteilen, können Sie .solve aufrufen. Beachten Sie, dass ich die letzte Zeile abgeschnitten, so dass Ihr System gut bestimmt wird, wie numpy.linalg.solve ein System gut bestimmt erfordert:

init_array = numpy.array(
     [[2.0, 4.0, 4.0, 4.0], 
     [0.0, 2.0, 1.0, 2.0], 
     [0.0, 0.0, 1.0, 1.0], 
     [0.0, 0.0, 0.0, 0.0]]) 

A = init_array[0:3,:-1] 
b = init_array[0:3, -1] 
x = numpy.linalg.solve(A, b) 
print(x) 

Ausgänge:

[-1. 0.5 1. ] 

Weiterführende Literatur:

+0

Angenommen, es wäre eine "nxn" -Matrix. Würde ich 'init_array [0: n-1,: -1]' –

+0

@GregPeckory verwenden Nein, Sie könnten List Comprehensions verwenden, um 'A' und' b' jedoch zu erstellen. Zum Beispiel 'A = [sub [: 3] für sub in coeff [: - 1]]' – miradulo

+0

Tut mir leid, das Listenverständnis verwirrt mich etwas, könntest du erklären, wie ich einen allgemeinen Fall für 'nxn'-Matrizen erstellen könnte, sorry Der Ärger –

1

Bemerkung als:

 [2.0, 4.0, 4.0, 4.0] x  0 
    [0.0, 2.0, 1.0, 2.0] y = 0 
    [0.0, 0.0, 1.0, 1.0] z  0 
    [0.0, 0.0, 0.0,-1.0] t  1 

die gleiche Lösung hat, mit t = -1.

Lassen Sie also I=np.eye(4) und b=I[3]. Die Lösung ist dann gegeben durch:

In [2]: solve(A-I*b,b)[:-1] 
Out[2]: array([-1. , 0.5, 1. ])