MATLAB中带权数的随机排列

MATLAB中带权数的随机排列,matlab,random,markov-chains,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的数字,进行排列,同时添加权重: 一,→ 2, 2 → 向量中的1后面是2,在1/3的情况下,向量中的1后面是2,反之亦然 三,→ 4, 4 → 向量中的1 a 3跟在4后面,在1/3的情况下反之亦然 所有其他可能的过渡,1/3的情

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

比如说:

a = [ 1 2 3 4]
我想得到这样的东西:

1 2 1 3 4 2 1 4 3 4 1 3 4 1 ....
我的目标是创建一个较长的向量,其中包括从1到4的数字,进行排列,同时添加权重:

一,→ 2, 2 → 向量中的1后面是2,在1/3的情况下,向量中的1后面是2,反之亦然

三,→ 4, 4 → 向量中的1 a 3跟在4后面,在1/3的情况下反之亦然

所有其他可能的过渡,1/3的情况


我设法用这些数字排列得到一个较长的向量,但我不知道如何应用这些权重/规则。

使用马尔可夫链的转移矩阵:

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

走在一条直线上?这个问题是非常相关的:对这个问题的描述——所有其他可能的转变——1/3——在数学上是矛盾的。你的意思是:所有其他可能的转换:1/3*2/3=2/9?