How to terminate for-loop and use current loop value if warning message appears?
1 view (last 30 days)
Show older comments
Sebastian Groß
on 28 Feb 2020
Answered: Sebastian Groß
on 28 Feb 2020
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 Comments
dpb
on 28 Feb 2020
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.
Accepted Answer
More Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!