Optimierung der Rangberechnung für sehr große dünn besetzte Matrizen

8

Ich habe eine dünne Matrix wie

%Vor%

Die vollständige Matrix von A sieht folgendermaßen aus:

%Vor%

Ich möchte den Rang der Matrix A auf schnelle Weise finden (weil sich meine Matrix auf 10000 x 20000 erweitern kann). Ich versuche, es auf zwei Arten zu tun, aber es gibt das unterschiedliche Ergebnis

  1. Konvertiere in die vollständige Matrix und finde Rang mit

    %Vor%
  2. Finde den Rang unter Verwendung von Sprink

    %Vor%

Die wahre Antwort muss 3 sein, das bedeutet erstens. Es dauert jedoch lange Zeit, um den Rang zu finden, insbesondere Matrix mit großer Größe. Ich kenne den Grund, warum der zweite Weg 4 gibt, weil sprank nur sagt, wie viele Zeilen / Spalten Ihrer Matrix Nicht-Null-Elemente haben, während Rang den tatsächlichen Rang der Matrix angibt, die angibt, wie viele Zeilen Ihrer Matrix sind linear unabhängig. sprank(A) ist 4, aber rank(A) ist nur 3, weil Sie die dritte Zeile als lineare Kombination der anderen Zeilen schreiben können, insbesondere A(2,:) - A(1,:) .

Mein Problem ist, wie man den Rang einer dünn besetzten Matrix mit der niedrigsten Zeitaufnahme findet

Update: Ich habe versucht, irgendwie zu verwenden. Es wurde jedoch von einem höheren Zeitverbrauch berichtet

%Vor%     
user3051460 13.11.2014, 12:37
quelle

1 Antwort

1

Ich weiß nicht, welcher Algorithmus für Sie am besten geeignet ist, und ich stimme zu, dass es möglicherweise besser ist, auf math.stackexchange.com nachzufragen. Während ich mit der zufälligen Matrix versuchte, die Sie G = sparse(randi(2,1000,1000))-1; liefern, bemerkte ich, dass es wenig Chance gibt, dass sein Rang & lt; 1000 ist, und welcher Algorithmus Sie auch verwenden, ist es wahrscheinlich, dass seine Leistung sehr datenabhängig ist. Zum Beispiel ergibt die Verwendung von eigs(G) auf einer 2000-samples-Quadratmatrix von Rang (bzw.) [198,325,503,1026,2000] die folgende Leistung (in Sekunden): [0,64,0,90,1,38,1,57,4,00] was die Leistung zeigt der EIGS-Funktion ist stark mit dem Rang der Matrix verbunden.

Ich habe auch nach vorhandenen Tools gesucht und einen Versuch unternommen, > was meiner Meinung nach nicht so datenabhängig ist (es gibt eine bessere Leistung als Eigs für hohe Ränge und schlechter, wenn der Rang gering ist).

Am Ende möchten Sie vielleicht Ihre technische Lösung in Abhängigkeit von der Art der Matrizen anpassen, mit denen Sie am wahrscheinlichsten arbeiten werden.

    
Emilien 17.11.2014 12:33
quelle