Matlab 如何求马尔可夫链(FSMC)的有限状态转移概率矩阵
我有一个通道测量值>20000,它必须被划分为离散的级别,就像我的例子K=8,它必须映射到具有状态的通道测量值。我必须在Matlab中找到状态转移概率矩阵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
我的问题是,我需要知道如何将这些值划分为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个数据箱即可完成。这是通过使用。请注意,由于函数的工作方式,我们必须合并最后两个计数并相应地修复垃圾箱
- 转换矩阵是通过首先使用
函数的一种鲜为人知的调用形式对共现进行计数来计算的。也可以使用accumarray。然后对计数矩阵进行归一化,以获得总和为1的概率sparse
- 您提到您的MC模型应该只允许相邻状态之间的转换(1到2或8到7,但不允许2到5)。我没有强制执行这一事实,因为这应该是数据本身的属性,这在本例中不适用于随机数据
histc
,第二个可以使用accumarray
@RyanJ.Smith ya.。我需要将这些值划分为8的离散级别,并找到这8个状态之间的转换。我希望您知道,不会有任何转换,例如从状态1到状态3(FSMC模型)。@Amro ya..我需要将这些值划分为8的离散级别,并找到这8个状态之间的转换。我希望您知道,不会有任何转换,例如从状态1到状态3(FSMC模型)。