LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
det_sample.m
1function [SAMPLES,LAST,FIRST]=det_sample(DET,nSamples,initState,seed)
2
3if nargin<3
4% pi=map_piq(DET); % time stationary initialization
5 pi=map_pie(DET); % interval stationary initialization
6 x=cumsum(pi);
7 r=rand();
8 initState=min(find(r<=x));
9elseif length(initState)>1
10 pi=initState;
11 x=cumsum(pi);
12 r=rand();
13 initState=min(find(r<=x));
14end
15RUNS=floor(nSamples/10000);
16LS=[initState];
17SAMPLES=[];
18LAST=[];
19FIRST=[];
20for i=1:RUNS
21 [S,L,F]=sub_map_sample(DET,10000,LS);
22 SAMPLES(end+1:end+length(S),1)=S(:);
23 LAST(end+1:end+length(L),1)=L(:);
24 FIRST(end+1:end+length(L),1)=F(:);
25end
26[S,L,F]=sub_map_sample(DET,mod(nSamples,10000),LS);
27SAMPLES(end+1:end+length(S),1)=S(:);
28LAST(end+1:end+length(L),1)=L(:);
29FIRST(end+1:end+length(L),1)=F(:);
30end
31
32function [SAMPLES,LAST,FIRST]=sub_map_sample(DET,nSamples,initState)
33LAST=[];
34nStates=length(DET{1});
35for b=0:1
36 for i=1:nStates
37 for j=1:nStates
38 p(i,b*nStates+j)=DET{b+1}(i,j)/abs(DET{1}(i,i));
39 end
40 end
41end
42for i=1:nStates
43 p(i,i)=0;
44end
45cdf=0*p;
46for i=1:nStates
47 cdf(i,:)=cumsum(p(i,:));
48end
49cdf=abs(cdf);
50curState=initState;
51visits=zeros(nSamples,20);
52maxpathlen=size(visits,2);
53for i=1:nSamples
54 arrival=0;
55 last=2;
56 visits(i,1)=curState;
57 while ~arrival
58 destState=find(cdf(curState,:)>=rand,1,'first');
59 if destState>nStates
60 arrival=1;
61 destState=destState-nStates;
62 curState=destState;
63 else
64 visits(i,last)=destState;
65 curState=destState;
66 last=last+1;
67 end
68 if last>maxpathlen
69 maxpathlen=maxpathlen+5;
70 visits(:,end+5)=0;
71 end
72 end
73end
74holdTimes=-1./diag(DET{1});
75H=visits;
76for i=1:nSamples
77 LAST(i,1)=visits(i,max(find(visits(i,:))));
78end
79for i=1:nStates
80 H(find(visits==i))=holdTimes(i);
81end
82
83SAMPLES=0*H(:,1);
84for i=1:size(H,2)
85 SAMPLES=SAMPLES+(H(:,i));
86end
87FIRST=visits(:,1);
88
89end
90