How to solve the Warning message "Warning: Iteration limit exceeded. Returning results from final iteration. ". How can I fix this problem?

21 views (last 30 days)
"Warning: Iteration limit exceeded. Returning results from final iteration. "
I've a 4D array 'terminal' of which
X=[x11,x12,x13,x14,x15,x16,x17,x18,x21,x22,x23,x24,x25,x26,x27,x28]; % contain 16*16 matrix
tic
% Data RECALL from Saving
rec = load('A_4th_spac_250files.mat');
terminal=rec.terminal;
[d1,d2,d3,d4]=size(terminal); % size of 4D array
mat=terminal;
coefficients=zeros(d3,d4);
% hw = waitbar(0,'Running...'); % Waitbar
% for qq = 1:d3
for i= 1:d3 %% Frequency
for j=1:d4 %% Cycle
Y = reshape(mat(1:16, :, i, j).', 1, []);
% Sorting the values
sorted = (sortrows([X',Y'], 1))';
x = sorted(1,:); y = sorted(2,:);
modelfun = @(k,x) besselj(0,k.*x);
k0 = 1; % Initial condition Bessel First
% Fit the model
mdl = fitnlm(x',y',modelfun,k0);
coefficients(i,j) = mdl.Coefficients{:, 'Estimate'}; % To find the Co-efficients for every frequency every 10s data stretch
xq = (0:0.01:20)'; yq = predict(mdl,xq);
end
end
for every d3 & d4 points, I want to find the Bessel coefficients of d1,d2. For this reason, I've used the matlab scripts attached herewith. For this warning, I got wrong results
Can anybody help me to fix the Matlab Warning ? Your support is appretiated. Thanks.
  2 Comments
Jan
Jan on 18 May 2021
This piece of code is ugly and confusing:
y11=mat(1,:,i,j);y12=mat(2,:,i,j); y13=mat(3,:,i,j); y14=mat(4,:,i,j); y15=mat(5,:,i,j); y16=mat(6,:,i,j); y17=mat(7,:,i,j); y18=mat(8,:,i,j);
y21=mat(9,:,i,j);y22=mat(10,:,i,j);y23=mat(11,:,i,j);y24=mat(12,:,i,j);y25=mat(13,:,i,j);y26=mat(14,:,i,j);y27=mat(15,:,i,j);y28=mat(16,:,i,j);
Y = [y11,y12,y13,y14,y15,y16,y17,y18,y21,y22,y23,y24,y25,y26,y27,y28];
Nicer and faster:
Y = reshape(mat(1:16, :, i, j).', 1, []);
SA
SA on 18 May 2021
Edited: SA on 18 May 2021
@Jan, Thank you very much. I've edited/replaced the codes above. Any suggestion to remove the warnings.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 18 May 2021
opt = statset('MaxFunEvals', 1e5, 'MaxIter', 1e5);
mdl = fitnlm(x',y',modelfun,k0, 'options', opt);
This is one of the few routines that needs the options passed in as a name/value pair instead of as a positional parameter.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!