Matlab 如何求马尔可夫链(FSMC)的有限状态转移概率矩阵

Matlab 如何求马尔可夫链(FSMC)的有限状态转移概率矩阵,matlab,markov-chains,Matlab,Markov Chains,我有一个通道测量值>20000,它必须被划分为离散的级别,就像我的例子K=8,它必须映射到具有状态的通道测量值。我必须在Matlab中找到状态转移概率矩阵 我的问题是,我需要知道如何将这些值划分为8个状态,并在Matlab中找到这8个状态的状态转移概率矩阵 下面是一个虚构的例子: %# some random vector (load your data here instead) x = randn(1000,1); %# discretization/quantization into 8

我有一个通道测量值>20000,它必须被划分为离散的级别,就像我的例子K=8,它必须映射到具有状态的通道测量值。我必须在Matlab中找到状态转移概率矩阵


我的问题是,我需要知道如何将这些值划分为8个状态,并在Matlab中找到这8个状态的状态转移概率矩阵

下面是一个虚构的例子:

%# some random vector (load your data here instead)
x = randn(1000,1);

%# discretization/quantization into 8 levels
edges = linspace(min(x),max(x),8+1);
[counts,bins] = histc(x, edges);

%# fix last level of histc output
last = numel(counts);
bins(bins==last) = last - 1;
counts(last-1) = counts(last-1) + counts(last);
counts(last) = [];

%# show histogram
bar(edges(1:end-1), counts, 'histc')

%# transition matrix
trans = full(sparse(bins(1:end-1), bins(2:end), 1));
trans = bsxfun(@rdivide, trans, sum(trans,2));
需要注意的几点:

  • 离散化只需将整个数据范围划分为8个数据箱即可完成。这是通过使用。请注意,由于函数的工作方式,我们必须合并最后两个计数并相应地修复垃圾箱

  • 转换矩阵是通过首先使用
    sparse
    函数的一种鲜为人知的调用形式对共现进行计数来计算的。也可以使用accumarray。然后对计数矩阵进行归一化,以获得总和为1的概率

  • 您提到您的MC模型应该只允许相邻状态之间的转换(1到2或8到7,但不允许2到5)。我没有强制执行这一事实,因为这应该是数据本身的属性,这在本例中不适用于随机数据


这对我来说并不是一个真正的Matlab问题。也许您可以提供一些更详细的信息,说明您已经做了什么,或者您将如何在伪代码中找到状态转移矩阵。主要思想是将通道测量集划分为有限数量的离散级别,这些级别映射到状态。然后使用测量数据估计状态之间的转换,以产生衰落过程的同质马尔可夫链表示。t_(j,k)=P_r(S_(n+1)=S_k | S_n=S_j)=n_(j,k)/(∑_(l=0)^(K-1)▒N_u(l,j))=N_u(j,k)/N_j,j,k–{0,1,…k-1}@RamSundar:那么你是在问如何将连续值划分为8个离散级别?或者你在问如何从这些离散值计算转移矩阵?我想第一个可以使用
histc
,第二个可以使用
accumarray
@RyanJ.Smith ya.。我需要将这些值划分为8的离散级别,并找到这8个状态之间的转换。我希望您知道,不会有任何转换,例如从状态1到状态3(FSMC模型)。@Amro ya..我需要将这些值划分为8的离散级别,并找到这8个状态之间的转换。我希望您知道,不会有任何转换,例如从状态1到状态3(FSMC模型)。