numpy.linalg.solve rechnet falsch?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Takuan
User
Beiträge: 2
Registriert: Sonntag 22. April 2012, 09:33

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
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]])
Takuan
User
Beiträge: 2
Registriert: Sonntag 22. April 2012, 09:33

Da hast du natürlich recht, danke dir!
Benutzeravatar
Kurtosis
User
Beiträge: 55
Registriert: Samstag 11. Dezember 2010, 14:32

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?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Antworten