2014-01-08 196 views
0

我正在嘗試做一個時間序列蒙特卡洛模擬的可靠性分析。 我的系統的故障率/年λ是一個常數,所以我使用exprnd(1 /λ)生成指數分佈的隨機數來計算可能的未來故障時間(年)。蒙特卡洛仿真週期爲30年,實驗數量將由用戶定義-k。每次迭代的結果將存儲在矩陣中,每列將是我係統30年生命週期中的失敗次數。問題是我不知道確切的迭代次數在同時進行一個30年期間loop.The代碼將類似於以下matlab中的蒙特卡洛模擬

MTTF=0.6;   % enter mean time to failure 1/λ 
A=zeros(300,1); %preallocate a large enough vector 
t=0; 
n=1; 
while t<30  %time is less than 30 years of simulation 
    hup=exprnd(MTTF);%generate random failure time 
    t=t+hup; 
    A(n)=t; 
    n=n+1; 

end 

回答

1

您可能需要使用一個單元陣列,用於存儲你的結果:

MTTF=0.6;   % enter mean time to failure 1/λ 
nExperiments = 10;% enter # of experiments 

results = cell(nExperiments,1); 

for iExperiment = 1:nExperiments 
A=zeros(30000,1); %preallocate a large enough vector 
t=0; 
n=1; 
while t<30  %time is less than 30 years of simulation 
    hup=exprnd(MTTF);%generate random failure time 
    t=t+hup; 
    A(n)=t; 
    n=n+1; 

end 

results{iExperiment} = A(1:n-1); 
end % loop experiments 

% calculate number of failures in each experiment 
nFailures = cellfun(@numel,results); 
+0

thanx Jonas !!有沒有一種簡單的方法來找到每年的失敗(1-30) – user3172906

+0

@ user3172906'figure,hist(cat(1,results {:}),30)' – Jonas

+0

是否有一個函數將每年的失敗次數(直方圖的y軸)存儲在一個數組中。我試過bincounts = histc(cat(1,results {:},30),但沒有成功 – user3172906