1

我对在 Julia 中求解微分方程相对较新,因此无法弄清楚如何在 2 个自变量(空间和时间)中求解高阶 ode,因此需要帮助。

我正在尝试使用 Julia 在 h(流体膜的高度)与 x(长度跨度)之间绘制曲线,该流体膜悬挂在天花板上,由于Rayleigh-Taylor 不稳定性而流入液滴。有两个关键的微分方程可以控制这种现象。 此处列出了两首颂歌

这里h表示流体膜的高度,B0=0.134,其余是h和q关于时间(t)和空间(x)的导数。符号Dxxxh表示h对x的三阶导数。空间跨度可以认为是L=24。边界条件在这里定义。

在 t=0 时 h 的初始值可以使用这个表达式找到,其中 epsilon=0.0009。预期的图如下所示情节随着时间的推移而滑动。

4

1 回答 1

0

NeuralPDE.jl是一个基于物理信息神经网络的 PDE 求解器。当以符号形式给出时,它可以处理这种方程。这是一个求解 Kuramoto-Sivashinsky 方程的示例,也是一个 4 阶 PDE。

using NeuralPDE, Flux, ModelingToolkit, GalacticOptim, Optim, DiffEqFlux
import ModelingToolkit: Interval, infimum, supremum

@parameters x, t
@variables u(..)
Dt = Differential(t)
Dx = Differential(x)
Dx2 = Differential(x)^2
Dx3 = Differential(x)^3
Dx4 = Differential(x)^4

α = 1
β = 4
γ = 1
eq = Dt(u(x,t)) + u(x,t)*Dx(u(x,t)) + α*Dx2(u(x,t)) + β*Dx3(u(x,t)) + γ*Dx4(u(x,t)) ~ 0

u_analytic(x,t;z = -x/2+t) = 11 + 15*tanh(z) -15*tanh(z)^2 - 15*tanh(z)^3
du(x,t;z = -x/2+t) = 15/2*(tanh(z) + 1)*(3*tanh(z) - 1)*sech(z)^2

bcs = [u(x,0) ~ u_analytic(x,0),
       u(-10,t) ~ u_analytic(-10,t),
       u(10,t) ~ u_analytic(10,t),
       Dx(u(-10,t)) ~ du(-10,t),
       Dx(u(10,t)) ~ du(10,t)]

# Space and time domains
domains = [x ∈ Interval(-10.0,10.0),
           t ∈ Interval(0.0,1.0)]
# Discretization
dx = 0.4; dt = 0.2

# Neural network
chain = FastChain(FastDense(2,12,Flux.σ),FastDense(12,12,Flux.σ),FastDense(12,1))

discretization = PhysicsInformedNN(chain, GridTraining([dx,dt]))
@named pde_system = PDESystem(eq,bcs,domains,[x,t],[u(x, t)])
prob = discretize(pde_system,discretization)

cb = function (p,l)
    println("Current loss is: $l")
    return false
end

opt = Optim.BFGS()
res = GalacticOptim.solve(prob,opt; cb = cb, maxiters=2000)
phi = discretization.phi

在此处输入图像描述

于 2022-03-03T13:30:18.860 回答