Wie überführe ich eine „ungeordnete“ Matrix am Besten in ihre Blockdiagonalform? Kennt jemand links zu entsprechenden Algorithmen oder ein Programm, das dies leistet?
Vielen Dank.
hallo sven,
dieses problem hab ich mit VBA mal gelöst, indem ich die matrix NICHT geordnet habe. das ordnen ist eigentlich ein verfahren, das die manuelle behandlung der matrix auf papier vereinfacht, z.b. beim gausschen algorythmus / simplex-verfahren
die (quadratische) matrix soll also in die form mit den einsern in der diagonale und den rest in nullen überführt werden:
da der computer nicht so schnell die übersicht verliert, wie unsereiner kann er alternativ wie folgt vorgehen:
man überprüfe die zeilen auf der „linken“ seite (die umformungen betreffen natürlich beide seiten):
in beliebiger zeile ganz rechts anfangen (letzte spalte der linken seite)
diese zelle überprüfen ob sie ungleich null ist, wenn nicht nächste zeile bis die arbeitszeile gefunden ist
dann kommen die herkömmlichen umformungen der zeilen, auf basis der arbeitszeile (außer der arbeitszeile) bis alle zellen dieser spalte 0 sind; diese spalte ist jetzt abgearbeitet, also nächste spalte (unsere arbeitszelle muss zum schlus nicht =1 sein)
kann keine arbeitszeile gefunden werden, geht man auch zur nächsten spalte über
wenn alle spalten durch sind, teilen wir jede zeile durch den wert der einzigen übergliebenen zelle dieser zeile
damit ist die matrix abgearbeitet und überführt, obwohl überhaupt keine diagonale zu erkennen ist
ich kann den entsprechenden VBA-Quelltext auf anfrage auch zusenden
grüße, bs
Wie überführe ich eine „ungeordnete“ Matrix am Besten in ihre
Blockdiagonalform? Kennt jemand links zu entsprechenden
Algorithmen oder ein Programm, das dies leistet?
Vielen Dank.
Hey, vielen Dank für die Antwort!
dieses problem hab ich mit VBA mal gelöst, indem ich die
matrix NICHT geordnet habe. das ordnen ist eigentlich ein
verfahren, das die manuelle behandlung der matrix auf papier
vereinfacht, z.b. beim gausschen algorythmus /
simplex-verfahren
… damit hast Du sehr Recht, aber ich benötige leider gerade diese „Ordnung“ 
Vielleicht hätte ich direkt erzählen sollen, wozu ich das ganze brauche:
ich habe eine größere Anzahl von „ungeordneten“ Matrizen und möchte diese miteinander vergleichen. Es sollen keine Rechenoperationen stattfinden. Es sollen lediglich die Zahlen soweit es geht in die „obere linke Ecke geschoben“ werden… mit den größten möglichst links oben.
Es geht also eher um ein logisches Problem, das ich mit Hilfe von bereits bestehenden Lösungsansätzen angehen wollte (wie eben die Blockdiagonalform auf „halbem Weg“ zum Gauss Algorithmus
.
Wenn Du aber schon soweit warst, für die Berechnung ein Programm zu stricken, kannst Du mir vielleicht auch hier beim logischen Ansatz helfen? Es gillt, Zeilen und Spalten successive zu vertauschen, um eben die Zahlen möglichst diagonal und die größten von ihnen möglichst links stehen zu haben.
(Wenn Du Lust hast, mir zu helfen, kann ich Die eine Beispielmatrix schicken.)
Vielen Dank und viele Grüße,
Sven.
Hi Sven,
Es gillt, Zeilen und Spalten
successive zu vertauschen, um eben die Zahlen möglichst
diagonal und die größten von ihnen möglichst links stehen zu
haben.
ist schon ne Weile her, dass ich etwas mit Matrizen zu tun hatte und leider ist mir „Blockdiagonalform“ kein wirklicher Begriff.
Ich würde das Problem so angehen:
- Bilde die Quersumme (Betrag verwenden!) der einzelnen Zeilen
- Ordne anhand der Quersumme von oben nach unten (größte oben)
- siehe 1, nur mit Spalten
- siehe 2, nur mit Spalten
Somit dürfte sich die Vielzahl der größten Elemente nach links oben verschoben haben. Alle großen Elemente können natürlich nicht oben links sein, da ja nur äquivalente Umformungen möglich sind.
Überprüfung: die Aufsummierung der linken oberen Dreiecksmatrix ist größer als die der rechten unteren
Ciao, Bill