2011-06-23 73 views
2

我在MATLAB的功能像這樣的東西:Matlab的:中止函數調用STRG + C,但保持返回值

function [ out ] = myFunc(arg1, arg2) 
    times = []; 
    for i = 1:arg1 
     tic 
     % do some long calculations 
     times = [times; toc]; 
    end 

    % Return 
    out = times; 
end 

我想現在中止正在執行的功能,但保持的times其值是目前已經採取。怎麼做?當我按下strg + c時,我只是放鬆它,因爲它只是一個本地函數變量,當函數離開示波器時它將被刪除... 謝謝!

回答

1

最簡單的解決方案是將其從函數轉換爲腳本,其中時間不再是局部變量。

更優雅的解決方案是將循環中的時間變量保存爲.mat文件。根據每次迭代的時間,你可以在每個循環或每10個循環中執行一次,等等。

+0

好的,謝謝你。事情是:這也是上述24小時運行,我想現在放棄它,但保持值...有沒有辦法? – tim

+0

我想不出一個 - 我很抱歉。還有一件事 - 如果你輸入「dbstop if error」,那麼按Control-C就可以讓你查看內部值。下次我想。 –

+0

阿格該死的:(但是,好吧,感謝這個tipp我會考慮這一點,但可能只是重寫我的算法一點,以保存所有變量到墊文件。 – tim

0

onCleanup在CTRL-C的存在下,函數仍然激活,但是我不認爲這真的會對你有幫助因爲它將很難將你想要的值連接到onCleanup函數句柄(這裏有一些棘手的變量生存期問題)。使用MATLAB句柄對象追蹤你的價值可能會有更多的運氣。例如

x = containers.Map(); x('Value') = []; 
myFcn(x); % updates x('Value') 
% CTRL-C 
x('Value') % contains latest value 
1

你不能使用persistent變量來解決你的問題,例如

function [ out ] = myFunc(arg1, arg2) 
    persistent times 
    if nargin == 0 
     out = times; 
     return; 
    end; 
    times = []; 
    for i = 1:arg1 
     tic 
     % do some long calculations 
     times = [times; toc]; 
    end 

    % Return 
    out = times; 
end 

我不確定在Ctrl-C上是否清除了持久變量,但我不認爲應該如此。這應該做什麼:如果你提供參數,它會像以前一樣運行。但是,如果省略所有參數,則應返回最後一次的時間值。

0

另一種可能的解決方案是使用assignin函數在每次迭代中將數據發送到您的工作區。例如

function [ out ] = myFunc(arg1, arg2) 
    times = []; 
    for i = 1:arg1 
     tic 
     % do some long calculations 
     times = [times; toc]; 
     % copy the variable to the base workspace 
     assignin('base', 'thelasttimes', times) 
    end 

    % Return 
    out = times; 
end