The following is my full code: (The part of the code that is causing me trouble is towards the end)
clc; clear; P = xlsread('b3.xlsx', 'P'); d = xlsread('b3.xlsx', 'd'); CM = xlsread('b3.xlsx', 'Cov'); Original_PD = P; %Store original PD
LM_rows = size(P,1)+1; %Expected LM rows
LM_columns = size(P,2); %Expected LM columns
LM_FINAL = zeros(LM_rows,LM_columns); %Dimensions of LM_FINAL
% Start of the outside loop
for k = 1:size(P,2) P = Original_PD(:,k); interval = cell(size(P,1)+2,1); for i = 1:size(P,1) interval{i,1} = NaN(size(P,1),2); interval{i,1}(:,1) = -Inf; interval{i,1}(:,2) = d; interval{i,1}(i,1) = d(i,1); interval{i,1}(i,2) = Inf; end interval{i+1,1} = [-Inf*ones(size(P,1),1) d]; interval{i+2,1} = [d Inf*ones(size(P,1),1)]; c = NaN(size(interval,1),1); for i = 1:size(c,1) c(i,1) = mvncdf(interval{i,1}(:,1),interval{i,1}(:,2),0,CM); end c0 = c(size(P,1)+1,1); f = c(size(P,1)+2,1); c = c(1:size(P,1),:); b0 = exp(1); b = exp(1)*P; syms x; eqn = f*x; for i = 1:size(P,1) eqn = eqn*(c0/c(i,1)*x + (b(i,1)-b0)/c(i,1)); end eqn = c0*x^(size(P,1)+1) + eqn - b0*x^size(P,1); x0 = solve(eqn); for i = 1:size(x0) id(i,1) = isreal(x0(i,1)); end x0 = x0(id,:); x0 = x0(x0 > 0,:); clear x; for i = 1:size(P,1) x(i,:) = (b(i,1) - b0)./(c(i,1)*x0) + c0/c(i,1); end x = [x0'; x]; x = double(x); x = x(:,sum(x <= 0,1) == 0) lamda = -log(x); LM_FINAL(:,k) = lamda; end % end of the outside loop
The important part of the above loop is towards the end:
x = x(:,sum(x <= 0,1) == 0)
This condition is sometimes not satisfied and hence the variable x is empty, which means LM_FINAL(:,k) = lamda is also empty. When this happens, I get the error:
x = Empty matrix: 43-by-0 Improper assignment with rectangular empty matrix. Error in Solution (line 75) LM_FINAL(:,k) = lamda;
How can I skip this error so that the column for LM_FINAL remains as empty, but the loop continues (so that the rest of LM_FINAL's columns are filled) rather than terminating?
Best Answer