我需要在Matlab的非常精细的网格上模拟大量复合泊松过程,因此我希望能最有效地做到这一点。
我需要在相同的随机数上进行很多模拟,但是要更改参数,因此即使事先画了比我可能需要的东西多得多的东西也没关系因为与顺序500*n
repl乘以实际的复合过程生成相比,只需要执行一次即可。
我的方法如下:假设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
相乘,将其相乘将创建一个带有零的网格,直到跳跃到达,然后跳跃大小,最后加上所有这些都将产生整个跳跃过程网格。
如何才能更有效地做到这一点?
非常感谢你。
我不知道您在做什么CPP_norm
,但是如果可以进行推导,则数据量少得多:
diffCPP_norm=bsxfun(@times,sparse(diff(bsxfun(@gt,t,Uni),1,2)),Norm);
使用CPP_norm=full(cumsum(diffCPP_norm))
您可以重新创建原始数据,但随后您失去了优势。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句