程式與科學計算 matlab --...

17
程式與科學計算 Matlab -- Debug

Upload: others

Post on 16-Sep-2019

18 views

Category:

Documents


0 download

TRANSCRIPT

程式與科學計算 Matlab -- Debug

• 程式語言常見的錯誤種類:

– 語法錯誤(例如:a=[1,2,3;4,5] )

– 邏輯錯誤(例如:if ((a>0) & (b<0))… 打成if ((a>0) | (b<0))

– 執行階段錯誤(例如:a=100/b,當b=0時a=Inf)

• 經常活在Matlab程式中的「蟲」:

– 變數名稱大小寫混淆(例如 Count vs count)

– 輸入函數或指令的變數類型錯誤(例如 xlabel(3x2), exp(‘a’))

– 純量變數與陣列變數混淆,或弄錯陣列的大小(或維度)

– 邏輯判斷相等時,誤用= (正確語法應該是 if a==0).

– 在else後面放上邏輯判斷式

工程師通常花10%的時間寫程式,90%的時間抓蟲

一般除錯技巧(Debugging)

• 除錯技巧一:去除每一行程式尾端的分號(;),將執行的結果顯示在指令視窗中。

• 除錯技巧二:在.m程式中加入 keyboard 指令

– 程式執行至此處即暫停,並顯示“k >>”的提示號

– 此時可查看或改變工作空間的各個變數,找出錯誤

– 若要繼續執行程式,在指令視窗下輸入return並按 Enter

• 除錯技巧三:debug函數時,用%把第一列的函數宣告列(function xxx=…)關掉,直接設定輸入變數的值,此時就可以獨立執行這個函數的 M 檔案(即不需要透過主程式呼叫),並保留所有變數於主要工作空間中。

• 除錯技巧四:使用 MATLAB 的除錯器。

Matlab除錯器(Debugger)

• Matlab提供指令式和圖形介面的除錯器(在Editor window有debugger工具列)。

• 這邊我們只介紹圖形介面的除錯功能: – 查詢每一個函數的工作空間(Workspace)

– 顯示函數呼叫過程

– 一列一列地執行 M 檔案(Step-by-step Execution)

Debugger toolbar

除錯的第一步:設立中斷點

• 將游標移到要放置中斷點的那行程式,用滑鼠點取工具列的中斷點按鈕,就會在行編號的右邊出現紅點,代表中斷點 。

• 或者直接用滑鼠在行編號右邊點擊,設定中斷點

• 再點一次紅點就可清除中斷點。

除錯功能:設立中斷點

• 設定中斷點後,按F5程式執行到該處就會暫停,在Editor window程式碼前出現綠色箭號,顯示目前暫停的位置:

• 設定中斷點後,如果修改程式任何地方(包括鍵入或消除空白),中斷點會暫時變為灰色,若未存檔,則設定的中斷點會失效,只有在存檔後,中斷點會恢復成紅色且發揮功能。

• 中斷後可在指令視窗檢視各個變數的值

• 檢視變數或運算式有三個方法 :

– 將滑鼠移到變數附近

– 在指令視窗輸入變數或運算式。

– 選取變數或運算式後,利用滑鼠右鍵點取,並選擇“Evaluate Selection”。

• 選取debugger工具列上的 stack 下拉式選單,可跳到不同的工作空間(主程式、自訂函數)

檢視變數或運算式

逐步執行(step) • 若按下step按鈕(或在指令視窗輸入dbstep指令),則綠色箭號變成向下,程式會往下執行一行後暫停。

• 再按(或於指令列輸入)step數次,可一行一行將整個函數執行完成。

繼續執行(continue)

• 可以設立多個中斷點,如果在某個中斷點暫停,按continue按鈕(或在指令視窗輸入dbcont指令),程式會繼續往下執行到下一個中斷點才暫停。

進入函數執行(step in) • 主程式中若呼叫了內建函數或自訂函數,逐步執行到該行程式時,按下step in按鈕,就會跳入函數的程式碼中,此時就可以繼續用step或continue檢查函數的程式碼

• 若函數內又呼叫了其他函數,可再用step in逐層進入。

退出函數執行(step out)

• 若在函數程式中,想要回到上一層主程式(或函數),可以按step out退出

Debugger工具列按鈕 功能

2010 / 2014

設立或移除中斷點

移除所有中斷點

執行下一行程式碼

繼續執行程式碼

進入函數程式碼

退出函數程式碼

跳出除錯模式

Fortran GrADS Matlab

Program/script .f95 [compilation] .gs .m

Variable (real/integer /string) operation

[declaration] Data variables

Array operation Data array

If 邏輯判斷 (not covered)

Loop 迴圈 Do-loop (not covered) For-loop

Text file I/O X

Binary file I/O

Subroutine/Function (not covered)

Plot map/contour X

Plot line chart X

Mass/parallel computation

X X

學期回顧

下下週期末考 1/09(一)

• 範圍:與Matlab相關的上課、影片與作業內容

• 個人上機考試(3:30PM~5:20PM)建議提早到達準備

• OPEN BOOK (NOTES, INTERNET, HOMEWORK, SOLUTIONS…)

• 使用自己的筆電,請攜帶電源線、網路線 (需要借用筆電請在1/7週六前先預約)

• 考試期間不可與旁人討論或傳遞訊息、檔案 (違規者取消考試資格)

• 佔原始總成績10%

Beyond This Course…

程式與科學運算

(大二上)

Fortran, GrADS, Matlab

大氣熱力學

(大二上)

Fortran, Matlab

大氣輻射

(大二上)

Fortran

數值分析

(大二下)

Matlab

大氣動力

(大三)

Matlab, Fortran

天氣學實習

(大三)

GrADS

氣候學

(大四)

GrADS, Matlab

獨立研究、數值預報、地球系統模式…(高年級/研究所選修)

Frotran, GrADS, Matlab

統計與大氣科學

(大二下)

Matlab

大氣測計學

(大二上)

Fortran, Matlab

希望修完這門課之後你有學會…

使用Fortran, Matlab, GrADS, UNIX的基本能力

(大氣常用數值資料的讀寫運算、繪圖、分析)

寫程式的良好觀念與習慣

看懂其他人撰寫的程式,並且加以運用、修改的能力

實際使用程式語言與科學軟體解決問題的經驗(邏輯分析、自我學習、偵錯、團隊合作)

只會一種程式語言不夠嗎?你可以再學一種!

Codecademy https://www.codecademy.com/

謝謝同學們本學期的參與, 還有助教們的盡心協助

• 期末考後請幫忙填寫另一份針對「翻轉教室」的意見調查,提供往後課程調整改進的參考,造福學弟妹。

• 問卷網址會另外以email通知