Seite 1 von 1

numpy.linalg.solve rechnet falsch?

Verfasst: Sonntag 22. April 2012, 09:49
von Takuan
Hallo,

habe ein kleines Problem:

ich will in meinem Programm ein lineares Gleichungssystem (3x3) lösen, das sollte ja eigentlich kein großes Problem sein, soweit ich das sehe steht dazu ja auch numpy.linalg.solve bereit. Nur spuckt das mir leider falsche Ergebnisse heraus und ich kann mir nicht so wirklich erklären warum, zumal Beispiele mit ganzzahligen Komponenten richtig gerechnet werden.

Hier mal ein Minimalbeispiel:

Code: Alles auswählen

import numpy as np
from numpy import *

J_res = array([[ 0.         ,-0.45464871, -0.45464871],
               [-0.46242567,  0.24564775, -0.30389665],
               [ 0.83722241, -0.15772861,  0.83722241]])

res = array([[ 1.29192658],
             [ 0.83722241],
             [ 0.46242567]])

x = np.linalg.solve(J_res, res)

print x
print (np.dot(J_res, x) == res).all()

[[ -3.02783731e+08]
 [ -2.54783725e+08]
 [  2.54783723e+08]]
False
Habt ihr vielleicht eine Idee woran das liegt?

Grüße
Takuan

Re: numpy.linalg.solve rechnet falsch?

Verfasst: Sonntag 22. April 2012, 11:18
von BlackJack
@Takuan: Das liegt vielleicht daran, dass man Gleitpunktzahlen niemals nimmer nicht mit ``==`` vergleichen sollte. Schau Dir doch einfach mal an wie „gross” die Abweichung ist:

Code: Alles auswählen

In [276]: np.dot(J_res, x) - res
Out[276]: 
array([[ -2.97484859e-09],
       [  8.93701724e-09],
       [  1.05836921e-08]])

Re: numpy.linalg.solve rechnet falsch?

Verfasst: Sonntag 22. April 2012, 13:19
von Takuan
Da hast du natürlich recht, danke dir!

Re: numpy.linalg.solve rechnet falsch?

Verfasst: Mittwoch 12. Februar 2014, 22:56
von Kurtosis
Ich habe mal eine Frage zu der linalg.solve-Funktion. Es gilt ja die Gleichung a*x=b. Was kann ich machen, wenn a nicht quadratisch ist, sondern z.B. von der Form 10x3 und b ebenfalls 10x3 ist, also jeweils 10 Zeilen und 3 Spalten haben? x muss ja dann von der Form 3x3 sein. Für die Funktion muss aber der Array quadratisch sein. Kennt jemand eine Alternative für nicht-quadratische Arrays?

Re: numpy.linalg.solve rechnet falsch?

Verfasst: Mittwoch 12. Februar 2014, 23:09
von cofi
Bitte erstelle fuer so etwas einen neuen Thread.
Niemand erwartet eine Frage nach einer Loesungsmethode fuer nicht-quadratische Matrizen in einem Thread der an der Korrektheit einer Funktion zweifelt.