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

julia - 如何在DifferentialEquations.jl 中使用新的初始化方案?

我正在尝试使用 DifferentialEquations.jl 的新初始化方案选项

https://diffeq.sciml.ai/dev/solvers/dae_solve/#Initialization-Schemes-1

但我不知道如何访问新方法。

前面的示例返回以下错误:

我究竟做错了什么?

0 投票
1 回答
101 浏览

julia - 如何使用DifferentialEquations.jl消除具有不确定形式的微分方程的解中的振荡

我正在尝试解决具有不确定形式的微分方程,我正在使用 Julia 和 DifferentialEquations.jl 包来解决这个问题。

我从一个我知道的具有不确定形式的简单微分方程开始(作为测试用例),看看这是否可行(我的最终目标是求解一个复杂的微分方程系统并将其与机器学习相结合。这需要大量我在分析和编码方面付出的努力,我只想在我知道一些基本的测试用例有效时才开始)。

这是我开始的测试用例代码:

这个问题的解析解(在天体物理学中被称为邦迪流问题)是众所周知的(即使对于不确定的情况)。我对从求解器获得的不确定解感兴趣。

当我使用求解时,sol = solve(prob)我得到的振荡解与我知道的平滑解析解完全不同(参见下面链接中的图)。

绘制 u 与 t

我期待在 t 接近 50 时遇到一些“问题”(同时,由 u 表示的 y 轴变量(表示速度)将接近 100),因为只有这样分子(和分母)才会一起消失。任何想法为什么解决方案开始振荡?

我也尝试过sol = solve(prob, alg_hints = [:stiff])并收到以下警告:

警告:中断。需要更大的maxiters。@DiffEqBase C:\Users\User.julia\packages\DiffEqBase\1yTcS\src\integrator_interface.jl:329

解决方案仍然振荡(类似于在没有施加刚度的情况下获得的解决方案)。

我在这里做错了什么吗?是否有另一种方法可以使用DifferentialEquations.jl 包解决此类不确定方程?

0 投票
1 回答
306 浏览

julia - 为什么 Julia 中的微分方程给我这个 ODE 系统的“无匹配方法”错误?

我想在 Julia 中求解一个由七个耦合 ODE 组成的系统。

我的代码是:

我收到以下错误:

ODE 函数 bsys 中的各种函数调用工作正常。我认为问题在于我在表达式中为 dv 赋值的算术。

对此的任何帮助将不胜感激。我是 Julia 的新手,不知道可能出了什么问题。

0 投票
1 回答
236 浏览

event-handling - 如何根据 Julia 中的事件实现 ODE 解决方案的终止?为什么我会收到 BoundsError?

我正在尝试使用Julia中的DifferentialEquations包解决耦合ODE,并尝试实现连续回调以检查某个变量何时变得足够小,因此我可以终止集成。函数 xdot 和 ddot 是前面定义的,没有 cb = 回调参数也可以正常工作。

当我运行最后一行时,出现错误:

终止此事件对这段代码很重要,而且我是 Julia 的新手。我真的很感激任何帮助!

0 投票
2 回答
810 浏览

parallel-processing - How can I run a simple parallel array assignment operation in Julia?

I have to solve a differential equations system many times, iterating over a parameter. For this, I run a loop over a list of the parameter, and store the solution (evaluated at an array of time values) for each parameter. So I have a 2D array in which I store solutions (each row is for a value of the parameter).

Now, since any iteration has nothing to do with another one, I thought of doing this in parallel.

Here is my code:

Now, when I run this without the @distributed prefixed to the loop, this runs perfectly.

When I run this code, however, the println statement does not work, and although the file "output.txt" is stored, it is full of zeros.

I'm running this code from the command line this way

This shows no output and just works for a minute and does nothing, although the file "output.txt" is stored. It's as if the loop is never entered.

I would really appreciate some help on how to set up this simple parallel loop.

0 投票
1 回答
118 浏览

performance - 随机微分方程的疯狂空间分配求解系统

第一次在这里问问题。我之前使用一个简单的 MATLAB 脚本对 90 个 Hopf 振荡器进行建模,这些振荡器通过一个矩阵耦合,带有 randn 噪声,以及一个简单的欧拉阶跃积分。我想升级这个,所以我进入了 Julia,似乎有很多令人兴奋的属性。

这是我正在求解的方程组

我有点迷路了。我开始使用 differentequations.jl (stochastic solver) ,找到了一个解决方案,并发现自己有一个基准,告诉我解决 200 秒占用了 4 Gb !!!(2.5 Gb,alg_hints=[:stiff])(我没有固定 dt,以前我使用 dt=0.1)

BenchmarkTools.Trial:内存估计:2.30 GiB

分配器估计:722769


最短时间:859.224 毫秒(13.24% GC)

中位时间:942.707 毫秒(13.10% GC)

平均时间:975.430 毫秒(12.99% GC)

最长时间:1.223 秒(13.00% GC)


样品:6

评估/样本:1

有什么想法吗?我正在检查几种解决方案,但它们都没有将内存量减少到合理的量。提前致谢。

0 投票
0 回答
88 浏览

julia - 使用微分方程的 Julia 中的 Comlex 值参数估计

我想使用 Optim 和微分方程来估计 ODE 的复杂参数。我通过更改文档中示例中的参数构建了一个示例案例: https ://diffeq.sciml.ai/latest/analysis/parameter_estimation/#Optimization-Based-ODE-Inference-Examples-1

我到了可以建立损失目标的地步,然后返回复杂的值。

然后我尝试使用 optimize() 来优化我的成本函数,它返回以下错误:

是否可以在复值函数上使用此方法?如果是的话,这样做的正确方法是什么?

编辑:

0 投票
1 回答
58 浏览

julia - 在 Julia 中切换 ODE 函数

微分方程包的Fom文档,可以使用参数在ODE函数集之间切换

这是否可以使用因变量(状态变量)而不是参数 p 作为开关

预先感谢您的帮助。

0 投票
1 回答
1249 浏览

julia - Julia中的二阶微分方程

我是 Julia 编程的新手,我设法解决了一些一阶 ODE,但是当我想转到二阶时,我不知道如何使用求解器来实现所需的方程。

我想解这个方程

有初始条件

我怎样才能做到这一点?

0 投票
1 回答
79 浏览

julia - DifferentialEquations.jl 中的回调函数选择问题

我有一个对象,当它达到阈值时,它将进入静默期,我使用一个在 1 和 0 之间翻转的参数(我称之为ode_status)来确定是否执行 ODE。

阈值由 实施ContinuousCallback

接下来,我想在 5s 后将 ode_status 翻转回来,所以我使用DiscreteCallback.

然而,结果并不是我想的那样。ode_status 翻转回来的时间并不正好在 5s 之后。它在 5.107... 或在另一个试验中为 5.879。

我想我滥用了这些回调函数。有人能告诉我如何解决这个问题吗?提前致谢!