2014-06-23 14 views
8

Sto eseguendo alcuni lavori di elaborazione dati in MATLAB e il solver usa l'operatore BACKSLASH. A volte, ricevo avvertenze del tipo:Matlab: Come catturare l'avviso

Warning: Rank deficient, rank = 1390, tol = 1.335195e-010. 
Warning: Rank deficient, rank = 1386, tol = 1.333217e-010. 

Vorrei ricevere quelle avvertenze. Sto cercando di convertire avvertimento per errore e poi prendere come descritto qui sotto titolo “avvertimenti di cattura”: http://undocumentedmatlab.com/blog/trapping-warnings-efficiently Nell'esempio seguente stringa è stato utilizzato per convertire avvertimento all'errore:

s = warning('error', 'MATLAB:DELETE:Permission'); 

Tuttavia, Non sono sicuro di quale stringa utilizzare per il mio caso. Ho provato a utilizzare

s = warning('error', 'Warning: Rank deficient’); 

Ma, non ha funzionato. Qualsiasi aiuto sarebbe apprezzato.

saluti, DK

risposta

8

è necessario specificare l'avviso identificatore, non il testo di avviso. È possibile trovare l'identificatore utilizzando il modulo a due output del lastwarn:

[msgstr, msgid] = lastwarn 

Nel tuo caso, io credo l'identificatore che si desidera è 'MATLAB:rankDeficientMatrix'.

+0

Grazie. ha funzionato. Ma, potresti per favore spiegare anche come posso estrarre l'identificatore in base all'avviso visualizzato ?? –

+1

Questo è ciò che fa la chiamata 'lastwarn' a due uscite. Puoi usare 'dbstop se warning' se hai problemi ad arrivare a uno stato in cui l'avviso che ti interessa è quello" ultimo ". – Edric

+0

Grazie, ha funzionato perfettamente –

5

Si potrebbe provare a utilizzare lastwarn come alternativa. Dopo la divisione, chiamalo e confrontalo con lo strcmp con il solito messaggio di avviso e, se è quello che desideri, puoi lanciare manualmente l'errore desiderato con error.

come lei ha suggerito: è possibile reimpostare lastwarn lanciando un avvertimento vuoto warning('')

+0

Grazie per la risposta. Stavo pensando la stessa cosa. Tuttavia, avrei bisogno di resettare lastwarn in quanto lo stesso solutore viene eseguito più volte. Puoi per favore suggerire come resettare l'ultimo? –

+0

@DushyantKumar Provalo e se i lavori accettano la risposta, la community avrà una prova scritta per risolvere questo problema :) –

+1

Grazie, @AnderBiguri. Voglio solo aggiungere che l'ultimo riavvio può essere resettato con: warning ('') –