2016-02-28 92 views
6

Muszę sprawdzić, czy macierz jest macierzą tożsamości. Wiem, że istnieje funkcja, która sprawdza, czy macierz jest macierzą diagonalną, czyli isdiag. Wiem, można wykonać następujące czynności, aby sprawdzić, czy matryca a jest macierzą tożsamości:Sprawdź, czy macierz jest macierzą tożsamości w Matlab

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

Czy istnieje funkcja jakby isdiag tha robi to bezpośrednio do mnie?

+5

Powinieneś zasadniczo unikać sprawdzania dokładności, chyba że pracujesz z liczbami całkowitymi. Powinieneś prawdopodobnie zrobić coś takiego jak 'isidentity = @ (a, tol) all (abs (a-eye (size (a)))

+0

Brak wbudowanej funkcji. Twoje podejście jest dobre, chyba że przetwarzasz bardzo duże (rzadkie) macierze, w których 'oko (rozmiar (a, 1)) może przekroczyć pamięć. – Daniel

+0

Witaj, jeśli masz wiele pytań nadal otwartych bez zaakceptowanej odpowiedzi. Gdy odpowiedź rozwiąże Twoje pytanie, rozważ [akceptuj to] (http://meta.stackexchange.com/q/5234/179419), klikając znacznik wyboru. Wskazuje to szerszej społeczności, że znalazłeś rozwiązanie. – Daniel

Odpowiedz

0

Jak powiedzieli inni, nie koniecznie chcesz sprawdzić dokładną równość w macierzy tożsamości. Również użycie eye może potencjalnie zająć niepotrzebną ilość pamięci dla wystarczająco dużych macierzy. Polecam użyć diag, aby ominąć to.

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

Pamiętaj, że 'isdiag' prawdopodobnie sprawdza dokładnie diagonalność, więc może nie być całkowicie zgodne z drugą połową twojego stan. –

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

Odejmij od tożsamości i sprawdzić, czy jakieś elementy są większe niż epsilon.