Lineares Gleichungssystem lösen
Verfasst: Donnerstag 17. September 2015, 17:33
Hallöchen.
Heute in der Schule habe ich versucht, ein LGS zu lösen. Was immer ich auch tat, ich kam immer zu falschen Ergebnissen. Nach einer Stunde Quälerei mit Einsetzungs-, Gleichsetzungs- und Additionsverfahren fiel mir auf, dass ich die Aufgabe falsch abgeschrieben hatte . Dann wollte ich eigentlich wutentbrannt Amok laufen, aber stattdessen hab ich dieses Programm geschrieben:Kritik ist wie immer erwünscht. Lg Y.
PS/Edit: Dies ist mein hundertölfter Beitrag hier. Helau!
Heute in der Schule habe ich versucht, ein LGS zu lösen. Was immer ich auch tat, ich kam immer zu falschen Ergebnissen. Nach einer Stunde Quälerei mit Einsetzungs-, Gleichsetzungs- und Additionsverfahren fiel mir auf, dass ich die Aufgabe falsch abgeschrieben hatte . Dann wollte ich eigentlich wutentbrannt Amok laufen, aber stattdessen hab ich dieses Programm geschrieben:
Code: Alles auswählen
from __future__ import division, print_function
def liste_mal(zahl, liste):
return [zahl*i for i in liste]
def liste_plus(a, b):
return [sum(paar) for paar in zip(a,b)]
def var_eliminieren(lgs):
erste_zeile = lgs[0]
lgs_neu = []
for zeile in lgs[1:]:
faktor = - zeile[0] / erste_zeile[0]
erste_zeile_malgenommen = liste_mal(faktor, erste_zeile)
zeile_neu = liste_plus(erste_zeile_malgenommen, zeile)[1:]
lgs_neu.append(zeile_neu)
return lgs_neu
def errechne_stufenform(lgs):
if len(lgs) == 1: return lgs
return [lgs[0]] + errechne_stufenform(var_eliminieren(lgs))
def auffuellen(lgs):
maxlen = max(len(zeile) for zeile in lgs)
return [[0]* (maxlen-len(zeile)) + zeile for zeile in lgs]
def loese_stufenform(lgs):
verdreht = [list(reversed(zeile[:-1])) + [zeile[-1]] for zeile in reversed(lgs)]
rueckeingesetzt = errechne_stufenform(verdreht)
aufgeloest = [liste_mal(1/zeile[0], zeile) for zeile in rueckeingesetzt]
loesungen = list(reversed([zeile[-1] for zeile in aufgeloest]))
return loesungen
def loese_lgs(lgs):
stufenform = errechne_stufenform(lgs)
return loese_stufenform(auffuellen(stufenform))
print(loese_lgs([[-1,1,-2,-5], [0,3,-1,3], [2,0,1,5]]))
PS/Edit: Dies ist mein hundertölfter Beitrag hier. Helau!