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!