问题标签 [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 回答
79 浏览

julia - 使用微分方程:你没有更新

我相信这段代码有一个错误。为简洁起见,我将只编写定义 ODE 的函数

如果需要整个代码,我可以提供它,但它很乱,我不确定如何创建一个最小的示例。我在 Nmut = 2 时尝试过这个,所以我可以与硬编码版本进行比较。du 在第一个时间步的输出是相同的。但是这个版本似乎永远不会更新你,它保持在规定的 u0 上。

有谁知道为什么会这样?我也可以提供完整的脚本,但如果有人能看到你为什么不更新,我想避免这种情况。

编辑:

如果我们使用这个版本,du 会正确更新。为什么会这样?

0 投票
1 回答
322 浏览

julia - 朱莉娅情节;如何增加样本/数据点的数量?

在求解微分方程并绘制结果时,如何增加绘制的数据点数量?我有

具体来说,当使用 PyPlots 之类的东西时,我可以使用:

其中我设置了 num = 10000,这增加了样本数量并允许更高的数据点分辨率以获得更长的积分时间跨度。

显而易见的答案是使用 PyPlots,但我不确定是否可以将 PyPlots 与 DifferentialEquations 包一起使用。很高兴知道 Plots 是如何做到的。(根据功能,有些图非常参差不齐)。

0 投票
1 回答
165 浏览

julia - 如何让 Rosenbrock23 在 ParameterizedFunctions.jl DSL 中使用 ODE?

对于这个问题,我在ParameterizedFunctions.jlDSL 中实现了相同的模型。以下 MWE 有效:

但是,使用sol = solve(prob, Rosenbrock23())(甚至使用autodiff=false),会发生以下错误:

我想这是与上述类似的问题,但由于我没有Float64在这里明确定义任何向量并且autodiff=false没有消除错误,我不知道如何解决这个问题。有什么建议么?

0 投票
1 回答
340 浏览

julia - 使用隐式欧拉和共轭梯度线性求解器求解非零 Dirichlet BC 的热方程?

许多用户询问如何使用非零 Dirichlet BC 和内部线性求解器的共轭梯度求解热方程 u_t = u_xx。在转向更困难的抛物线 PDE 版本之前,这是一个常见的简化 PDE 问题。这是如何在DifferentialEquations.jl 中完成的?

0 投票
1 回答
958 浏览

indexing - 如何修复“LoadError:DimensionMismatch(“无法广播数组以减少维度”)”

我想以数值方式求解以下两个耦合微分方程:

具有定义的起始条件 phi_0(具有 N 个条目的 1-dim 数组)和 k_0(具有 NxN 个条目的 2-dim 数组)

我试过这个:使用DifferentialEquations.js,建立一个初始起始条件矩阵u0 = hcat(Phi_0, k_0) (2-dim array, Nx(N+1)),并以某种方式定义第一个方程适用于第一列(在我的代码 [:,1]) 中,第二个等式适用于其他列(在我的代码 [:,2:N+1] 中)。

运行这行代码会导致此错误:

我是 Julia 的新手,我不确定我是否朝着正确的方向前进。请帮我!

0 投票
1 回答
439 浏览

callback - Julia中带有回调的随机微分方程

我正在尝试使用来自DifferentialEquations.jl. 我想我可以FunctionCallingCallback通过在每个积分器步骤之后反映关于域边界的解决方案来处理边界。

这是我的代码

编辑:感谢 Chris Rackauckas 的评论解决了我最初的问题后,我修改了反射函数。现在代码运行了,但解决方案包含负值,这应该在每一步之后通过反射大约 0 来防止。

任何关于这里出了什么问题的想法都将不胜感激。

请注意,此处FunctionCallingCallback找到的示例包含回调函数的两个不同的函数签名,但我对两者都有相同的问题。我也不清楚回调是应该修改in 的值,还是返回新值。z

编辑 2: 基于 Chris Rackauckas 的回答,并查看此示例,我已通过反射函数进行了修改:

在初始条件下运行它z0 = -0.1会产生以下输出:

在我看来,这里发生的事情是:

  1. 第一个输出值就是z0。我希望首先应用反射,因为我设置了func_start = true.
  2. 第二个值也是负数表示两件事:
    1. 在第一次积分器调用之前未调用回调。
    2. 在第一次积分器调用后存储输出之前未调用回调。

我本来希望输出中的所有值都是正数(即,在存储输出之前对它们应用回调)。我做错了什么,还是应该简单地调整我的期望?

0 投票
1 回答
627 浏览

julia - 在 JULIA 的分布式 for 循环中写入共享数组

我有一个需要求解各种参数的 ODE。以前我使用 MATLAB 的 parfor 来划分多个线程之间的参数范围。我是 Julia 的新手,现在需要在 Julia 中做同样的事情。这是我正在使用的代码

当使用一个worker时,for循环基本上是作为一个普通的单线程循环执行的,它工作正常。但是,当我使用 addprocs(n) 添加 n 更多工作人员时,没有任何内容写入 SharedArrays RS、P 和 bif。我感谢任何人可以提供的任何指导。

0 投票
1 回答
520 浏览

julia - 使用伪谱法的 Julia 中的复杂 PDE (Ginzburg Landau)

我想自学如何用 Julia 求解 PDE,我现在正在尝试用 Julia 中的伪光谱方法求解复杂的 Ginzburg Landau 方程 (CGLE)。但是,我对此感到很挣扎,并且我对尝试什么有点想法。

CGLE 内容如下: cgle

通过傅里叶变换F及其逆变换F-1,我可以变换为谱形式:

cgle光谱

例如,在我发现的这个旧脚本中也给出了这一点(https://www.uni-muenster.de/Physik.TP/archive/fileadmin/lehre/NumMethoden/SoSe2009/Skript/script.pdf)来自同一个来源知道,alpha = 1,beta = 2 和在 0 附近具有 0.01 阶小噪声的初始条件应该导致平面波作为解决方案。这就是我想首先测试的。

遵循 Chris Rackauckas ( https://youtu.be/okGybBmihOE ) 的非常好的教程,我尝试通过以下方式使用 ApproxFun 和 DifferentialEquations 来解决这个问题:

编辑:我更正了原始帖子中的两个错误,一个缺失的点和减号,但代码仍然没有给出正确的结果

EDIT2:发现我计算的波数k完全错误

(已编辑)我尝试了不同的求解器,正如视频中所推荐的那样,有些显然不适用于复数,有些则可以,但是当我运行此代码时,它并没有给出预期的结果。该解决方案的价值仍然很小,并且不会产生实际上应该是结果的平面波。我还测试了其他会导致混乱的初始条件,但这些也会导致相同的非常小的解决方案。我还交替使用了 ApproxFun 的显式拉普拉斯算子,但结果是一样的。我的问题是,我既不是 PDE 数学的真正专家,也不是他们的数值处理专家,到目前为止,我主要使用 ODE。

EDIT2这现在似乎或多或少地起作用。我仍然想知道一些事情

  • 我如何在指定的域上计算它x\in[-L/2;L/2],我对它如何与 ApproxFun 一起工作感到非常困惑,据我所知波数k应该是(2pi/L)*[-N/2+1 ; N/2 -1],但我不太确定如何用 ApproxFun 做到这一点
  • https://codeinthehole.com/tutorial/coherent.html显示了方程的不同动态状态/相图。虽然我可以重现其中一些,但有些似乎不起作用,比如时空间歇性

编辑 3:我通过直接使用 FFTW 而不是 ApproxFun 解决了这些问题。如果有人知道如何使用 ApproxFun,我仍然会感兴趣。下面是 FFTW 的代码(它也对性能进行了一些优化)

编辑 4:对于这种情况,Rodas 是一个极其缓慢的求解器,只使用默认值对我来说效果很好。

任何帮助表示赞赏。

0 投票
2 回答
505 浏览

julia - 从 ODE 问题中提取导数 (du/dt)

我有多个要解决的 ODE 问题。我需要解决方案(u)和解决方案的导数(du)。对于较小的 ODE,我可以执行以下操作

其中 u2 基本上是 SB 函数中的 du[2]。随着我的 ODE 大小的增长(>500 个耦合 ODE 与 >500X500 矩阵),这很快变得不切实际。有没有办法让DifferentialEquations.jl 包(或任何其他方式)在解决ODE 时导出du[i]s?我了解到 DiffEqSensitivity.jl 包能够提供 du/dps 来检查模型对 p 的敏感性。有没有类似于提取 du/dts 的东西?

0 投票
1 回答
415 浏览

python-3.x - 无法通过 diffeqpy 求解微分方程

最近,我了解了diffeqpy并想尝试一下。我有这个 Julia 代码,它有效并给出了预期的结果:

现在,如果我尝试在 Python 中通过 解决它diffeqpy,它就行不通了。

我收到以下错误消息:

你能告诉我这个错误是什么意思,以及如何解决它吗?