Wie berechne ich den Rang einer Matrix in Excel?
Gibt es dazu eine Formel in Excel oder kann mir jemand einen Visual Basic Code für dessen Berechnung geben?
Danke im Vorraus YSwaggerY
3 Antworten
Ein Weg ginge über das Gaußeliminationsverfahren.
Ein Ansatz in Anlehnung an den Pseudocode auf Wiki könnte so aussehen:
Sub Zeilenstufenform(A As Range, Optional Ziel As Range) ''https://de.wikipedia.org/wiki/Gau%C3%9Fsches\_Eliminationsverfahren#Algorithmus\_in\_Pseudocode
Dim i As Integer Dim j As Integer Dim k As Integer Dim pivot As Double
If Ziel Is Nothing Then _ Ziel = A A.Copy Ziel
For i = 1 To Ziel.Rows.Count - 1 For k = i + 1 To Ziel.Rows.Count pivot = Ziel.Cells(k, i).Value / Ziel.Cells(i, i).Value For j = 1 To Ziel.Columns.Count Ziel.Cells(k, j).Value = Ziel.Cells(k, j).Value - pivot * Ziel.Cells(i, j).Value Next Next Next End Sub
Du musst nur noch beim Pivotelement sicherstellen, dass du nicht durch 0 teilst und ggf. Zeilen tauschen.
Aber als Ansatz dürfte das schon gut dienen können.
Anschließend kannst du mit WorksheetFunctions CountIf (ZÄHLENWENN) und Ziel.Columns.Count die Anzahl an Nullen mit der Anzahl an Spalten vergleichen und für jede Nicht-Null-Zeile den Rang inkrementieren.
Du meinst also doch den Rang in einer Liste? In einer Tabelle?
Für Zahlen siehe andere Antworten, Rang funktioniert aber nicht für Texte (oder neuerdings vllt. doch? hab noch xl2010)
Bei Texten funktioniert dagegen:
=Summenprodukt(("Eintrag">A:A)*1)+1
daraus kannst Du allerdingsa nicht entnehmen, wie viele gleichlautende Einträge dieser Art es gibt. Das wäre:
=Summenprodukt(("Eintrag">A:A)*1+1+(10^-3)*Zählenwenn(A:A;"Eintrag")
Das hängt die Zahl gleicher Nennungen als Tausendstel dran. (mehr gleiche sind wohl nicht zu erwarten?)
Der nächste Eintrag wäre dann
=Summenprodukt(("Eintrag">=A:A)*1)+1
Also in
- Maier
- Mair
- Mayer
- Mayerhofer
- Meier
- Meir
- Meir
- Mejr
- Meyer
hätte Meier die Zahl(den Rang) 5,001, Meir 6,002 und Mejr 8,001
Die Einträge brauchen aber nicht alphabetisch geordnet zu sein und es können auch Zahlen drin vorkommen, die dann vorneweg gerated werden.
Selbst Unicode-Zeichen werden differenziert:
z✓✖ hat einen kleineren Rang als z✖✓
Die Unicode-Zeichen werden zwischen @ (Code(64) und A=a (A: Code(65) eingeordnet.
Hast Du die Matrix als Variable vorliegen, ist es m.E. am einfachsten, sie in ein Blatt auszulesen und mit der o.g. Formel zu analysieren (aber vllt kenne ich nur keine kurze Auswertung).
Ich glaube, ich habe bei Deiner Frage bzw den Kommentaren doch was missverstanden?
Richtigstellung: ✖✓ ist größer als ✓✖ und hat deshalb den höheren Rang (je nach Definition)
Hallo,
=Rang() --> bis XLS 2007
=Rang.Gleich() oder =Rang.Mittelw() --> ab XLS 2010
LG, Chris
Vom Begriff her kann man es leicht verwechseln, aber der Rang einer Matrix sagt etwas anderes aus als die Rangfolge einer Liste.