2016-02-28 43 views
6

Ho bisogno di verificare se una matrice è una matrice di identità. So che c'è una funzione che controlla se una matrice è una matrice diagonale, ovvero, isdiag. So di poter effettuare le seguenti operazioni per verificare se una matrice a è una matrice di identità:Verificare se una matrice è una matrice di identità in Matlab

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

C'è una funzione come isdiag tha lo fa direttamente per me?

+5

In genere, si dovrebbe evitare di verificare l'esattezza, a meno che non si stia lavorando con numeri interi. Probabilmente dovresti fare qualcosa come "isidentity = @ (a, tol) all (abs (a-eye (size (a)))

+0

Nessuna funzione incorporata. Il tuo approccio è buono a meno che non elabori matrici molto grandi (sparse) dove 'eye (size (a, 1))' può superare la memoria. – Daniel

+0

Ciao @nbro hai ancora molte delle tue domande aperte senza una risposta accettata. Quando una risposta ha risolto la tua domanda, ti preghiamo di prendere [accettandolo] (http://meta.stackexchange.com/q/5234/179419) facendo clic sul segno di spunta. Questo indica alla comunità più ampia che hai trovato una soluzione. – Daniel

risposta

0

Come altri hanno già detto, non è necessario controllare l'uguaglianza esatta con la matrice identità. Anche l'utilizzo di può potenzialmente richiedere una quantità di memoria non necessaria per matrici sufficientemente grandi. Consiglierei di usare diag per aggirare il problema.

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

Nota che 'isdiag' probabilmente controlla la diagonalità esatta, quindi potrebbe non essere del tutto coerente con la seconda metà del tuo condizione. –

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

Sottrarre per identità e verificare se tutti gli elementi sono superiori Epsilon.