这个matlab代码哪里不对,为什么概率值不对

问题如图

img


按照马尔科夫链做的算出来概率为1,哪里不正确或者有其他方法么

E={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
P=[0,1/2,0,0,1/2,0,0,0,0,0,0,0,0,0,0,0;
    1/3,0,1/3,0,0,1/3,0,0,0,0,0,0,0,0,0,0;
    0,1/3,0,1/3,0,0,1/3,0,0,0,0,0,0,0,0,0;
    0,0,1/2,0,0,0,0,1/2,0,0,0,0,0,0,0,0;
    1/3,0,0,0,0,1/3,0,0,1/3,0,0,0,0,0,0,0;
    0,1/4,0,0,1/4,0,1/4,0,0,1/4,0,0,0,0,0,0;
    0,0,1/4,0,0,1/4,0,1/4,0,0,1/4,0,0,0,0,0;
    0,0,0,1/3,0,0,1/3,0,0,0,0,1/3,0,0,0,0;
    0,0,0,0,1/3,0,0,0,0,1/3,0,0,1/3,0,0,0;
    0,0,0,0,0,1/4,0,0,1/4,0,1/4,0,0,1/4,0,0;
    0,0,0,0,0,0,1/4,0,0,1/4,0,1/4,0,0,1/4,0;
    0,0,0,0,0,0,0,1/3,0,0,1/3,0,0,0,0,1/3;
    0,0,0,0,0,0,0,0,1/2,0,0,0,0,1/2,0,0;
    0,0,0,0,0,0,0,0,0,1/3,0,0,1/3,0,1/3,0;
    0,0,0,0,0,0,0,0,0,0,1/3,0,0,1/3,0,1/3;
    0,0,0,0,0,0,0,0,0,0,0,1/2,0,0,1/2,0];
N=10000;
for k=1:N
    n=1;
    T=N;
    x=1;
    X=[x];
    while n<=T
        R=rand();
        D=P(X(end),:);
        for j=1:16
            if R<=sum(D(1:j))
                X=[X,j];
                break;
            end
        end
        n=length(X);
    end
    S(k)=X(end);
end
pos=(S==8)|(S~=13);
num=sum(pos);
Prob=num/N


查看了一下你的程序,小白鼠行动以及统计判断有点问题,我修改了程序如下,试验100000概率结果为0.5525
如果结果还满意,望采纳


%状态空间
E={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
%状态转移概率
P=[0,1/2,0,0,1/2,0,0,0,0,0,0,0,0,0,0,0;
    1/3,0,1/3,0,0,1/3,0,0,0,0,0,0,0,0,0,0;
    0,1/3,0,1/3,0,0,1/3,0,0,0,0,0,0,0,0,0;
    0,0,1/2,0,0,0,0,1/2,0,0,0,0,0,0,0,0;
    1/3,0,0,0,0,1/3,0,0,1/3,0,0,0,0,0,0,0;
    0,1/4,0,0,1/4,0,1/4,0,0,1/4,0,0,0,0,0,0;
    0,0,1/4,0,0,1/4,0,1/4,0,0,1/4,0,0,0,0,0;
    0,0,0,1/3,0,0,1/3,0,0,0,0,1/3,0,0,0,0;
    0,0,0,0,1/3,0,0,0,0,1/3,0,0,1/3,0,0,0;
    0,0,0,0,0,1/4,0,0,1/4,0,1/4,0,0,1/4,0,0;
    0,0,0,0,0,0,1/4,0,0,1/4,0,1/4,0,0,1/4,0;
    0,0,0,0,0,0,0,1/3,0,0,1/3,0,0,0,0,1/3;
    0,0,0,0,0,0,0,0,1/2,0,0,0,0,1/2,0,0;
    0,0,0,0,0,0,0,0,0,1/3,0,0,1/3,0,1/3,0;
    0,0,0,0,0,0,0,0,0,0,1/3,0,0,1/3,0,1/3;
    0,0,0,0,0,0,0,0,0,0,0,1/2,0,0,1/2,0];
%试验次数
N = 10000;
%结果判定矩阵
S = zeros(N,1);
for k=1:N %试验开始
    x=1;%位置归零
    flag = 0;%初始化标签
    while flag==0 %小鼠开始移动(直到捡到食物或被电击)
        R=rand();%获取随机选择
        D=P(x,:);%获取当前位置转移概率向量
        x = max(find((cumsum(D)>R),1,'first'),1);%随机位置保存
        if x==8
            flag = 1;
        end
        if x==13
            flag = -1;
        end
    end
    S(k)=flag;%单次试验停止原因,触电或找到食物
end
Prob=sum(S==1)/N;

img