1

在尝试运行解释SDE 上的 DE 教程的代码时,我得到以下堆栈跟踪(仅前几行):

Bridging distribution is unknown. Cannot use adapativity

Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:33
  [2] (::DiffEqNoiseProcess.var"#106#108")(rand_vec::Vector{Float64}, W::NoiseProcess{Float64, 2, Float64, Vector{Float64}, Nothing, Nothing, DiffEqNoiseProcess.var"#105#107"{Vector{Float64}, Matrix{Float64}}, DiffEqNoiseProcess.var"#106#108", true, ResettableStacks.ResettableStack{Tuple{Float64, Vector{Float64}, Nothing}, true}, ResettableStacks.ResettableStack{Tuple{Float64, Vector{Float64}, Nothing}, true}, RSWM{Float64}, Nothing, RandomNumbers.Xorshifts.Xoroshiro128Plus}, W0::Int64, Wh::Vector{Float64}, q::Float64, h::Float64, u::Vector{Float64}, p::SciMLBase.NullParameters, t::Float64, rng::RandomNumbers.Xorshifts.Xoroshiro128Plus)
    @ DiffEqNoiseProcess ~/.julia/packages/DiffEqNoiseProcess/9NzQP/src/correlated_noisefunc.jl:28
  [3] reject_step!
    @ ~/.julia/packages/DiffEqNoiseProcess/9NzQP/src/noise_interfaces/noise_process_interface.jl:278 [inlined]
  [4] reject_step! (repeats 2 times)
    @ ~/.julia/packages/StochasticDiffEq/Ysmjy/src/integrators/integrator_utils.jl:7 [inlined]

我怀疑这与我定义相关维纳过程的方式有关。这是我要运行的代码块:

# Correlated Brownian motions
# e.g. Heston model

heston_tspan = (0.0,1.0)
μ = 1.0
κ = 1.0
Θ = 1.0
σ = 1.0
ρ = 0.333

function heston_drift!(du,u,p,t)
    du[1] = μ*u[1]
    du[2] = κ*(Θ-u[2])
end

function heston_sigma!(du,u,p,t)
    du[1] = √u[2]*u[1]
    du[2] = σ*√u[2]
end

correl = [1 ρ;ρ 1]
heston_noise = CorrelatedWienerProcess!(correl, heston_tspan[1], zeros(2), zeros(2))
heston_problem = SDEProblem(heston_drift!, heston_sigma!, ones(2), heston_tspan, noise=heston_noise)
heston_sol = solve(heston_problem)
plot(heston_sol)

编辑: 如果我告诉它不要明确使用自适应方法,求解器就可以工作。例如,

heston_sol = solve(heston_problem, adaptive=false, dt=0.01)

但是,我不明白为什么

  1. 没有为此 CorrelatedWienerProcess 定义桥接分布属性!“对象”(数学上,它类似于默认的 WienerProcess)
  2. 求解函数的自动选择器在找不到桥接分布时不会尝试非自适应方法。
4

0 回答 0