So finden Sie linear unabhängige Zeilen aus einer Matrix

9

Wie identifiziere ich die linear unabhängigen Zeilen aus einer Matrix? Zum Beispiel,

Die vierte Zeile ist unabhängig.

    
SparkAndShine 02.03.2015, 18:12
quelle

4 Antworten

13

Zunächst ist Ihre dritte Zeile linear abhängig von 1t und 2nd row. Ihre erste und vierte Spalte sind jedoch linear abhängig.

Zwei Methoden, die Sie verwenden könnten:

Eigenwert

Wenn ein Eigenwert der Matrix Null ist, ist sein entsprechender Eigenvektor linear abhängig. Die Dokumentation eig stats die Eigenwerte nicht unbedingt bestellt. Ich weiß nicht wirklich, ob der Eigenwert im resultierenden Array nur sortiert ist oder eine zufällige Reihenfolge hat. Unter der Annahme, dass die Eigenwerte Ihren Zeilenvektoren entsprechen, wäre eine Methode jedoch:

%Vor%

Cauchy-Schwarz Ungleichung

Um die lineare Abhängigkeit von Vektoren zu testen und herauszufinden, welche, könnten Sie die Cauchy-Schwarz-Ungleichung . Wenn das innere Produkt der Vektoren gleich dem Produkt der Norm der Vektoren ist, sind die Vektoren grundsätzlich linear abhängig. Hier ein Beispiel für die Spalten:

%Vor%

Um die Zeilen zu testen, ist ein ähnlicher Ansatz.

Dann könntest du das verlängern, um alle Kombinationen von Vektoren zu testen, aber ich stelle mir vor, dass diese Lösung schlecht mit der Größe skaliert.

    
hakanc 02.03.2015, 19:29
quelle
7

Mit finden Sie die linearen unabhängigen Zeilen mit: sympy.Matrix.rref :

%Vor%

Was grundsätzlich sagt, dass die Zeilen 0, 1 und 3 linear unabhängig sind, während Zeile 2 nicht ist (es ist eine lineare Kombination von Zeile 0 und 1).

Dann könnten Sie diese Zeilen mit Slicing entfernen:

%Vor%

Dies funktioniert auch gut für rechteckige (nicht nur für quadratische) Matrizen.

    
MSeifert 14.06.2017 23:21
quelle
6

Ich habe den Code für die Cauchy-Schwartz-Ungleichung bearbeitet, der besser mit der Dimension skaliert: Die Eingaben sind die Matrix und ihre Dimension, während die Ausgabe eine neue rechteckige Matrix ist, die entlang ihrer Zeilen die linear unabhängigen Spalten der Ausgangsmatrix enthält. Dies funktioniert in der Annahme, dass die erste Spalte niemals null ist, aber leicht verallgemeinert werden kann, um auch diesen Fall zu implementieren. Eine andere Sache, die ich beobachtete, ist, dass 1e-5 eine "schlampige" Schwelle zu sein scheint, da einige bestimmte pathologische Vektoren in diesem Fall linear abhängig waren: 1e-4 gibt mir nicht die gleichen Probleme. Ich hoffe, das könnte hilfreich sein: Es war ziemlich schwierig für mich, eine wirklich funktionierende Routine zu finden, um li-Vektoren zu extrahieren, und deshalb bin ich bereit, meine zu teilen. Wenn Sie einen Fehler finden, melden Sie ihn bitte !!

%Vor%     
Simone Bolognini 18.07.2015 09:27
quelle
2

Ich weiß, dass das vor einer Weile gefragt wurde, aber hier ist eine sehr einfache Lösung. Wenn ein Array gegeben ist, findet das Folgende einen Satz linear unabhängiger Vektoren, indem es fortlaufend einen Vektor hinzufügt und prüft, ob der Rang zugenommen hat:

%Vor%     
Couchy311 04.05.2017 05:37
quelle