我相信这段代码有一个错误。为简洁起见,我将只编写定义 ODE 的函数
function clones(du,u,p,t)
(Nmut,f) = p
# average fitness
phi = sum(f.*u)
# constructing mutation kernel
eps = 0.01
Q = Qmatrix(Nmut,eps)
# defining differential equations
Nclones=2^Nmut;
du = zeros(Nclones)
ufQ = transpose(transpose(u.*f)*Q)
du = ufQ .- phi*u
end
如果需要整个代码,我可以提供它,但它很乱,我不确定如何创建一个最小的示例。我在 Nmut = 2 时尝试过这个,所以我可以与硬编码版本进行比较。du 在第一个时间步的输出是相同的。但是这个版本似乎永远不会更新你,它保持在规定的 u0 上。
有谁知道为什么会这样?我也可以提供完整的脚本,但如果有人能看到你为什么不更新,我想避免这种情况。
编辑:
maxdim=4;
for i in 1:maxdim
du[i] = 0.0;
for j in 1:maxdim
du[i] += u[j].*w[j].*Q[j,i]
end
du[i] -= u[i].*phi
end
如果我们使用这个版本,du 会正确更新。为什么会这样?