How to terminate for-loop and use current loop value if warning message appears?

1 次查看(过去 30 天)
Hi everyone,
I am encountering a problem while using the fitgmdist function. In case an "error" appears, I want to pass on the for-loop to the next seed_start value, but if it is merely a "warning" and thus the code could be executed and actually fit the Gaussian, then I want to use the current seed_start value and terminate the for-loop.
Unfortunately, if Matlab encounters a warning message, then it treats it the same as an error and passes it on to the next seed_start value.
I have tried turning off warnings but I cannot solve it this way (not displayed in code below).
Is there any way I can terminate the loop in the catch statement?
Thank you!
AIC=zeros(1,5); %test for Gaussian mixture distributions from 1 to 5 components (components correspond to speakers)
gm=cell(1,5);
options = statset('MaxIter',10000);
for seed_start=1:101 %if a GMM doesn't succeed because of an ill-conditioned covariance
% created at a certain iteration, then use another seed value for the fitgmdist function to act on
if seed_start==1
try
rng 'default' %for reproducibility
for k=1:5
gm{k}=fitgmdist(X,k,'Options',options,'CovarianceType','diagonal');
AIC(k)=gm{k}.AIC;
end
catch
end
else
try
rng(seed_start-1) %use other initial values
for k=1:5
gm{k}=fitgmdist(X,k,'Options',options,'CovarianceType','diagonal');
AIC(k)=gm{k}.AIC;
end
catch
end
end
end
  3 个评论
dpb
dpb 2020-2-28
Read up on exception handling in Matlab. Add
catch ME
to the above code and then inspect the exception object inside the catch clause. You can do whatever you wish within it before either terminating or taking some fixup and rethrowing the error.
Sebastian Groß
Sebastian Groß 2020-2-28
Indeed it was the missing break command at the end of the try block which solved the issue. Now warnings are ignored and end the for-loop and errors pass on to the next for-loop value!
Thank you so much!

请先登录,再进行评论。

采纳的回答

Sebastian Groß
Sebastian Groß 2020-2-28
Inserting break at the end of try block finishes the job. Thanks!

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by