標籤:

MATLAB手動跳出循環的技巧

以遺傳演算法優化為例:遺傳演算法的遺傳代數(中止條件還有其他, 這裡為簡化問題,假設就只有這一種)很難設定,設太大的話,花費時間過長,設太小的話,擬合效果可能又不理想。於是希望根據觀察優化效果,來手動跳出循環,停止優化。

最容易想到的失敗方法是:MATLAB停止程序快捷鍵「Ctrl+C」,還有暫停按鈕(比較新的版本的話)。

這兩種方法都能使程序停了下來, 但是都有一個明顯的缺點:雖然停止了循環, 但是無法繼續執行循環後面的操作, 比如輸出優化結果。

當然, 你可以做一個GUI界面,通過按鈕來操作, 但是這好像有些小題大做了。

這裡分享一個我剛學到的簡單操作方法。核心語句是「get(gcf,CurrentCharacter)」, 意思是返回圖形界面的當前字元。

先上示例代碼:

figure;nwhile 1 %遺傳演算法的大循環部分n % 遺傳演算法優化n n % 更新圖形, 用於查看優化效果n n % 點擊圖形界面, 然後點擊任意一個字母按鍵n pause(0.0001); %必須要有這個, 要不然程序可能無法得到你的鍵盤輸入n if isletter(get(gcf,CurrentCharacter))n break;n endnendnn% 繼續做其他事ndisp(繼續做了其他事);n

運行後, 出現了圖形界面, 顯示的是優化效果(上面是簡化的代碼, 並沒有顯示優化效果, 自己腦補一下吧, 哈哈),當優化效果達到你預期的效果時(或者是你沒有耐心等待下去了), 滑鼠選中那個圖形界面, 然後點擊任意一個字母按鍵, 命令窗口顯示:

繼續做了其他事n

說明程序跳出了循環, 並且繼續執行後續操作。


推薦閱讀:

Matlab計算逆序數出現問題?
漫談Simulink: 隱式和顯式的Solver
電動汽車基於模型設計的實現思路是怎樣的?
把大圖裡面的漢字分割成每一個小圖?
MATLAB編輯器如何自動給代碼操作符前後加空格?

TAG:MATLAB |