2014-02-23 105 views
0

以下是我的完整代碼:(其中大部分對我所問的內容沒有用,但我只是將整個代碼放在上下文中,是導致我麻煩的代碼的一部分是朝向端)如何跳過循環內部的錯誤並讓循環繼續

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 

上述迴路的最重要的部分是朝向端:

x = x(:,sum(x <= 0,1) == 0) 

該條件有時不滿足並因此可變x爲空,表示LM_FINAL(:,k) = lamda也爲空。發生這種情況時,我得到的錯誤:

x = 

    Empty matrix: 43-by-0 

    Improper assignment with rectangular empty matrix. 

    Error in Solution (line 75) 
    LM_FINAL(:,k) = lamda; 

我怎麼能跳過這個錯誤,以便爲LM_FINAL列仍然是空的,但是循環繼續(讓LM_FINAL的列的其餘部分被填充),而比終止?

+1

爲什麼不簡單的if/else來處理條件不滿足的特殊情況? –

回答

1

您可以使用try and catch短語來顯式處理循環內部(或代碼中其他地方)的錯誤。