2012-04-07 16 views
3

produzieren Ich habe folgende Problem numpy 1.3.0 und 7.9.0 unter Verwendung von MATLAB: Python-Codeein System linearer Gleichungen, so dass Matlab Backslash und numpy.linalg.solve verschiedene Lösungen

import numpy as np  
Lu = [[1.01250000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[-0.00250000000000000,1.01250000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,-0.00250000000000000,1.01250000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,-0.00250000000000000,1.01250000000000,0,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0,0,0,0,0],[-0.00250000000000000,0,0,0,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0,0,0,0],[0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0,0,0],[0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0,0],[0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,0,0,0,-0.00250000000000000,0,0,0,0,0,0,0,0],[0,0,0,0,-0.00250000000000000,0,0,0,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0,0],[0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0,0],[0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0,0,0],[0,0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,0,0,0,-0.00250000000000000,0,0,0,0],[0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,0,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0,0],[0,0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0,0],[0,0,0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,-0.00250000000000000,0,0,-0.00250000000000000,0],[0,0,0,0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01000000000000,0,0,0,-0.00250000000000000],[0,0,0,0,0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,0,1.01250000000000,-0.00250000000000000,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01250000000000,-0.00250000000000000,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01250000000000,-0.00250000000000000],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.00250000000000000,0,0,-0.00250000000000000,1.01250000000000]] 
rhs = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0.0050, 0.0050, 0.0050, 0.0050] 

Lu = np.array(Lu) 
rhs = np.array(rhs) 
ans = np.linalg.solve(Lu,rhs) 
print ans 

das erzeugt Ausgabe

[ 1.87241716e-13 1.89545264e-13 1.89545264e-13 1.87241716e-13 
    7.56433496e-11 7.63890449e-11 7.63890449e-11 7.56433496e-11 
    3.04833369e-08 3.07089522e-08 3.07089522e-08 3.04833369e-08 
    1.22844835e-05 1.23451480e-05 1.23451480e-05 1.22844835e-05 
    4.95055571e-03 4.96277946e-03 4.96277946e-03 4.95055571e-03] 

wohingegen unter Verwendung von umgekehrten Schrägstrich in MATLAB erzeugt die Ausgabe

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0050 0.0050 0.0050 0.0050 

Ich habe kein anderes System der linearen algebraischen Gleichung gefunden, bei dem numpy und matlab unterschiedliche Lösungen erzeugen. Ich bin derzeit außerhalb der Stadt und daher nicht in der Lage zu überprüfen, ob eine andere Version von numpy (auf einem anderen Computer) das richtige Ergebnis liefern würde. Ist np.linalg.solve nicht die richtige Funktion, um dieses System zu lösen (Systemmatrix Lu ist spärlich)? Ist das ein Fehler in meiner Version von numpy? Gibt es ein Problem in meinem Code?

Danke!

+0

Können Sie bitte den Matlab-Code angeben? – Superbest

Antwort

3

Eigentlich sind das wahrscheinlich die gleichen Lösung. MATLAB rundet auf 0,0000 auf (zumindest beim Drucken), während Python Ihnen viel detailliertere Zahlen liefert (einige Probleme könnten von Gleitkomma-Rundungsfehlern herrühren). Die einzigen Zahlen, die als 0.0050 angezeigt werden, sind die, die e-03 sind. Alle anderen Zahlen sind kleiner als 0,0005 und können auf 0,0000 gerundet werden.

+0

Ah, ja! "Format kurz" in Matlab ist schuld. Matlab rundet die Ausgabe ab und wenn "format long" verwendet wird, ist klar, dass die beiden Lösungen gleich sind. Vielen Dank! –

Verwandte Themen