Matlab中复合泊松过程的有效仿真

时间:2014-06-08 08:35:32

标签: matlab

我需要在一个非常精细的网格上模拟Matlab中的大量复合泊松过程,所以我希望能够最有效地完成它。

我需要对相同的随机数进行大量的模拟,但是参数会发生变化,所以预先绘制制服和法线是切实可行的,即使这意味着我必须抽出比我可能需要的更多并且赢得了# 39;重要的是因为它只需要按照500*n重复次序实际复合过程生成的顺序进行一次。

我的方法如下: 让T为我需要模拟多长时间和N网格点,然后我的网格是:

t=linspace(1,T,N);

让nrepl成为我需要的进程数,然后我模拟

P=poissrnd(lambda,nrepl,1); % Number of jumps for each replication
U=(T-1)*rand(10000,nrepl)+1; % Set of uniforms on (1,T) for jump times
N=randn(10000,nrepl); % Set of normals for jump size

然后进行复制j

Poiss=P(j); % Jumps for replication
Uni=U(1:Poiss,j);% Jump times
Norm=mu+sigma*N(1:Poiss,j);% Jump sizes

然后我猜这是我需要你的建议的地方,我使用这个单行,但似乎很慢:

CPP_norm=sum(bsxfun(@times,bsxfun(@gt,t,Uni),Norm),1);

在每次跳转的内部,它会创建一系列与t 0相同的长度,直到跳转然后1之后,相乘这将创建一个带有零的网格,直到跳转为止到达然后跳转大小,最后添加所有这些将产生网格上的整个跳转过程。

如何更有效地完成这项工作?

非常感谢。

1 个答案:

答案 0 :(得分:1)

我不知道你在使用CPP_norm做了什么,但是如果可以使用派生你可以获得更少的数据:

diffCPP_norm=bsxfun(@times,sparse(diff(bsxfun(@gt,t,Uni),1,2)),Norm);

使用CPP_norm=full(cumsum(diffCPP_norm))您可以重新创建原始数据,但之后就会失去优势。