1. 程式人生 > >MATLAB(1)——基本除錯方法(Debug)

MATLAB(1)——基本除錯方法(Debug)

之前經常用MATLAB,卻不小心停留在了舒適區,連基本的除錯方法都沒有掌握。本文主要是對MATLAB程式除錯中的一般方法進行總結,也是自己學習的記錄。全文大致分為三個段落:

  1)程式碼內除錯;

  2)斷點除錯方法;

  3)指令除錯方法;

本文主要為個人學習總結,並借鑑了前人的經驗,相應連結在最後一併附上。

一、程式碼內除錯

  A-列印變數

1 2 3 z=hilbert(testdata');                   % 希爾伯特變換
a=abs(z)                                    % 包絡線 fnor=instfreq(z);                       % 瞬時頻率

  上面的程式碼,如果希望檢查a是否正常:去掉末尾的分號;,即可在Command Window檢視到對應的輸出資訊,特別是當變量出現在function時,如果不輸出,則在Workspace中無法直接檢視,此時該操作較方便。

  B-區域性執行

1 2 3 z=hilbert(testdata');                   
% 希爾伯特變換 a=abs(z);                               % 包絡線 fnor=instfreq(z);                       % 瞬時頻率

  如果希望對某一部分程式碼,進行除錯,則完全沒有必要每次都從頭執行,這時區域性執行較方便。仍是這段程式碼,如果希望僅僅執行高亮部分,則箭頭選中並按F9,此時程式僅僅執行高亮部分,可利用這個方法除錯區域性程式碼。

  C-配合繪圖(該操作可以配合以下各類方法使用)

  圖形比資料更易於觀察,在除錯過程中開啟Workspace中的變數(快捷鍵:Crtl + D),然後選擇plot,即可根據需求對資料進行繪圖,便於觀察特性:

例如選擇需要觀察的資料,分別選擇bar以及surf指令,即可繪製對應圖形:

是不是也算方便?

二、斷點除錯方法

除錯程式碼最經典的就是利用設定斷點的方法,此處給出對應快捷鍵:

  • F12:設定/取消 斷點
  • F10:單步執行
  • F11:單步執行,且碰到function跳入函式內執行,F10則不會跳入,這是二者的明顯區別
  • Shift + F11:跳入function之後,通過該指令推出function
  • F5:執行相鄰兩次斷點見的所有指令,如:斷點在for迴圈中,則F5一次,迴圈執行一次
  • Shift + F5:退出斷點除錯

三、指令除錯方法

  A-keyboard +(return)

  經常碰到一些情況,如:矩陣相乘A*B時(假設A已知,B需要運算得出),矩陣B的size難以確定,是用A*B還是A'*B難以確定,可不可以先計算B,運算完之後觀察B的特性,再確定用A還是A‘?keyboard可以解決這個問題。

  keyboard顧名思義,就是鍵盤的意思,即:把控制權交給鍵盤。執行程式的過程中,把控制權交給鍵盤,如何再重新返回程式呢?因此:

keyboard 與 return

通常聯合使用。如執行:

1 max_eig = maxeig(G'*pinv(F)*G) );  %此處難以確定,還是max_eig = max( eig(G*pinv(F)*G') )
1 P_tmp = real(m+1 - max_eig);

  但難以確定G還是G’,利用keyboard則可以修改為:

1 2 3 keyboard P_tmp = real(m+1 - max_eig);

  在進入K>> 之後,此時已經可以觀察F、G的size,因此在Command Windows輸入:

1 2