假设我有一个序列x= 1,3,3,1,2,1,4,2,3,1,4,2,4,4,4,3,1,2,5,1,它有五个状态1 3 2 4 5,我必须在MATLAB中通过下面的方程得到转移概率矩阵,概率=(观测对数量x(t)& x(t+1),其中x(t)在状态i和状态x中(t+1)处于状态j)/(观察对x(t)& x(t+1)的数量,其中x(t)处于状态i,x(t+1)处于状态1.....s中的任何一个)。我尝试使用此代码,但它给出错误
x=[1 3 3 1 2 1 4 2 3 1 4 2 4 4 4 3 1 2 5 1]
n = length(x)-1
p = zeros(5,5)
for t = 1:n
if x(t)=x(t+1);
a(t)=count (x(t)=x(t+1)) % Here i am trying to count how many number of times pair of that states occur in sequence.
q(t)=sum(x==x(t)) % (Here i am trying to count Number of observation pairs x(t) & x(t+1), with x(t) in state i and x(t+1) in any one of the states 1......s)
end
for i=1:5
p(i, :) = a(t)/q(t)
end
转移概率矩阵由我手工计算如下
1条答案
按热度按时间iih3973s1#
由于已经有一段时间了,我认为现在可以提供一个答案了。下面的两种方法都不需要工具箱。该方法假设离散时间马尔可夫链(DTMC)的转移概率矩阵的基本知识。
这两种方法都使用
unique()
函数来寻找状态空间。注意顺序是不同的,例如your[1 3 2 4 5]
vs. my[1 2 3 4 5]
,但这不是限制性问题。我已经将获取转移计数与转移概率分开来说明一些技术。此方法使用
unique()
和accumarray()
函数。sum(sum(Counts)) == length(X)-1
与P
得行之与是否为1(sum(P,2)
).请注意,计数矩阵使用1步偏移量来计数转换。输出是转换数的
NumU x NumU
数组,以unique()
的n
-输出中给出的索引表示。for
环路**这是一种可以使用状态空间的任何排序的直接方法(见下文)。
使用状态空间排序:如果对
States = [1 3 2 4 5];
使用Approach 2,则生成的概率转移矩阵P
与手动计算的概率转移矩阵相匹配。