如何在 Julia 中计算具有复杂 Ginzburg-Landau 方程的常微分方程?

How do I compute an ODE with a complex Ginzburg-Landau equation in Julia?

提问人:Pauline 提问时间:10/1/2023 更新时间:10/1/2023 访问量:38

问:

第一次在这里提问!我正在尝试使用 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 一起工作的时间不长,所以也许我误解了在常微分方程中应该如何使用复杂变量?我之前为范德波尔振荡器编写过一个类似的程序,效果很好,所以我想复杂的变量是这里的问题,我只是不知道为什么。

朱莉娅 ·奥德(Julia Ode )复数

评论

0赞 max xilian 10/2/2023
您不需要像使用 and 那样使用半复数格式,您的 ODE 函数可以返回复数。所以你可以回来.我不熟悉您正在查看的系统。仔细检查方程式是否真的正确。du[1]du[2]dz
0赞 Chris Rackauckas 10/4/2023
同意,您可以只制作一个复数或向量 2 个实数来计算分量,但 2 个复数在这里似乎是不正确的。u

答: 暂无答案