1 % Generate sample sequences from the model given.
\r
2 function sequences = generate_sequences(model, num_sequences, sequence_length)
\r
4 for i=1:num_sequences
\r
5 sequences(i).obs = generate_sequence_from_model(model, sequence_length);
\r
8 function sequence = generate_sequence_from_model(model, sequence_length)
\r
10 % Figure out which MC we want to use
\r
11 which_mc = get_random_index(model.priors');
\r
12 sequence = generate_sequence_from_mc(model.chain(which_mc), sequence_length);
\r
14 function sequence = generate_sequence_from_mc(mc, sequence_length)
\r
16 sequence = zeros(1, sequence_length);
\r
18 % First generate the initial state
\r
19 sequence(1) = get_random_index(mc.t');
\r
20 % Now generate the next states based on the transition matrices
\r
21 for i=2:sequence_length
\r
22 sequence(i) = get_random_index(mc.T(sequence(i-1), :));
\r
25 % Returns a random index, assuming that the passed in vector is a 1 x n
\r
26 % vector whose contents sum to 1.
\r
27 function index = get_random_index(dist)
\r
28 assert(abs(sum(dist) - 1) < 0.001);
\r
29 sequence_rand = rand(1);
\r
32 for i=1:size(dist, 2)
\r
33 current_max = current_min + dist(i);
\r
34 if (sequence_rand >= current_min & sequence_rand < current_max)
\r
38 current_min = current_max;
\r
40 assert(index > 0 & index <= size(dist, 2))
\r