Julia 回调函数

🔖 julia
Author

Guangyao Zhao

Published

Mar 25, 2023

在使用DifferentialEquations库求解常微分方程时,经常需要根据不同的条件对输入进行一定的修改,比如在求解的时间t到达某个时间点时,对输入u进行某种改变。此时就需要用到DiscreteCallback函数进行设置。

先导入要用的第三方库:

using DifferentialEquations
using Plots

定义常微分方程:

function f(du, u, p, t)
    du[1] = -u[1]
end

求解没有回调函数的常微分方程,并画图:

u0 = [10.0]
const V = 1
prob = ODEProblem(f, u0, (0.0, 10.0))
sol = solve(prob, Tsit5(), dt=1e-1, adaptive=false)
plot(sol)

t>2.0时,对u进行某种操作:

function condition(u, t, integrator)
    integrator.t > 2.0
end
function affect!(integrator)
    integrator.u[1] += 10
end
cb = DiscreteCallback(condition, affect!)
sol = solve(prob, Tsit5(), callback=cb)
plot(sol)