In einem Softwareprojekt, an dem ich arbeite, sind bestimmte Berechnungen für dichte Matrizen mit niedrigem Rang erheblich einfacher. Bei einigen Problemfällen handelt es sich um dichte Matrizen mit niedrigem Rang, die mir jedoch vollständig und nicht als Faktoren zur Verfügung stehen. Daher muss ich den Rang und den Faktor der Matrix überprüfen, wenn ich die Struktur mit niedrigem Rang nutzen möchte .
Die fraglichen Matrizen sind typischerweise vollständig oder nahezu vollständig dicht, wobei n im Bereich von einhundert bis zu einigen tausend liegt. Wenn eine Matrix einen niedrigen Rang hat (sagen wir weniger als 5 bis 10), lohnt es sich, die SVD zu berechnen und sie als Faktorisierung mit niedrigem Rang zu verwenden. Wenn die Matrix jedoch nicht von niedrigem Rang ist, würde der Aufwand verschwendet.
Daher möchte ich einen schnellen und einigermaßen zuverlässigen Weg finden, um festzustellen, ob der Rang niedrig ist oder nicht, bevor ich mich um eine vollständige SVD-Faktorisierung bemühe. Wenn zu irgendeinem Zeitpunkt klar wird, dass der Rang über dem Grenzwert liegt, kann der Prozess sofort gestoppt werden. Wenn die Prozedur fälschlicherweise feststellt, dass die Matrix einen niedrigen Rang hat, wenn dies nicht der Fall ist, ist dies kein großes Problem, da ich immer noch eine vollständige SVD durchführen würde, um den niedrigen Rang zu bestätigen und eine Faktorisierung mit niedrigem Rang zu finden.
Zu den Optionen, die ich in Betracht gezogen habe, gehört ein Rang, der die LU- oder QR-Faktorisierung aufdeckt, gefolgt von einer vollständigen SVD als Überprüfung. Gibt es andere Ansätze, die ich berücksichtigen sollte?
quelle
Das Problem ist natürlich, dass die Berechnung des wahren Ranges (z. B. über eine QR-Zerlegung) nicht wirklich billiger ist als die Berechnung einer niedrigrangigen Darstellung der Matrix.
Das Beste, was Sie wahrscheinlich tun können, ist, einen randomisierten Algorithmus zu verwenden, um Näherungen mit niedrigem Rang zu finden. Diese können zumindest theoretisch erheblich schneller sein als die Arbeit an der gesamten Matrix, da sie im Wesentlichen nur Zerlegungen für Projektionen berechnen der Matrix auf zufällige Teilräume .
quelle
Ein weiterer Ansatz, den Sie ausprobieren sollten, ist die Verwendung der Adaptiven Kreuzapproximation (ACA). Es ist ein ziemlich beliebter Algorithmus, bei dem viele Implementierungen online verfügbar sind. Als Referenz können Sie das Originalpapier sehen:
ACA und seine Variationen (z. B. ACA +, Hybrid Cross Approximation HCA) können in verschiedenen Szenarien verwendet werden. Wenn Sie bereits die gesamte dichte Matrix berechnet haben, ist dies eine der günstigsten Möglichkeiten, da Sie Residuen bei Bedarf genau berechnen können.
quelle
quelle