Wie berechne ich den Rang einer Matrix in Excel?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Studium / Ausbildung – Mathematik

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

  1. Maier
  2. Mair
  3. Mayer
  4. Mayerhofer
  5. Meier
  6. Meir
  7. Meir
  8. Mejr
  9. 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?

Iamiam  10.05.2017, 00:24

Richtigstellung: ✖✓ ist größer als ✓✖ und hat deshalb den höheren Rang (je nach Definition)

0

Hallo,

=Rang()   --> bis XLS 2007

=Rang.Gleich()  oder  =Rang.Mittelw()   --> ab XLS 2010

LG, Chris

Suboptimierer  09.05.2017, 16:39

Vom Begriff her kann man es leicht verwechseln, aber der Rang einer Matrix sagt etwas anderes aus als die Rangfolge einer Liste.

1
YswaggerY 
Fragesteller
 09.05.2017, 19:13

Das habe ich nicht gesucht, aber trotzdem danke

0