gpt4 book ai didi

julia - 减少 DifferentialEquations.jl 中的内存分配

转载 作者:行者123 更新时间:2023-12-03 18:59:31 25 4
gpt4 key购买 nike

我正在使用 DifferentialEquations.jl 来解决 ODE 系统,如下所示。结果并不真正相关,因为 p仅包含用于生成 MWE 的测试参数,但关键是尽管使用了就地 ODE 函数,但我还是看到了大量内存分配。

using DifferentialEquations

function ode_fun!(du,u,p,t)
a,b,c,d,e = p

X = @. u[1] * a * ((b-c)/b)
Y = @. u[2] * d * ((b-e)/b)

du[1] = -sum(X) + sum(Y) - u[1]*u[2]
du[2] = sum(X) - sum(Y) - u[1]*u[2]
end

#exemplary parameters
a = collect(10:-0.1:0.1)
b = a.^2
c = b*0.7
d = collect(0.01:0.01:1)
e = b*0.3

u0 = [1.0, 0.5]
p = [a,b,c,d,e]
tspan = [0.0, 100.0]
t = collect(0:0.01:100)

prob = ODEProblem(ode_fun!,u0,tspan,p,saveat=t)
@time sol = solve(prob)

1.837609 seconds (5.17 M allocations: 240.331 MiB, 2.31% gc time) #Julia 1.5.2

由于我需要反复解决这个 ODE 系统,我想尽可能地减少分配,并且想知道是否可以对它们做些什么。我一直想知道问题是否出在 XY并试图在 ODE 函数之外预先分配这些,但不幸的是没有成功地减少分配。

最佳答案

我很确定这应该更快,而且分配量减半

function ode_fun!(du,u,p,t)
a,b,c,d,e = p
XmY = @. u[1] * a * (1-c/b) - u[2] * d * (1-e/b)
sXmY = sum(XmY)
du[1] = -sXmY - u[1]*u[2]
du[2] = sXmY - u[1]*u[2]
end
可能有办法摆脱所有这些,但我不是 DifferentialEquations专家。

关于julia - 减少 DifferentialEquations.jl 中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65191918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com