用权重在MATLAB中随机排列数字

时间:2015-02-13 13:05:54

标签: matlab random markov-chains

如何随机化一个向量a中的数字,权重分配的方式是我可以控制哪些数字“跟随”其他数字?

让我们说:

a = [ 1 2 3 4]

我想获得这样的东西:

1 2 1 3 4 2 1 4 3 4 1 3 4 1 ....

我的目标是创建一个更长的向量(包括1到4之间的这些数字,置换),同时增加权重:

  • 1→2,2→1(在矢量中1跟随1,反之亦然)1/3的案例

  • 3→4,4→1(在矢量中为4后3,反之亦然)在1/3的情况下

  • 所有其他可能的过渡,1/3的案例

我设法获得了一个更长的向量,这些数字是置换的,但我不知道如何应用这些权重/规则。

1 个答案:

答案 0 :(得分:0)

使用马尔可夫链的这个转换矩阵:

M = 1/9*[2, 3, 2, 2; ...
         3, 2, 2, 2; ...
         2, 2, 2, 3; ...
         3, 2, 2, 2];

使用以下算法:

function realizations = realizeMarkovChain(M, start, numSteps)
%// Generates realization of Markov chain given by transition matrix M.
%// The probabilities of going from state i to a different state are given
%// by the rows M(i,:) of the transition matrix
currentPosition = start;
cdf = cumsum(M,2);
realizations = zeros(1, numSteps);

for i = 1:numSteps
   currentPosition = find(rand < cdf(currentPosition,:), 1, 'first');
   realizations(i) = currentPosition;
end