资源简介
随机过程中 由初始分布和一步转移矩阵 得到最终的状态 由Matlab程序可直接运行 能够成功运行的
代码片段和文件信息
function multidistribution=test()
Qmatrix=input(‘请输入速率转移矩阵例如[-2 1 1;1 -4 3;2 2 -4]\n‘);
Pmatrix=input(‘请输入初始概率分布矩阵例如[0.5;0.2;0.3]\n‘);
Tmatrix=[];
%求出Tmatrix,用来累计i分布
tmp=0;
for i=1:1:length(Qmatrix)
tmp=0;
for j=1:1:length(Qmatrix)
if(i==j)
tmp=tmp+0;
elseif(i~=j)
tmp=tmp+Qmatrix(ij);
end
Tmatrix(ij)=tmp/(-Qmatrix(ii));
end
end
multidistribution=[];
%alltimedistribution=[];获取所有时间列表
for n=1:1:6
%随机产生一个变量,确定从哪一个状态开始
r=unifrnd(01);
tmp=0;
for i=1:1:length(Pmatrix)
tmp=tmp+Pmatrix(i);
if r>tmp
continue;
elseif r break;
end
end
%此时的i是初始状态
%用一个矩阵来记录下状态的变化和在某一状态停留的时间
totaltime=0;
timedistribution=linspace(00length(Pmatrix));%用来记录各个状态时间分布情况
distribution=linspace(00length(Pmatrix));%用来记录比例分布情况
for t=1:1:10^n
r1=unifrnd(01);
r2=unifrnd(01);
time=1/Qmatrix(ii)*log(r1);%求出状态停留时间下面求出下一次要跳到的状态
for k=1:1:length(Tmatrix)
if r2>Tmatrix(ik)
continue;
elseif r2<=Tmatrix(ik)
break;
end
end
timedistribution(i)=timedistribution(i)+time;
totaltime=totaltime+time;
%记录上一次执行的数据到矩阵state中去
i=k;
end
for i=1:1:length(Pmatrix)
distribution(i)=timedistribution(i)/totaltime;
end
format long
alltime=totaltime
format short
%alltimedistribution=[alltimedistribution;totaltime]
%已经求得一次distribution分布
multidistribution=[multidistribution;distribution];
end
return;
%一组测试数据
% 0.2570 0.6436 0.0994
% 0.3589 0.3158 0.3253
% 0.4068 0.2576 0.3357
% 0.4326 0.2584 0.3090
% 0.4350 0.2618 0.3031
% 0.4357 0.2602 0.3041
% 0.4349 0.2607 0.3044
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2098 2014-12-01 12:10 随机过程\test.m
文件 1595 2014-12-01 12:10 随机过程\test2.m
目录 0 2015-01-19 15:43 随机过程
----------- --------- ---------- ----- ----
3693 3
评论
共有 条评论