2014-06-23 11 views
8

Mam uruchomione niektóre prace przetwarzania danych w MATLAB i solver używa operatora BACKSLASH. Czasami otrzymuję ostrzeżenie w następujący sposób:Matlab: Jak złapać ostrzeżenie

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

Chciałbym złapać te ostrzeżenia. Próbuję przekonwertować ostrzeżenie o błędzie, a następnie złapać go jak opisano tutaj pod tytułem „ostrzeżeń Odłowu”: http://undocumentedmatlab.com/blog/trapping-warnings-efficiently W tym przykładzie następujący ciąg został użyty do konwersji ostrzeżenie błędu:

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

jednak Nie jestem pewien jakiego ciągu użyć w mojej sprawie. Próbowałem użyć

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

Ale to nie zadziałało. Każda pomoc będzie doceniona.

Pozdrawiam, DK

Odpowiedz

8

musisz podać identyfikator ostrzeżenie , a nie tekst ostrzegawczy. Można znaleźć identyfikator za pomocą formularza dwa wyjścia z lastwarn:

[msgstr, msgid] = lastwarn 

W twoim przypadku, myślę identyfikator chcesz to 'MATLAB:rankDeficientMatrix'.

+0

Dzięki. zadziałało. Ale czy mógłbyś również wyjaśnić, w jaki sposób mogę wydobyć identyfikator na podstawie wyświetlonego ostrzeżenia? –

+1

To właśnie wywołuje dwuprocesorowe wywołanie 'lastwarn'. Możesz użyć 'dbstop if warning', jeśli masz problemy z dostaniem się do stanu, w którym ostrzeżenie, które cię interesuje, jest" ostatnie ". – Edric

+0

Dzięki, działało idealnie –

5

Można spróbować użyć lastwarn jako alternatywę. Po podziale zadzwoń i porównaj go z strcmp na zwykły komunikat ostrzegawczy, a jeśli jest to ten, którego używasz, możesz ręcznie rzucić błąd, który chcesz z error.

Jak sugeruje: można przywrócić lastwarn rzucanie pustym ostrzeżenie warning('')

+0

Dzięki za odpowiedź. Myślałem tak samo. Jednak musiałbym zresetować lastwarn, ponieważ ten sam solver jest uruchamiany wiele razy. Czy możesz zasugerować, jak zresetować lastwarn ?? –

+0

@DushyantKumar Wypróbuj i jeśli dzieła zaakceptują odpowiedź, społeczność będzie miała pisemny dowód na rozwiązanie tego problemu :) –

+1

Dzięki, @AnderBiguri. Chcę tylko dodać, że ostatni ostrzeżenie można zresetować za pomocą: warning ('') –