2

我一直在尝试实现贝叶斯 ODE。在石油行业,我们使用以下等式拟合生产数据然后进行预测:

ODE 方程描述为:

其中 0<n<1,n 和 K 是通过拟合原始生产数据定义的参数,在我的情况下,K 为 0.17,n = 0.87。

我的初始代码:

using DiffEqFlux, OrdinaryDiffEq, Flux, Optim, Plots, AdvancedHMC
    
function Arps!(du,u,p,t)
    y = u
    K,n = p
    du  = (y * K * y^n)
end

tspan=(1.0,200.0)
tsteps = range(1, 200, length = 200)
u0 = [5505.99]
p=[0.17,0.87]
prob1 = ODEProblem(Arps!,u0,tspan)
sol_ode = solve(prob1,Vern7(),saveat = tsteps)

不知道如何解决这个问题:

MethodError: no method matching iterate(::DiffEqBase.NullParameters) 
4

1 回答 1

3

您没有将任何参数传递到您的 ODE。prob1 = ODEProblem(Arps!,u0,tspan,p).

对于贝叶斯部分,请看教程:

https://turing.ml/dev/tutorials/10-bayesiandiffeq/

于 2021-01-05T15:43:28.177 回答