2016-04-14 194 views
3

當有太多的m文件有這麼多的計算時,跟蹤爲什麼這個和那個出錯是一個很大的任務。每當除數爲0或出現Inf值時停止或暫停運行MatLab

通常情況下,只是在代碼中的某個地方除以0,或者爲某些變量保存了Inf的值。

我想讓這個容易檢查。一種方法是寫

if a == Inf 
    display('a is infinite') 
    keyboard 
end 

如果我添加這樣的事情,每次每一個變量,它會工作,但它會是混亂。

如果在運行過​​程中某個變量是Inf,我可以讓MatLab停止或暫停或彈出警告消息嗎?

回答

6

對於許多運行條件,Matlab有很好的debugging suite。 特別地,命令

dbstop if naninf 

一個NaNInf條件被發現之後,將暫停執行的線。一個例子是on the documentation。使用此功能的唯一潛在缺點是,如果任何變量被初始化爲NaNInf,則會出現暫停,這些代碼會執行某些代碼(令我困惑)。

dbstop確實有一個更具針對性和潛在可靠的暫停執行系統,但我認爲naninf選項與良好的測試相結合是一個很好的開始進行總體開發的地方。


相同的行爲可以從GUI通過將斷點>更多錯誤和警告處理選項> NaN或Inf文件和選擇正確的單選按鈕來調用。

+0

非常感謝!但是,在我目前的項目中,NaN非常正常,而Inf確實是錯誤的。如何在Inf發生時停止或暫停,但NaN發生時不停止或暫停? – user42459

+0

如果有一些MatLab內置的m文件使得「dbstop if naninf」有效,那麼可能我可以編輯m文件以使其僅停止Inf。這可能嗎? – user42459

+0

@ user42459對於更多精確控制,我會[看這裏](http://stackoverflow.com/questions/20996074/customize-dbstop-in-matlab)作爲起點,您可能需要做更多的工作。 'NaN'和'Inf​​'s在IEEE算術中都是例外,因此Matlab將它們視爲默認錯誤處理選項。不幸的是,一些編碼人員最終明確使用'NaN',而他們應該只能通過計算生成。 – TroyHaskin