2017-05-26 13 views
2

繪製for循環我在Matlab以下代碼:最好的辦法脫身的在MATLAB

a = linspace(0,1); 
t = linspace(0,10); 
x = cos(2*t); 

for i = 1:10 
    z = a(i) *x 
    plot(z) 
    pause(0.1) 
end 

這僅僅是看怎麼改變變量「a」將改變劇情。這創造了一個動畫劇情。問題是:如果我有一個大的數據集,而且我必須繪製比上面更復雜的東西,那麼結束循環的最佳方法是什麼?換句話說,如果我現在關閉情節圖,它會繼續運行,直到i = 10。「break」聲明會起作用嗎?或者用鍵盤做鍵盤輸入?

感謝您的幫助

回答

3

您可以檢查每個循環中圖形句柄的存在。如果數字關閉(因此數字手柄被刪除),那麼您將自動結束循環。

a = linspace(0,1); 
t = linspace(0,10); 
x = cos(2*t); 

h.fig = figure; 
for i = 1:100 
    z = a(i) *x 
    plot(z) 
    pause(0.1) 
    if ~isvalid(h.fig) 
     break 
    end 
end 
1

你希望用戶能夠結束動畫時,他們感覺?或者您是否希望以編程方式結束動畫,原因是每次迭代都驗證了條件?

如果您只想從代碼內部結束循環(也就是上面的第二個選項),那麼是的,break語句就足夠了。 (您可以在break之前設置一個布爾型標誌,並在循環結束後檢查此標誌,以便您可以根據需要close繪圖。)

現在,如果要讓用戶能夠停止通過點擊一個按鈕或者其他東西,你可以(1)告訴用戶點擊Ctrl + C;或者(2)找到一個更加結構化的解決方案來製作matlab動畫(你可能想要檢查this)。

+0

CTRL +不是一個好的選擇。如果繪圖循環很大(即有很多函數),它很可能會破壞一些基於java的函數並繼續循環b)創建一個java異常並使整個MATLAB崩潰。有時它可以工作,但有時它不起作用 –