2016-02-28 17 views
6

Ich muss überprüfen, ob eine Matrix eine Identitätsmatrix ist. Ich weiß, es gibt eine Funktion, die überprüft, ob eine Matrix eine diagonale Matrix ist, also isdiag. Ich weiß, ich kann folgendes überprüfen tun, wenn eine Matrix a eine Identitätsmatrix ist:Überprüfen, ob eine Matrix eine Identitätsmatrix in Matlab ist

isequal(a, eye(size(a, 1))) 

Gibt es eine Funktion wie isdiag tha tut es mir direkt?

+5

Sie sollten es generell vermeiden, die Genauigkeit zu überprüfen, es sei denn, Sie arbeiten mit Ganzzahlen. Sie sollten wahrscheinlich etwas tun, wie 'isidentity = @ (a, tol) all (abs (a-eye (Größe (a)))

+0

Es gibt keine eingebaute Funktion. Ihr Ansatz ist gut, es sei denn, Sie verarbeiten sehr große (spärliche) Matrizen, in denen das Auge (Größe (a, 1)) den Speicher überschreiten kann. – Daniel

+0

Hallo @nbro Sie haben mehrere Ihrer Fragen noch offen, ohne eine akzeptierte Antwort. Wenn eine Antwort Ihre Frage gelöst hat, denken Sie bitte daran [akzeptieren] (http://meta.stackexchange.com/q/5234/179419), indem Sie auf die Schaltfläche klicken Häkchen. Dies zeigt der breiteren Gemeinschaft, dass Sie eine Lösung gefunden haben. – Daniel

Antwort

0

Wie andere schon gesagt haben, möchten Sie nicht unbedingt die exakte Übereinstimmung mit der Identitätsmatrix überprüfen. Auch die Verwendung von eye kann möglicherweise eine unnötig große Speicherkapazität für ausreichend große Matrizen beanspruchen. Ich würde empfehlen, diag zu verwenden, um das zu umgehen.

isdiag(a) && all(abs(diag(a) - 1) < tolerance) 
+0

Beachten Sie, dass 'isdiag' wahrscheinlich nach exakter Diagonalität sucht, damit es nicht ganz mit der zweiten Hälfte übereinstimmt Bedingung. –

1
sum(sum(A - eye(size(A,1)) < epsilon)) == 0 

subtrahieren von Identität und prüfen, ob alle Elemente größer als Epsilon sind.

Verwandte Themen