问题标签 [differentialequations.jl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
142 浏览

julia - Julia 中的二阶 ODE 给出错误的结果

我正在尝试使用 julia 提供的 DifferentialEquations.jl,它工作正常,直到我尝试在二阶 ODE 上使用它。例如考虑二阶 ODE

x''(t) = x'(t) + 2* x(t),带初始条件

x'(0) = 0, x(0) = 1

它的解析解为:x(t) = 2/3 exp(-t) + 1/3 exp(2t)。

为了以数字方式解决它,我运行以下代码:

接着就,随即,

而解析解产生 134.50945587649028,所以我在这里有点迷失了。

0 投票
1 回答
99 浏览

julia - 在 Julia 中解决 DDE 的问题

我正在尝试使用 Julia 的DifferentialEquations.jl包来解决 DDE 系统。我能够使用下面的代码解决两个对象的问题

当我试图使我的代码 ( MultiDelayedBuckle.jl) 可扩展以解决任意数量的对象时,我遇到了一个我无法理解的错误。下面你可以看到我的代码

这是我得到的错误:

作为参考,我使用的是 Julia 1.6.0。

0 投票
1 回答
116 浏览

julia - FFTW.jl 用于 2D 阵列:扩散只发生在 1D

根据我的阅读,当 A 是 2D 数组时,使用 FFTW.jl / AbstractFFTs.jl 的 fft(A) 应该在 2D 中执行 fft,而不是按列执行。知道为什么当(我认为)我将缩放的二阶空间导数添加到 u(t,x) 时,我只看到列方向的扩散,就好像使用显式求解器一样?

谢谢!我对此很陌生。

代码和热图截图

0 投票
1 回答
28 浏览

neural-network - 训练神经微分方程时如何保证收敛?

我目前正在完成 Julia 语言的 SciML 教程研讨会练习 ( https://tutorials.sciml.ai/html/exercises/01-workshop_exercises.html )。具体来说,我坚持练习 6 第 3 部分,其中涉及训练神经网络以逼近方程组

目标是用神经网络替换 du[2] 的方程:du[2] = NN(u, p) 其中 NN 是具有参数p和输入的神经网络u

我有一组网络应该尝试匹配的样本数据。损失函数是网络模型输出与样本数据之间的平方差。

我用 NN = Chain(Dense(2,30), Dense(30, 1)). 我可以开始Flux.train!跑步,但问题是有时神经网络的初始参数会导致 10^20 量级的损失,因此训练永远不会收敛。我的最佳尝试使用 ADAM 优化器在大约 1000 次迭代中将损失从最初的大约 2000 降低到大约 20,但我似乎无法做得更好。

如何确保我的网络始终可训练,有没有办法更好地收敛?

0 投票
1 回答
110 浏览

neural-network - 使用 sciml_train 改进通用微分方程训练的方法

大约一个月前,我问了一个关于在训练神经微分方程时更好地收敛的策略的问题。从那以后,我已经使用给我的建议使该示例起作用,但是当我将相同的建议应用于更困难的模型时,我又被卡住了。我所有的代码都在 Julia 中,主要使用 DiffEqFlux 库。为了使这篇文章尽可能简短,我不会分享我尝试过的所有代码,但如果有人想访问它来解决问题,我可以提供。

我想要做什么

我试图学习的数据来自 SIRx 模型:

我使用的初始条件是u0 = Float32.([0.062047128, 1.3126149f-7, 0.9486445]);. 我生成了从 t=0 到 25 的数据,每 0.02 采样一次(在训练中,我只使用每 20 个点左右来提高速度,使用更多并不能提高结果)。数据如下所示:训练数据

我正在训练的 UDE 是

每个神经网络 ( ann_dS, ann_dI, ann_dx) 都使用 定义FastChain(FastDense(3, 20, tanh), FastDense(20, 1))。我尝试使用具有 3 个输入和 3 个输出的单个神经网络,但它速度较慢并且性能也没有更好。我还尝试首先对网络的输入进行规范化,但除了减慢速度之外,它并没有显着的区别。

我试过的

  • 单拍 网络正好适合一条穿过数据中间的线。即使我在损失函数中对早期数据点进行更多加权,也会发生这种情况。单次训练
  • 多重射击 我得到的最好结果是多重射击。如此处所见,它不仅仅是拟合一条直线,而且也不是完全拟合数据Multiple Shooting Result。我尝试了从 0.1 到 100 的连续性术语和从 3 到 30 的组大小,但没有显着差异。
  • 各种其他策略 我也尝试过迭代地增加适合度、搭配搭配的 2 阶段训练和小批量,如下所述:https : //diffeqflux.sciml.ai/dev/examples/local_minima,https://diffeqflux .sciml.ai/dev/examples/collocation/ , https://diffeqflux.sciml.ai/dev/examples/minibatch/. 迭代地增加拟合在前几次迭代中效果很好,但随着长度的增加,它又回到拟合直线。2-stage 搭配训练在第 1 阶段效果非常好,但在第 2 阶段实际上并没有提高性能(我在第 2 阶段尝试过单拍和多拍)。最后,mini-batching 的效果与单次拍摄一样好(也就是说不是很好),但速度要快得多。

我的问题

总之,我不知道该尝试什么。有很多策略,每个策略都有很多可以调整的参数。我需要一种更准确地诊断问题的方法,以便更好地决定如何进行。如果有人有此类问题的经验,我会很感激我能得到的任何建议或指导。

0 投票
1 回答
134 浏览

julia - 如何使用 ModelingToolkit.jl 动态创建变量

主要问题是我的变量只有在运行代码后才能确定(因为变量的数量不固定)。

在旧版本的 ModelingToolkit.jl 中,我使用以下代码生成变量。

但是,它不能在最新版本中工作。这是错误。

我检查了 SymbolicUtils.jl 但没有找到其他用法。我该如何解决这个问题?

0 投票
1 回答
72 浏览

julia - 模拟反射边界 SDEProblem

我正在尝试模拟反射边界。根据此处找到的建议:我尝试了 Julia 中带有回调的随机微分方程

分别产生溶胶1和。溶胶2我注意到的一件事是,当 dt 较小时,反射的“质量”要好得多。我怀疑这是因为求解器只检查插值中的节点,而不是每个点。

这对选择自己的时间步长的自适应求解器有影响。例如,如果我现在使用求解器运行相同的问题,这是https://diffeq.sciml.ai/stable/solvers/sde_solve/SOSRI上的第一个建议,我得到:

溶胶3 可以说反射质量较差。

鉴于问题似乎是仅在结处评估条件,这是 a 的想法DiscreteCallback,我尝试了使用的最后一种方法ContinuousCallback

但这不起作用(我想我可能没有正确使用 ContinuousCallback。结果是溶胶4and 溶胶5,可以说没有反射

模拟这些过程的推荐方法是什么,以及显式时间步求解器是唯一受支持的方法吗?

0 投票
2 回答
88 浏览

julia - 用于求解同时 ODE 的并行代码 (DifferentialEquations.jl) - Julia

我有以下 ODE 耦合系统(来自离散积分微分 PDE): 在此处输入图像描述

xi 是我控制的 x 网格上的点。我可以用以下简单的代码解决这个问题:

然而,当我使我的网格更精细,即增加 N 时,计算时间会迅速增长(我猜缩放是 N 的二次方)。关于如何使用分布式并行或多线程来实现这一点有什么建议吗?

附加信息: 我附上了可能有助于了解程序大部分时间花费在哪里的分析图在此处输入图像描述

0 投票
0 回答
47 浏览

julia - 在 ODE 模型中加入强制函数以进行贝叶斯估计

我是 Julia 的 Turing 包的新手,需要一些帮助!

我一直在尝试使用离散强制函数估计模型的参数q(t),其中的值q(t)是离散的并且是从文件中读取的。BoundsError代码在求解 ODE 模型时抛出了一个错误。

下面提到的是使用的完整 Julia 脚本:

由于堆栈跟踪错误很长,我分享了查看链接: Full error

在错误中:

  1. 第 62 行是dy[1] = -β*w(t)*m(t)*I*S/N + λ*R; # S
  2. 第 107 行是predicted = solve(problem, Tsit5(), saveat=1.0)
  3. 第 123 行是chain = sample(model, NUTS(0.65), MCMCThreads(), 10000, number_of_chains);

有人可以帮我吗?提前致谢!

0 投票
0 回答
52 浏览

julia - 来自DifferentialEquations.jl 的Heston 模型示例给出桥接分布错误

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

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

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

但是,我不明白为什么

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