
754
|
第十九章
19.6 使用 EvaluationMonitor 及 StepMonitor 選
項對內建指令進行除錯
問題點
你 正 在 使 用 Mathematica 內 建 指 令 進 行 數 值 演 算 法, 如
FindRoot
、
NDSolve
與
NIntegrate
等,但這些有如黑箱作業的指令經常輸出奇怪的運算結果,你想深入了解究
竟內部運作出了什麼問題。
解決方案
關 於
FindRoot
指 令( 預 設 以 牛 頓 法 求 解 方 程 式 ) 有 一 個 常 見 的 問 題, 即 求 解 過 程
可 能 會 掉 入 無 窮 迴 圈, 若 不 了 解 這 一 點, 便 會 看 不 懂 產 生 的 錯 誤 訊 息。 以 下 使 用
Quiet
指令禁止錯誤訊息的產生,我刻意設計一個問題方程式。
FindRoot
指令提供了
EvaluationMonito
r 選項, 用來取出每次呼叫函 數進行迭代的資訊,以下使 用
Reap
與
Sow
指令擷取迭代過程以作除錯分析。注意使用
EvaluationMonitor
選項時,必須使用
RuleDelayed
(
:>
)方式設定而不能用
Rule
(
->
)。
討論說明
有時
StepMonitor
選項對除錯也很有幫助,相較於
EvaluationMonitor
選項在每次呼叫
函數時均執行,
StepMonitor
選項只在往解答方向迭代時才執行,Stephen Wolfram 將它
們之間的差異解釋得最好:
ch19.indd 754 2014/4/2 下午 05:10:42