提问人:Pauline 提问时间:10/1/2023 更新时间:10/1/2023 访问量:38
如何在 Julia 中计算具有复杂 Ginzburg-Landau 方程的常微分方程?
How do I compute an ODE with a complex Ginzburg-Landau equation in Julia?
问:
第一次在这里提问!我正在尝试使用 Vilfan-Duke 模型对 Julia 中的耦合非线性振荡器进行编程。该模型使用以下形式的复杂 Ginzburg Landau 方程: z_dot = (iw + e) * z - B * |z|^2 * z z = x - 1/w * ix_dot 在这个模型中,方程的实部等价于系统的位移,虚部等价于速度。 单个非耦合振荡器的相位轨迹应如下所示: Vilfan-Duke 振荡器的相位轨迹
我目前的代码如下:
using DifferentialEquations, Plots
# Constants
ϵ = -0.5
B = 0
ω = 2.0 * 2π # 1/s
function VilfanDuke(du, u, p, t)
x, dx = u
z = x - (1/ω) * (im*dx)
dz = ((im*ω + ϵ) * z) - (B * abs2(z) * z )
du[1] = real(dz)
du[2] = imag(dz)
end
# Initial Conditions
u₀ = [2.0, 0.1]
tspan = (0.0, 20.0)
# Define the problem
prob = ODEProblem(VilfanDuke, u₀, tspan)
#Solve the problem
sol = solve(prob, AutoTsit5(Rosenbrock23()))
现在的问题是系统进入 e22 或按该顺序排列的维度,如果我将参数 B 和 e 更改为正数,程序会在几个时间步长后中止,并说解决方案不稳定。我和 Julia 一起工作的时间不长,所以也许我误解了在常微分方程中应该如何使用复杂变量?我之前为范德波尔振荡器编写过一个类似的程序,效果很好,所以我想复杂的变量是这里的问题,我只是不知道为什么。
答: 暂无答案
评论
du[1]
du[2]
dz
u