我是编程新手,所以目前我的知识非常有限,但我一直在寻求提高。
我在下面详细介绍了这个名为gillespie的函数,以显示gillespie算法
> print(gillespied)
function (N, T = 100, dt = 1, ...)
{
tt = 0
n = T%/%dt
x = N$M
S = t(N$Post - N$Pre)
u = nrow(S)
v = ncol(S)
xmat = matrix(ncol = u, nrow = n)
i = 1
target = 0
repeat {
h = N$h(x, tt, ...)
h0 = sum(h)
if (h0 < 1e-10)
tt = 1e+99
else tt = tt + rexp(1, h0)
while (tt >= target) {
xmat[i, ] = x
i = i + 1
target = target + dt
if (i > n)
return(ts(xmat, start = 0, deltat = dt))
}
j = sample(v, 1, prob = h)
x = x + S[, j]
}
}我使用了
out = gillespied(LV,T=100,dt=1)
我想创建一个对应于这个out结果的第一列的矩阵,但是我想将这个输出结果再重复19次(所以我总共有20次),并将每个结果绑定到我的原始矩阵,这将给我一个20X100的矩阵。
这是我的尝试,我不确定它是否正确,因为当我尝试查看矩阵M时,R会冻结
M=matrix(out[,1],ncol=1)
for (i in 1:19) {
out = gillespied(LV, T=100, dt=1)
M = cbind(M,out[,1])
i = i+1
}
print(M)我想知道这是否正确,如果这不是我应该做的调整
发布于 2017-11-03 20:03:38
您不需要递增i,for循环会为您做这件事。
例如。
M <- matrix(rnorm(5), ncol = 1)
for (i in 1:5){
out <- rnorm(5)
M <- cbind(M, out)
}
> M
out out out out out
[1,] 0.21701968 2.0296134 -0.26425755 0.3904337 0.1438060 -0.5340556
[2,] 0.07689991 -2.0589758 0.01443763 -0.7506177 -0.8498391 1.0487328
[3,] -0.73329583 0.2709055 0.42298869 0.3271687 1.0450811 -0.9313009
[4,] -1.68460070 0.2864797 -1.83408494 -0.2878682 -0.4297308 0.5282630
[5,] 0.08921503 -1.4390101 0.89112111 -1.6711018 -2.0863797 -0.6924083像i= i+1这样的东西通常用在while循环中。否则,您的代码看起来会做您想做的事情。
你的矩阵有多大?它可能很难打印到控制台。如果您尝试使用head(M)会发生什么
https://stackoverflow.com/questions/47095154
复制相似问题