离散概率时间演化的matlab建模
你好, 我试图模拟以下情况 有一个系统,可以分为三种状态。说明M1、M2和M3。 从状态M1,它可以以概率p1进入状态2。 从状态M2开始,它可以以概率p2进入状态1,以概率p3进入状态3。 从状态M3进入状态2的概率为p4 现在,我第一次尝试解决这个问题是通过处理一个由三个耦合微分方程组成的系统 但这似乎并不奏效,因为当我试图绘制解决方案时,我并没有真正看到预期的动态 所以我想尝试用离散的方法来解决这个问题,但我真的不知道从哪里开始。我的猜测是这样做的一个更简单的方法是使用matlab 关于边界条件,我想考虑从M1开始。 现在我明白了,我真的没有给你太多,但我真的不知道从哪里开始。因此,我的问题基本上归结为我应该如何着手解决这个问题,我是否可以查找任何密切相关的问题,看看他们如何处理这个问题 问候离散概率时间演化的matlab建模,matlab,Matlab,你好, 我试图模拟以下情况 有一个系统,可以分为三种状态。说明M1、M2和M3。 从状态M1,它可以以概率p1进入状态2。 从状态M2开始,它可以以概率p2进入状态1,以概率p3进入状态3。 从状态M3进入状态2的概率为p4 现在,我第一次尝试解决这个问题是通过处理一个由三个耦合微分方程组成的系统 但这似乎并不奏效,因为当我试图绘制解决方案时,我并没有真正看到预期的动态 所以我想尝试用离散的方法来解决这个问题,但我真的不知道从哪里开始。我的猜测是这样做的一个更简单的方法是使用matlab 关于边
编辑:请注意,我这样做是为了了解系统在每个州的平均花费时间。我希望最终将其与数据相匹配,以便找到概率。正如评论中所说,这看起来很像一个假设。在你的例子中,转移矩阵M由下式给出
M = [1-p1, p2, 0
p1, 1-p2-p3, p4
0, p3, 1-p4];
请注意,所有列的总和必须为1。当前概率由状态向量给出,它是一个列向量,也必须和为1。假设从状态1:state=[1;0;0]开始,那么n次转换后的状态向量是M^n*state。有关数学知识,请参见
但是,正如你所说,你想知道如何对这样一个过程进行具体的模拟,而不是概率如何随时间变化。这可以像未经测试的那样进行:
state = 1; % start state
while not_stopped()
do_stuff(state);
transition_prob = M(:, state); % get the appropriate column
state = weighted_randi(transition_prob)
end
将do_stuff替换为对该状态执行的任何操作,例如,在某个向量中记录当前状态以供以后打印。函数加权_randi的定义如下:
我试着用上面概述的Bas的方法来解决这个问题,虽然我确实取得了一些进展,但我并没有完全成功。然而,通过我收到的所有评论,我能够使我的搜索更加准确,我发现了这一点
使用这个,我能够用主海报给出的代码做我想要的事情。我明白,编写自己的代码比复制别人的代码要好得多,但我已经确保理解其中的每一步,出于我的目的,我对此感到满意。我想再次感谢你的帮助 听起来你有一个-你可以从找到状态转移矩阵开始。这太棒了!非常感谢。我有矩阵。然而,搜索马尔可夫链模拟Matlab看起来。。令人望而生畏。当你有了数据并想要找到概率时,这实际上是一个更容易的问题。正如bdecaf所建议的,这是一个马尔可夫链,你只需要根据经验计算条件概率,例如,状态一跟状态二的概率。你几乎完成了。模拟只是将矩阵自身乘以初始状态。作为提示-计算特征值和特征向量。嗯,如果t是以1为单位的总时间,我不应该画一个随机变量t次,使用randT,1,然后将其与概率或诸如此类的东西进行比较吗?
function R = weighted_randi(weights)
% returns an integer from the range 1:length(weights) with probability
% given by the weights
[~, R] = histc(rand(), cumsum([0; weights(:) ./ sum(weights)]));