如果有输入Matlab则中断循环

时间:2015-05-15 13:40:45

标签: matlab loops

我正在使用fminsearch来找到问题的最佳解决方案,并且由于某些原因与问题无关,我是按部分进行的,重复调用fminsearch。所以,每次调用它时,我都可以访问函数(fval)的值(程序打印fval)。问题是,有时我会看到fval如何增加并偏离最佳状态,在这种情况下我想制作并输入并告诉程序转到下一个案例(休息)。

我不能包括,如果那个状态如果fval增加则转到下一个案例,因为有时它会增加并结束收敛到最优解。而且我无法提出并输入询问我是否想要在每次迭代中继续,这个过程将会很长并且我必须整天都在电脑前

想法? 感谢

1 个答案:

答案 0 :(得分:2)

这个想法是使用一些GUI元素(比如按钮),因为它们的动作可以异步中断当前运行的代码。

为了说明我的意思,这里有一些代码应该复制到名为main_loop.m的文件中,然后运行:

%// Main function

function main_loop()

        %// Create pushbutton user interface
        h_btn = uicontrol(          ...
           'Style', 'pushbutton',   ...
           'String', 'Go Next',     ...
           'Parent', figure(),      ...
           'Callback', @cb_function ...
        );

        %// Create flag in button application data, with value
        %//   = false: continue looping;
        %//   = true:  break the current loop.
        setappdata(h_btn, 'flag', false);

        %// Loop simulation
        for k = 1:10
                for p = 1:10000
                        %// Simulation of calculation
                        pause(0.1);
                        disp([k,p]);

                        %// If button hit, reset flag and break
                        if getappdata(h_btn, 'flag')
                                setappdata(h_btn, 'flag', false);
                                break;
                        end;
                end;
        end;
end


%// Button callback

function  cb_function(h_btn, ~)

        %// Set flag to request a loop break
        setappdata(h_btn, 'flag', true);
end

基本上,在按钮的应用程序数据中创建一个标志:按钮的动作将设置标志,而主循环检查此标志以决定是继续还是中断。请注意,在打破内循环之前,标志会被重置。

请阅读评论,以确定插入代码的位置;另外,根据您的喜好更改循环(例如while而不是for,乘法嵌套循环等。)