Nehmen Sie zwei dreidimensionale Vektoren auf, die jeweils als Array dargestellt werden, und geben Sie an, ob sie linear unabhängig sind. Ich habe versucht, mit np.linalg.solve () die Lösung von x zu erhalten, und versucht herauszufinden, ob x trivial oder nicht trivial ist. Es wird jedoch "LinAlgError: Die letzten beiden Dimensionen des Arrays müssen quadratisch sein" angezeigt. Kann mir jemand helfen, das herauszufinden?

from sympy import *
import numpy as np
from scipy import linalg
from numpy import linalg

v1 = np.array([0, 5, 0])
v2 = np.array([0, -10, 0])
a = np.array([v1,v2])
b = np.zeros(3)
x = np.linalg.solve(a, b)
1
RRR 7 Okt. 2020 im 08:54

2 Antworten

Beste Antwort

Da Ihre endgültige Matrix eine rechteckige Form hat, funktioniert ein einfacher Ansatz von EigenValues ​​nicht. Sie müssen die Sympy-Bibliothek verwenden

import sympy 
import numpy as np
matrix = np.array([
  [0, 5, 0],
  [0, -10, 0]
])

_, indexes = sympy.Matrix(matrix).T.rref()  # T is for transpose
print(indexes)

Dadurch werden die Indizes linear unabhängiger Zeilen gedruckt. Verwenden Sie zum weiteren Drucken aus der Matrix

print(matrix[indexes,:])

Um Ihre spezifische Frage zu beantworten, prüfen Sie, ob zwei Vektoren linear abhängig sind oder nicht. Sie können anschließend auf jeden Fall eine if-Anweisung verwenden, wenn es sich um die beiden Vektoren handelt, die Sie immer überprüfen werden.

if len(indexes) == 2:
    print("linearly independant")
else:
    print("linearly dependant")
1
Muhammad Junaid Haris 7 Okt. 2020 im 06:26

Wenn ein Eigenwert der Matrix Null ist, ist ihr entsprechender Eigenvektor linear abhängig.

Der folgende Code würde also für einen einfachen Fall funktionieren:

from sympy import *
import numpy as np
from scipy import linalg
from numpy import linalg

matrix = np.array([[0, 1, 0, 0], [0, 0, 1, 0], [0, 1, 1, 0], [1, 0, 0,
                  1]])

(lambdas, V) = np.linalg.eig(matrix.T)
print matrix[lambdas == 0, :]

Ausgabe: [[0 1 1 0]]

0
Vasu Makwana 7 Okt. 2020 im 06:09